【正文】
接口描述符 包含 端點(diǎn)河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 第 2章 USB協(xié)議概述 5 描述符。 協(xié)議定義了五種標(biāo)準(zhǔn)描述符:設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符和字符串描述符。當(dāng)設(shè)備插入 USB 插座時(shí),接上拉電阻的數(shù)據(jù)線的電壓由上拉電阻和下拉電阻分壓決定,大概在 3V 左右。 插入檢測(cè)機(jī)制就是檢測(cè)到設(shè)備插入到主機(jī)的過(guò)程。 USB 使用的是 NRZI 編碼方式,即數(shù)據(jù)為 0 時(shí)電平翻轉(zhuǎn),數(shù)據(jù)為 1 不翻轉(zhuǎn)。 USB 的拓?fù)浣Y(jié)構(gòu)為金字塔型,塔頂為主控制器和根集線器,下面 是通過(guò) USB 集線器 拓展的多個(gè) USB 口。 所以最好不要把多個(gè) USB 設(shè)備接到同一個(gè) USB 端口上。 主機(jī) 在一般情況下都會(huì)具有 一個(gè)或多個(gè) USB 主控制器( host controller)和根集線器( root hub)。 在傳輸速度上 , 和 版本只支持 12Mb/s 的全速模式 。 USB 在 PC 上往往具有多個(gè)接口,可以同時(shí)連接多個(gè)外設(shè),最高可連接 127 個(gè)設(shè)備。這讓用戶在使用外接設(shè)備時(shí)不需要進(jìn)行關(guān)機(jī)再開(kāi)機(jī)就可以完成硬件的安裝,分分鐘就可以使用,省時(shí)省力。但不管是哪一種鼠標(biāo)都少不了和 USB 打交道,特別是 出現(xiàn)以后,基于 USB 的設(shè)備已經(jīng)是電子產(chǎn)品研發(fā)的主流。與主流 PC 部件相比,鼠標(biāo)的技術(shù)革新顯得非常保守,從道格拉斯博士的原始鼠標(biāo),再到后來(lái)的純機(jī)械鼠標(biāo)、光電鼠標(biāo)、光機(jī)鼠標(biāo),以及光學(xué)鼠標(biāo),鼠 標(biāo)技術(shù)只經(jīng)歷寥寥幾次大變革,其中真正算得上成功的其實(shí)只有光機(jī)鼠標(biāo)和光學(xué)鼠標(biāo),它們也是當(dāng)前鼠標(biāo)技術(shù)的主流形態(tài)。它自身帶的 USB 模塊符合 ,支持全 速 12Mbps和低速 。 HID 設(shè)備的描述符主要包括 5 個(gè) USB 的標(biāo)準(zhǔn)描述符和 3 個(gè)HID 設(shè)備類特定描述符。從有線到無(wú)線,從滾球到光電,鼠標(biāo)經(jīng)過(guò)一代代的發(fā)展可以說(shuō)是品種繁多,價(jià)格也是十幾元到幾千元的都有。 從 1975年第一個(gè)單片機(jī)產(chǎn)生后經(jīng)過(guò)四代的發(fā)展,目前單片機(jī)具有生命周期長(zhǎng)、接口 內(nèi)容豐富、運(yùn)算速度快、低電壓低功耗、價(jià)格便宜等優(yōu)點(diǎn)。但 HID 設(shè)備使用的是操作系統(tǒng)自帶的 HID 驅(qū)動(dòng)程序,免去了驅(qū)動(dòng)程序的編寫(xiě),加快了開(kāi)發(fā)效率,因此一些簡(jiǎn)單的 USB 設(shè)備,都喜歡枚舉成 HID 設(shè)備。 STM32 microcontroller。本文主要研究基于 STM32的 USB 簡(jiǎn)易鼠 標(biāo)系統(tǒng)的功能、設(shè)計(jì)思想和實(shí)現(xiàn),以及基于 STM32 的 USB 簡(jiǎn)易鼠標(biāo)的組成及工作原理,描述了研究該課題的意義和應(yīng)用價(jià)值。 HID設(shè)備的驅(qū)動(dòng)程序 內(nèi)置在這些系統(tǒng)中 , 不需要單獨(dú)開(kāi)發(fā)與安裝驅(qū)動(dòng), 應(yīng)用程序可以直接使用這些驅(qū)動(dòng)程序來(lái)與設(shè)備通信。 HID是 計(jì)算機(jī)周邊設(shè)備中非常 常 見(jiàn) 的設(shè)備類型,是 可以 直接與 進(jìn)行 人交互的 USB 設(shè)備,例如鼠標(biāo) 、 攝像頭 、 U 盤等。 畢 業(yè) 設(shè) 計(jì) [論 文 ] 題 目: 基于 STM32 的 USB 簡(jiǎn)易鼠標(biāo)設(shè)計(jì) 學(xué) 院: 電氣與信息工程學(xué)院 專 業(yè): 電子信息工程 姓 名: XXX 學(xué) 號(hào) : XXXXXX 指導(dǎo)老師: XXX 完成時(shí)間: 2020 年 06 月 01 日 河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 摘要 I 摘 要 隨著設(shè)備的越來(lái)越智能化,嵌入式計(jì)算機(jī)大量應(yīng)用到各種電子設(shè)備中,基于嵌入式系統(tǒng)的 USB 鼠標(biāo)及鍵盤的應(yīng)用也變得越來(lái)越廣泛。 嵌入式系統(tǒng) HID,即 人機(jī)接口設(shè)備 ,是 Human Interface Device 的縮寫(xiě)。 最 早 支持 HID 設(shè)備的 計(jì)算機(jī)操作 系統(tǒng) 是 Windows98 系統(tǒng)。隨著 以及 的不斷完善,再加上高速而價(jià)廉的單片機(jī),一款基于 STM32 的 USB 簡(jiǎn)易鼠標(biāo)正是本課題的研究?jī)?nèi)容。 HID protocol。一 般 USB 設(shè)備的研發(fā)非常困難,不但要嚴(yán)格遵守 USB 協(xié)議,還要編寫(xiě)驅(qū)動(dòng)程序。 USB 協(xié)議最早在 1996 年提出,經(jīng)過(guò)多年的發(fā)展 USB 版本到現(xiàn)在已經(jīng)發(fā)展為 版本。 鼠標(biāo)自從 1968 年美國(guó)科學(xué)家研制出來(lái)后,基于其方便快捷操作簡(jiǎn)單等優(yōu)點(diǎn)很快成為家喻戶曉的產(chǎn)品,是現(xiàn)在每臺(tái)電腦都必須配備的電子產(chǎn)品。 基于 STM32 的 USB 鼠標(biāo)的設(shè)計(jì)研究方法及目標(biāo) 想 讓計(jì)算機(jī) 把 一個(gè) HID 設(shè)備識(shí)別為鼠標(biāo)設(shè)備,要完成的主要工作是修改 HID 設(shè)備的 標(biāo)準(zhǔn) 描述符。 本文所講述的 USB 鼠標(biāo)是采用 STM32 來(lái)實(shí)現(xiàn)的。 USB 鼠標(biāo)國(guó)內(nèi)外研究現(xiàn)狀 從原始鼠標(biāo)、 機(jī)械鼠標(biāo) 、 光電鼠標(biāo) (光學(xué)鼠標(biāo), 激光鼠標(biāo) )再到如今的觸控鼠標(biāo),鼠標(biāo)技術(shù)經(jīng)歷了漫漫 征途 終于修成正果?,F(xiàn)在光學(xué)鼠標(biāo)的技術(shù)相當(dāng)完善,基本上每個(gè)人用的都是光學(xué)鼠標(biāo)。 現(xiàn)在 USB 設(shè)備 已進(jìn)入千家萬(wàn)戶, 應(yīng)用 之所以如此廣泛 ,優(yōu)點(diǎn) 主要有以下幾點(diǎn) : 支持熱插拔,也就是即插即用。 可以連接多個(gè)設(shè)備。 USB OTG 就是讓同一個(gè)設(shè)備在不同場(chǎng)合下實(shí)現(xiàn)主機(jī)與從機(jī)之間的切換。 USB 的拓?fù)浣Y(jié)構(gòu) 前面提到, USB 是一種主從結(jié)構(gòu)的系統(tǒng) 。集線器雖然可以擴(kuò)展出更多的 USB 口,但不能擴(kuò)展出更多的帶寬,帶寬還是共享的。在“設(shè)備管理器 ” 中 找到“通用串行總線控制器 ” 并把它展開(kāi),就可以看到 USB 主控制器和根集線器了。在 USB OTG 中又增加了一種 MINI USB 接頭,使用五條線,比標(biāo)準(zhǔn) USB 多一條身份識(shí)別線 。 USB 標(biāo)準(zhǔn)還規(guī)定了信號(hào)線的顏色,其中 5V電源線為紅色, D‐為白色, D+為綠色, GND 為黑色。上拉電阻接正還是負(fù)由設(shè)備速度決定,全速和高速設(shè)備接正,低速設(shè)備接負(fù)。 USB 描述符 前面說(shuō)道 USB 是一個(gè)總線, USB 總線驅(qū)動(dòng)程序也不知道設(shè)備的行為,那么主機(jī)怎么獲知設(shè)備的功能呢,這就 要通過(guò)描述符來(lái)實(shí)現(xiàn)了。在設(shè)備描述符中描述了該設(shè)備的各種配置,每種配置都有一個(gè)配置描述符,定義了設(shè)備有多少個(gè)接口,接口描述符又定義了接口有多少端點(diǎn)。 USB 的包結(jié)構(gòu) 在 USB 總線上,數(shù)據(jù)是以包為單位進(jìn)行傳輸?shù)?。同步域還可以同步主機(jī)端和設(shè)備端的數(shù)據(jù)時(shí)鐘。 USB 協(xié)議規(guī)定了四類包:令牌包、數(shù)據(jù)包、握手包和特殊包。因?yàn)?USB 的拓?fù)浣Y(jié)構(gòu)是主從結(jié)構(gòu),所有數(shù)據(jù)的傳輸都是由主機(jī) 發(fā)起的,設(shè)備只負(fù)責(zé)接受,所以需要主機(jī)發(fā)送一個(gè)令牌來(lái)通知需要的設(shè)備進(jìn)行相應(yīng)的操作。四種令牌包中,只有 SOF 令牌包之后不跟隨數(shù)據(jù)傳輸,其他包都有數(shù)據(jù)傳輸。 DATA0和 DATA1包。主機(jī)和設(shè)備都會(huì)維護(hù)自己的一個(gè)數(shù)據(jù)包類型切換機(jī)制,即當(dāng)數(shù)據(jù)包成功發(fā)送或接收時(shí),數(shù)據(jù)包類型切換。此時(shí)它就會(huì)保持自己的數(shù)據(jù)包類型不變,如果對(duì)方下次發(fā)送的數(shù)據(jù)包類型和自己不同,說(shuō)明對(duì)方已經(jīng)成功接收數(shù)據(jù)。 NAK 表示沒(méi)有數(shù)據(jù)需要返回或已經(jīng)正確接受 但沒(méi)有空間容納。 同步域 包標(biāo)志 PID EOP 圖 握手包結(jié)構(gòu) 特殊包 只在一些特殊場(chǎng)合使用,分 PRE、 ERR、 SPLIT 和 PING 四種。 PRE 僅僅使用在全速模式中,與握手包的結(jié)構(gòu)一樣。 批量傳輸 :使用批量事務(wù)傳輸數(shù)據(jù) 。 同步傳輸 : 有些設(shè)備如音頻、視頻設(shè)備對(duì)數(shù)據(jù)的延遲很敏感,而且需要對(duì)大量數(shù)據(jù)不停的傳輸,但對(duì)數(shù)據(jù)的正確與否要求不高,此時(shí)同步傳輸是最好的選擇。數(shù)據(jù)過(guò)程可選,如果有可以包含一筆或多比數(shù)據(jù)事務(wù)。本次設(shè)計(jì)使用的是 M 系列,因?yàn)檫@個(gè)系列成本較低,性能上也完全能夠勝任。 圖 是 STM32F103 處理器的配置。 MDK 集成了 Keil 的μ Vision IDE 和 ARM 編譯工具 RVCT 的優(yōu)勢(shì)。下面是 此次設(shè)計(jì)中 的 具體操作 : 在 MDK 主界面中選擇 Project→ New Project 菜單項(xiàng),輸入工程名字即可新建一個(gè) 工程。 工程創(chuàng)建完了,接下來(lái)就是源程序的編寫(xiě)了。點(diǎn)擊 Project→ Conponents,Environment and Books→ Project Components 創(chuàng)建文件組來(lái)管理啟動(dòng)代碼、源程序和配置文件。應(yīng)用程序在調(diào)試通過(guò)后,需要生成 HEX 文件,用于下載到編程器或仿真器中。如果設(shè)備已經(jīng)成功安裝,試用開(kāi)發(fā)板的四個(gè)按鍵操縱鼠標(biāo)箭頭。 USB 鼠標(biāo)的程序比較復(fù)雜,除了庫(kù)文件和 USB函數(shù)庫(kù)文件之外,還包含了 8 個(gè)源文件,其中 是啟動(dòng)代碼,這里不再多說(shuō)。 該文件中沒(méi)有任何函數(shù),只是包含一些定義 USB 設(shè)備的描述符常數(shù),由于 USB鼠標(biāo)是一個(gè)標(biāo)準(zhǔn)的 USB 設(shè)備,所以相關(guān)的參數(shù)也比較容易得到。 該文件中只有一個(gè)函數(shù),就是上面提到的用于 控制 USB 中斷的 USB_Istr 函數(shù),此 函數(shù) 的 主要 作用 是對(duì)各類引起 USB 中斷的事件作輪詢處理。其中 Set_USBClock函數(shù)用于配置 USB 端口時(shí)鐘; Set_System 函數(shù)用于配置時(shí)鐘、通用端口;USB_Cable_Config 函數(shù)配置 USB 電纜狀態(tài); USB_Interrupts_Config 函數(shù)用于配置 USB 中斷; JoyState 函數(shù)用于獲取按鍵狀態(tài); Joystick_Send 用于向 USB 端口河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 第 4章 USB鼠標(biāo)的實(shí)現(xiàn) 11 發(fā)送按鍵的事件。任何 USB 設(shè)備都要能夠接收大于八字節(jié)的數(shù)據(jù)。表 是獲取描述符請(qǐng)求的結(jié)構(gòu)。設(shè)備在收到描述符請(qǐng)求后,就會(huì)按照描述符類型的編號(hào),返回對(duì)應(yīng)的描述符。圖 是 HID 描述符的結(jié)構(gòu)。 ④重啟開(kāi)發(fā)板。 設(shè)備描述符 字符串描符 配置描述符 字符串描符 接口描述符 字符串描符 端點(diǎn)描述符 字符串描符 河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 第 4章 USB鼠標(biāo)的實(shí)現(xiàn) 13 圖 設(shè)備管理器 河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 設(shè)計(jì)總結(jié) 14 設(shè)計(jì)總結(jié) 隨著計(jì)算機(jī)技術(shù)的發(fā)展,個(gè)人電腦的價(jià)格越來(lái)越低,現(xiàn)在基本上每個(gè)家庭都有一臺(tái)電腦,而鼠標(biāo)作 為與電腦配套的設(shè)備之一,正處于開(kāi)發(fā)研制的高潮?,F(xiàn)在的電腦都至少配備了兩個(gè)以上的 USB 接口,不夠用的話,還可以用 USB 集線器拓展,非常方便,所以 USB 設(shè)備的應(yīng)用前景非常廣闊 。本來(lái)選這個(gè)題目就是為了學(xué)東西,雖然我確實(shí)沒(méi)有什么天賦,但不論遇到什么困難,都不能讓我止步。尤其要強(qiáng)烈感謝我的 畢業(yè)設(shè)計(jì)指導(dǎo)老師 — 侯寧 老師, 他 對(duì)我進(jìn)行了無(wú)私的指導(dǎo)和幫助,不厭其煩 對(duì)畢業(yè)設(shè)計(jì)設(shè)計(jì)方案、所遇到的問(wèn)題給予幫助,對(duì)畢業(yè)設(shè)計(jì) 論文的修改和改進(jìn) 給予意見(jiàn) 。感謝我的同學(xué)和朋友,在我 完成畢業(yè)設(shè)計(jì) 的過(guò)程中給予我了很多 的幫助。 /* * Function Name : main * Description : Main program * Input : None * Output : None 河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 附錄 18 * Return : None * Attention : None */ int main(void) { Set_System()。 while (1) { if (bDeviceState == CONFIGURED) { if (JoyState() != 0) { Joystick_Send(JoyState())。R C C _A P B 2P e r iphC loc kC m d ( R C C _A P B 2P e r iph_ G P I O B , E N A B L E ) 。G P I O _I ni t ( G P I O B , amp