本帖最后由 weiwei4dk 于 2019-1-1 22:29 编辑
USB接口是现在众多单片机接口中,使用较多较频繁的一个,也是一个主流接口。相比串口而言,USB接口有着接线方便,速率高等优点。 下面以官方STM32 USB OTG主从库来学习USB接口。STM32F105/107 主流系列、STM32F2/STM32F4高性能系列都有着USB OTG接口,在使用中可以容易切换 USB主机和从机的角色,达到与外设(如键盘,HID设备,或U盘等设备)设备的连接,又或者是与电脑进行通信。
HID设备是USB设备类型中容易上手,应用也简单的一种,其中HID设备又分为多种HID设备类型,如鼠标(mouser),键盘(keyboard),自定义HID设备。HID设备最大的优点就是无需另外安装驱动,因为系统已经具备设备驱动。因此在开发过程中,也无需客户自己另外完成设备驱动开发,只需做好单片机端程序即可。
官方UM1021文档 en.stm32_f105-07_f2_f4_usb-host-device_lib 包含了几乎所有类型的USB设备例程,包括usb audio,自定义HID,DFU,HID,MSC,VCP,复合型USB接口,DRD(主从双用设备)等。这里以HID(标准HID类型)和自定义HID设备类型进行对比学习。
使用Beyond Compare 3对两个例程进行对比,将两个例程的不同点进行分析,来看看自定义HID和标准HID设备之间的程序差别有哪些。
例程主目录的对比如下,可以看到还是有比较多的不同的。
接下来对程序文件进行实际的对比
app.c文件对比,基本上没什么差别,只是程序部分使用有一些不同的名称
其中的LED显示可以忽略不计,只是用指示灯来区别两个不同的程序的而已。
stm32fxxx_it.c 文件里面,则是对HID数据的处理和发送做了完整的处理。
下面可以看出自定义HID设备的功能是进行AD转换,再把AD数据通过usb 发送给计算机。而标准HID则是获取位置移动数据发送到计算机,也就是鼠标的功能。
在Systick里面定时对位置移动信息进行判断,有位置移动则进行USB数据传输。
标准HID程序里位置信息的处理功能程序如下
|