官术网_书友最值得收藏!

第4章 USB設(shè)備硬件電路設(shè)計(jì)

本書要實(shí)現(xiàn)的USB設(shè)備是一個(gè)基于STM32F103C8T6單片機(jī)的最小系統(tǒng),其相應(yīng)的電路原理圖如圖4.1所示。

圖4.1 電路原理圖

為了讓STM32F103C8T6單片機(jī)能夠正常工作,首先必須給其供電引腳提供合適的電源電壓。VDD與VSS分別為單片機(jī)內(nèi)部數(shù)字邏輯電路的供電電源與公共地引腳,將它們分別連接起來一起供電即可。為保證電路工作的穩(wěn)定性,還為每一對VDD與VSS引腳配置了一個(gè)100nF的旁路電容。VDDA與VSSA是單片機(jī)內(nèi)部模擬電路(如模數(shù)轉(zhuǎn)換器、RC振蕩器、鎖相環(huán)等)的供電引腳,我們將它們分別與VDD與VSS連接,并且配置了一個(gè)100nF的旁路電容。

那么STM32F103C8T6單片機(jī)的電源供電電壓應(yīng)該是多少呢?根據(jù)其數(shù)據(jù)手冊中的說明,VDD供電范圍為2~3.6V。如果對功耗有較高要求,則可以考慮使用低壓供電(如2.4V)。此處我們并沒有特殊要求,所以選擇了更常用的3.3V,它由型號為LM1117的低壓差線性調(diào)整器(Low Dropout Regulator,LDO)芯片從USB接口(J3)的VBUS(+5V)獲得,LDO芯片輸入與輸出引腳并聯(lián)的4.7μF的旁路電容可以進(jìn)一步保證工作的穩(wěn)定性。

我們還需要配置一個(gè)振蕩時(shí)鐘源作為系統(tǒng)工作時(shí)鐘,這樣單片機(jī)才能按一定的時(shí)鐘頻率執(zhí)行程序代碼。STM32F103C8T6單片機(jī)的系統(tǒng)工作時(shí)鐘可以來源于內(nèi)部RC振蕩器或外部晶體。如果僅僅作為一般的應(yīng)用(要求不高),則可以考慮選擇RC內(nèi)部振蕩源,這樣可以簡化電路設(shè)計(jì)而降低硬件成本。由于USB的傳輸速率比較高,對時(shí)鐘頻率的穩(wěn)定度要求更高,因此我們決定采用外掛晶體(頻率范圍為4~16MHz,本例為8MHz)的方案,它與兩個(gè)匹配電容(典型的容值范圍為5~25pF,本例為22pF)及一個(gè)反饋電阻(阻值為1MΩ)配合單片機(jī)的內(nèi)部電路構(gòu)成振蕩源。

如果需要復(fù)位功能,也可以如圖4.1所示連接一個(gè)輕觸按鍵,由于NRST引腳內(nèi)部已經(jīng)集成了約40kΩ的上拉電阻,因此并沒有再額外連接上拉電阻。

大多數(shù)單片機(jī)經(jīng)過電源、振蕩時(shí)鐘、復(fù)位相關(guān)引腳的處理后即可正常工作,但對于STM32F103FC8T6單片機(jī)仍然不夠,還必須設(shè)置正確的啟動模式(Boot Mode),相關(guān)的兩個(gè)引腳為BOOT0與BOOT1,其功能如表4.1所示。

表4.1 引腳BOOT0和BOOT1的功能(啟動模式)

主Flash存儲器(Main Flash Memory)是將固件下載到單片機(jī)后的目標(biāo)存儲區(qū),其功能與前述用來存儲固件的ROM相同,只不過Flash存儲器是可讀可寫的,也是目前單片機(jī)固件的主流存儲器,芯片正常工作時(shí)會從該區(qū)域啟動程序執(zhí)行過程,這也是產(chǎn)品出貨時(shí)應(yīng)該設(shè)置的啟動模式。系統(tǒng)存儲器(System Memory)是芯片內(nèi)部一塊特定的ROM區(qū)域,STM32單片機(jī)出廠時(shí)在該區(qū)域預(yù)置了一段啟動代碼(Boot Loader),也就是我們常說的在系統(tǒng)編程(In System Program, ISP)程序(出廠后無法修改),它提供了串口下載程序的固件,可以借此將固件下載到主Flash存儲器中。內(nèi)置SRAM(Embedded SRAM)模式一般用于程序調(diào)試,大家了解一下即可。

總體上,如果使用JTAG或SWD接口下載固件,使用主Flash存儲器啟動模式即可。當(dāng)然,這兩種接口需要使用特殊的固件下載器。如果你手中只有串口,而你又不想花錢置辦JTAG或SWD接口下載器,那么你可以先將單片機(jī)設(shè)置為系統(tǒng)存儲器啟動模式,這樣即可將固件下載到Flash存儲器,但需要注意的是:每次下載固件成功后,仍然需要重新切換到主Flash存儲器啟動模式,然后復(fù)位(或重啟電源)才能正常運(yùn)行。

為了方便后續(xù)的硬件調(diào)試工作,我們使用兩個(gè)10kΩ的電阻將引腳BOOT1與BOOT0下拉到地(而不是直接將它們與公共地相連),這意味著默認(rèn)的啟動模式為主Flash存儲器,這樣在必要的情況下,我們?nèi)匀豢梢酝ㄟ^插座(J1與J2)調(diào)整BOOT1與BOOT0的電平狀態(tài)而改變啟動模式。

