[STM32F4] 学习笔记+STM32 USB OTG主从库学习

[复制链接]
4613|2
手机看帖
扫描二维码
随时随地手机跟帖
weiwei4dk|  楼主 | 2018-12-31 23:52 | 显示全部楼层 |阅读模式
本帖最后由 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设备之间的程序差别有哪些。
   例程主目录的对比如下,可以看到还是有比较多的不同的。
      例程主目录对比1.png
    接下来对程序文件进行实际的对比
    app.c文件对比,基本上没什么差别,只是程序部分使用有一些不同的名称
    app c 文件对比.png
    其中的LED显示可以忽略不计,只是用指示灯来区别两个不同的程序的而已。
    stm32fxxx_it.c 文件里面,则是对HID数据的处理和发送做了完整的处理。
    下面可以看出自定义HID设备的功能是进行AD转换,再把AD数据通过usb 发送给计算机。而标准HID则是获取位置移动数据发送到计算机,也就是鼠标的功能。
    it c程序对比1.png
    在Systick里面定时对位置移动信息进行判断,有位置移动则进行USB数据传输。
    it c程序对比2.png
    标准HID程序里位置信息的处理功能程序如下
    it c 位置移动数据的获取功能程序.png


weiwei4dk|  楼主 | 2018-12-31 23:52 | 显示全部楼层
本帖最后由 weiwei4dk 于 2019-1-2 00:10 编辑

usbd_desc.c文件对比,主要是PID有区别,其它并无太大区别 dec c对比.png
usbd_usr.c 的主要区别则是自定义HID对ADC的处理和标准HID对joystick的按键处理的不同
usr c对比1.png
上面是对按键的处理
usr c对比2.png
上面是对ADC的处理

usbd_conf.h 文件里的不同主要是两个HID设备使用了不同的ENDPOINT
自定义HID使用了0x81 和 0x01端点,而标准HID只使用了0x81端点,另一个区别就是发送的数据长度不同,一个是2个字节,另一个是4个字节
conf h文件对比.png

使用特权

评论回复
weiwei4dk|  楼主 | 2018-12-31 23:52 | 显示全部楼层
本帖最后由 weiwei4dk 于 2019-1-2 00:54 编辑

    接下来对关键的描述符等进行对比,看看两者都有哪些差异 HID CORE H对比1.png
    可以看到,报告描述符长度差别很大,一个是163,一个是34

    usbd_customhid_core.c 里面则有很多的差异
hid  core c对比1.png
EP0、HID输入输出端点数据的处理都有所区别
hid  core c对比2.png
HID使用端点数量的定义,决定了可使用的端口数量
HID设备类型的定义,直接决定了将被主机认为是何种设备并加载相应的合适的驱动而被主机使用。

下面是两种HID设备不同的端点描述符区别
hid  core c对比3.png

两种HID的报告描述符区别
hid  core c对比4.png

HID初始化的区别
hid  core c对比5.png

HID设置的区别
hid  core c对比6.png

USB主机下发数据/命令的处理的不同如下
hid  core c对比7.png

大部分的程序差异对比如上面撰述,看程序学习是一件很枯燥的事,但是如果能从两个不同的程序中看出差异化的东西并理解为什么这里会有差异,那么将更快的学习并将其运用到实际的项目中去。

总结,USB HID设备 接线使用简单,速率较传统串口更高,且不同于其它USB设备类型的计算机自带驱动的特点,正逐渐的越来越广泛的使用,对于USB的学习也能帮助开发更易用的产品。

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则