一、 设计的出发点
由于应用需要,想做一个USB鼠标键盘复合设备,用于向USB主机定期轮询发送鼠标键盘指令。
10年的时候使用过STM32的USB示例,但一直苦于复合设备的USB描述符知识点太多,而没有真正上手。近年来,网上出了有很多教程,从中汲取了很多知识,终于不用苦啃USB设备描述符、报告描述符的知识了,了解一些皮毛就可以开始开发了。
二、 期望实现的功能及解决方案
1、 USB鼠标键盘复合设备:这当然是必不可少的核心功能了,一块STM32F103就可以搞定。
2、 如何去控制MCU向USB主机发送指令,这边考虑了几种实现手段:
a. 第一是扩展出一个U盘的功能,然后在PC上编辑U盘中的特定配置文件,上电后通过检测按键或开关来控制设备在正常模式和设定模式之间切换。
这种实现的优点是:使用起来比较方便,只要一台电脑、一个文本编辑器就可以开发出多种多样的功能。
它的缺点是:设计周期较长,需要合理分配USB大容量设备和USBHID之间的资源、需要用到文件系统、需要对配置文件设计一套完整的数据解析过程以应对文件损坏带来的影响。
b. 第二是扩展一路USB转串口,通过数据透传或modbus协议来下载配置信息,同样也需要开关或按键来完成工作模式的切换。
这种实现的优点是:开发简单。
它的缺点是:配置比较麻烦,为了简化配置过程,需要通过一个上位机软件来实现协议的转换。相比第一种方案来讲,开发一个带串口功能的上位机软件,相对比较简单。(当然这里也因人而异,本人对Visual Studio的较为熟悉。如果觉得上位机编写比较麻烦的话,可以考虑第一套方案)
三、 硬件的挑选
这里选用了SL2.1A作为一个HUB接口。选它的理由是我们需要至少两路USB接口用于USB鼠键(这里将USB鼠标键盘进行简称,方便阅读)和STM32的串口通讯。选好以后,发现它不但是一个一拖四的HUB,还自带内部晶振,可以节省布板空间(这一板的PCB上空间有很大空余,所以晶振虽然不用,我也把它预留上去了),而且可以输出3.3V以及1.8V的数字电源,这样可以方便我们做一些其他扩展(后面番外篇上会讲到一些扩展举例)。
选取了CH330作为USB 转串口芯片。理由是SOP8的封装器件比较短,节省了布板空间;引脚数量比较少,便于布板走线;支持5V和3.3V供电,方便电源排布;其实所有的一切都是因为方便布板而选用了它。
核心芯片STM32F103,选它的理由很简单,最早接触的是STM32,个人钟爱而已。丰富的网络资源也使它成为众多的热门MCU之一。
四、 PCB及程序
略。(详见附件。程序部分只会提供一个基础的功能便于大家学习,更完善的功能大家可以在此基础上自由发挥。谢谢!)
五、 实物展示
最终的实物就如图所示,2cmx3.5cm的尺寸差不多是整个大拇指的大小,配上一个外壳的话,那就美美哒。(手工焊接比较粗糙,请各位看官见谅,呵呵)
在附件文档的番外篇中,我提到了这款小板在设计时考虑到的一些预留功能,如HUB扩展、数字电源等七项扩展功能,这些小彩蛋可能会在您使用中带来一些意外收获!