在完成供電電源、振蕩源復(fù)位、啟動模式的電路設(shè)計(jì)后,STM32F103C8T6單片機(jī)就可以正常工作了(還有一些其他引腳,我們不必理會,有興趣的可自行參考相關(guān)資料),接下來的工作就是將需要使用到的引腳與相應(yīng)的外圍器件進(jìn)行連接即可。

STM32F10x系列的單片機(jī)(含STM32F103C8T6)將所有使用到的I/O引腳劃分為PA~PG(共7組),每組最多有16個(gè)引腳(例如,PA組包含的引腳為PA0,PA1,PA2,…,PA14,PA15,其他以此類推),所以理論上最多支持112個(gè)IO引腳。當(dāng)然,并不是所有STM32F10x系列的單片機(jī)都有這么多引腳。例如,STM32F103C8T6單片機(jī)為LQFP48封裝,最多可用的IO引腳數(shù)量為32個(gè)。當(dāng)然,有些I/O引腳與一些特殊功能引腳是復(fù)用的。例如,USB控制器的差分信號線D+、D-分別對應(yīng)PA12、PA11,如果你要使用IO引腳控制LED(或讀取按鍵)的狀態(tài),這兩個(gè)引腳自然是不能使用的(除非你的應(yīng)用中沒有使用到USB控制器)。表4.2列出了圖4.1所示USB設(shè)備硬件中的IO引腳資源規(guī)劃。

表4.2 圖4.1所示USB設(shè)備硬件中的IO引腳資源規(guī)劃

將4個(gè)發(fā)光二極管(D1~D4)以低有效的方式與單片機(jī)的引腳相連,7個(gè)輕觸按鍵(K1~K7)則以高有效的方式與單片機(jī)的引腳相連(K8為復(fù)位按鍵),同樣也沒有給這些引腳添加下拉電阻,因?yàn)槲覀兛梢栽谠创a中使能STM32單片機(jī)內(nèi)部已經(jīng)集成的下拉(或上拉)電阻。

最后,將USB控制器相關(guān)的D+、D-信號線與USB接口連接即可。需要注意的是,D+與D-屬于差分信號對,在進(jìn)行PCB布線時(shí)一般遵循“等長等距”的原則(等長優(yōu)先),在要求較高的場合下,還需要進(jìn)行線寬、線距的計(jì)算,并與PCB廠家聯(lián)系進(jìn)行阻抗控制。如圖4.2所示為USB差分線PCB布線示例。

圖4.2 USB差分線PCB布線示例

需要特別注意的是:信號線D+與VDD之間連接了一個(gè)1.5kΩ的上拉電阻,為什么要這么做呢?它用來給“主機(jī)檢測設(shè)備支持速率模式”提供判斷依據(jù)!我們前面已經(jīng)提過,USB 2.0支持低速、全速與高速三種模式,那么主機(jī)通過什么來判斷USB設(shè)備支持哪種模式呢?主機(jī)就是根據(jù)D+或D-的引腳電平來判斷USB設(shè)備是支持低速還是支持全速的。

USB 2.0規(guī)范已經(jīng)明確指出,主機(jī)(或集線器)端的D+、D-引腳均連接了阻值約為15kΩ的下拉電阻,這也就意味著:在沒有USB設(shè)備與主機(jī)(或集線器)連接時(shí),D+與D-信號線都是低電平。如果你的設(shè)備支持低速模式,則應(yīng)該在信號線D-連接約1.5kΩ的上拉電阻,如果你的設(shè)備支持全速模式,則應(yīng)該在信號線D+連接約1.5kΩ的上拉電阻(上拉電平的范圍為3.0~3.6V,典型值為3.3V),如圖4.3所示。

圖4.3 高速與全速設(shè)備的檢測

在實(shí)際工作中,USB主機(jī)會不斷地(每隔一般時(shí)間)查詢根集線器,通過檢查信號線D+與D-的電平變化來了解USB設(shè)備的連接狀態(tài)。當(dāng)集線器檢測到電平發(fā)生變化時(shí),就會報(bào)告給USB主機(jī)(或者通過上一層的集線器報(bào)告給USB主機(jī)),這樣就能檢測到USB設(shè)備的插入了。換句話說,即使你只是通過一個(gè)電阻單純地將主機(jī)端的信號線D-或D+上拉到高電平,操作系統(tǒng)也會提示:已經(jīng)發(fā)現(xiàn)新硬件,但是無法識別該USB設(shè)備。Windows 10操作系統(tǒng)的提示如圖4.4所示。

圖4.4 無法識別的USB設(shè)備

如果此時(shí)進(jìn)入圖4.5所示的“設(shè)備管理器”界面,就會發(fā)現(xiàn)“通用串行總線控制器”項(xiàng)下面增加了一項(xiàng)“未知USB設(shè)備(設(shè)備描述符請求失敗)”,前面的USB圖標(biāo)上面掛了一個(gè)“帶感嘆號的黃色三角形”,這意味著該設(shè)備沒有正確加載驅(qū)動程序。

圖4.5 “設(shè)備管理器”界面

主站蜘蛛池模板: 平凉市| 元氏县| 安陆市| 沁源县| 香格里拉县| 黄梅县| 宜兰县| 榆社县| 蒙阴县| 张掖市| 民丰县| 运城市| 巩留县| 石柱| 循化| 兴安县| 理塘县| 大足县| 长葛市| 东乡县| 宿州市| 松阳县| 时尚| 若尔盖县| 越西县| 济阳县| 塘沽区| 徐汇区| 三江| 五华县| 林西县| 合山市| 乌拉特中旗| 黑河市| 通渭县| 响水县| 长乐市| 行唐县| 滦平县| 定安县| 三亚市|