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