一、 設(shè)計的出發(fā)點
由于應(yīng)用需要,想做一個USB鼠標(biāo)鍵盤復(fù)合設(shè)備,用于向USB主機定期輪詢發(fā)送鼠標(biāo)鍵盤指令。
10年的時候使用過STM32的USB示例,但一直苦于復(fù)合設(shè)備的USB描述符知識點太多,而沒有真正上手。近年來,網(wǎng)上出了有很多教程,從中汲取了很多知識,終于不用苦啃USB設(shè)備描述符、報告描述符的知識了,了解一些皮毛就可以開始開發(fā)了。
二、 期望實現(xiàn)的功能及解決方案
1、 USB鼠標(biāo)鍵盤復(fù)合設(shè)備:這當(dāng)然是必不可少的核心功能了,一塊STM32F103就可以搞定。
2、 如何去控制MCU向USB主機發(fā)送指令,這邊考慮了幾種實現(xiàn)手段:
a. 第一是擴展出一個U盤的功能,然后在PC上編輯U盤中的特定配置文件,上電后通過檢測按鍵或開關(guān)來控制設(shè)備在正常模式和設(shè)定模式之間切換。
這種實現(xiàn)的優(yōu)點是:使用起來比較方便,只要一臺電腦、一個文本編輯器就可以開發(fā)出多種多樣的功能。
它的缺點是:設(shè)計周期較長,需要合理分配USB大容量設(shè)備和USBHID之間的資源、需要用到文件系統(tǒng)、需要對配置文件設(shè)計一套完整的數(shù)據(jù)解析過程以應(yīng)對文件損壞帶來的影響。
b. 第二是擴展一路USB轉(zhuǎn)串口,通過數(shù)據(jù)透傳或modbus協(xié)議來下載配置信息,同樣也需要開關(guān)或按鍵來完成工作模式的切換。
這種實現(xiàn)的優(yōu)點是:開發(fā)簡單。
它的缺點是:配置比較麻煩,為了簡化配置過程,需要通過一個上位機軟件來實現(xiàn)協(xié)議的轉(zhuǎn)換。相比第一種方案來講,開發(fā)一個帶串口功能的上位機軟件,相對比較簡單。(當(dāng)然這里也因人而異,本人對Visual Studio的較為熟悉。如果覺得上位機編寫比較麻煩的話,可以考慮第一套方案)
三、 硬件的挑選
這里選用了SL2.1A作為一個HUB接口。選它的理由是我們需要至少兩路USB接口用于USB鼠鍵(這里將USB鼠標(biāo)鍵盤進行簡稱,方便閱讀)和STM32的串口通訊。選好以后,發(fā)現(xiàn)它不但是一個一拖四的HUB,還自帶內(nèi)部晶振,可以節(jié)省布板空間(這一板的PCB上空間有很大空余,所以晶振雖然不用,我也把它預(yù)留上去了),而且可以輸出3.3V以及1.8V的數(shù)字電源,這樣可以方便我們做一些其他擴展(后面番外篇上會講到一些擴展舉例)。
選取了CH330作為USB 轉(zhuǎn)串口芯片。理由是SOP8的封裝器件比較短,節(jié)省了布板空間;引腳數(shù)量比較少,便于布板走線;支持5V和3.3V供電,方便電源排布;其實所有的一切都是因為方便布板而選用了它。
核心芯片STM32F103,選它的理由很簡單,最早接觸的是STM32,個人鐘愛而已。豐富的網(wǎng)絡(luò)資源也使它成為眾多的熱門MCU之一。
四、 PCB及程序
略。(詳見附件。程序部分只會提供一個基礎(chǔ)的功能便于大家學(xué)習(xí),更完善的功能大家可以在此基礎(chǔ)上自由發(fā)揮。謝謝?。?/p>
五、 實物展示
最終的實物就如圖所示,2cmx3.5cm的尺寸差不多是整個大拇指的大小,配上一個外殼的話,那就美美噠。(手工焊接比較粗糙,請各位看官見諒,呵呵)
在附件文檔的番外篇中,我提到了這款小板在設(shè)計時考慮到的一些預(yù)留功能,如HUB擴展、數(shù)字電源等七項擴展功能,這些小彩蛋可能會在您使用中帶來一些意外收獲!