USB的HID类设备开发 (STM32)(以F4为例)

参考链接:

HID 简介 - USB中文网

HID报表描述符(目前最全的解析,也是USB最复杂的描述符)_hid描述符-CSDN博客

一、HID设备简介

HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。

二、独有特性

1.HID描述符

HID描述符 - USB中文网

2.HID报表描述符

HID 报告及报告描述简介 - USB中文网

3.通过HID报表描述符实现复合设备

HID复合设备(键盘、鼠标)的实现 - USB中文网

三、HID鼠标例程(以F4为例)

我们以STM32中的USB设备库的HID例程为例,生成一个有鼠标功能的工程

1.开启USB OTG FS外设

2.将USB的设备库中间件设置为HID设备

3.处理时钟问题

4.查看现象

编译下载后将STM32的USB连接到电脑上之后,正常情况下就可以通过UsbTreeView看到对应端口上挂载了相应的设备,如下图所示,也能够看到设备的描述符。

通过使用Bus Hound也可以看到USB设备加载的过程

5.使用工程

编译下载后将STM32的USB连接到电脑上就可以发现鼠标一直在持续向右移动

通过使用Bus Hound也可以看到USB设备确实将数组内的数据上传到电脑上了

那么为什么这样发送就是鼠标右移呢?

6.报表描述符解析

我们都知道通信协议的目的就是希望通信的双方通过共有的“密码本”来对数据进行编码发送和接收解码。从而让数据有了实际的意义,而报告描述符在HID设备中就扮演着这种角色。

在usbd_hid.c文件中的HID_MOUSE_ReportDesc数组中我们可以看到当前STM32的HID报表描述符

6.1例程中的报表描述符

  0x05, 0x01,        /* Usage Page (Generic Desktop Ctrls)   通用桌面设备  */
  0x09, 0x02,        /* Usage (Mouse)                        设备类型鼠标  */
  0xA1, 0x01,        /* Collection (Application)             集合开始  */
  0x09, 0x01,        /*   Usage (Pointer)                      */
  0xA1, 0x00,        /*   Collection (Physical)                */
  0x05, 0x09,        /*     Usage Page (Button)              设置鼠标的按键  */
  0x19, 0x01,        /*     Usage Minimum (0x01)             键值范围设置  */
  0x29, 0x03,        /*     Usage Maximum (0x03)             分别对应鼠标的左右中键  */
  0x15, 0x00,        /*     Logical Minimum (0)              按键逻辑值设置  */
  0x25, 0x01,        /*     Logical Maximum (1)                */
  0x95, 0x03,        /*     Report Count (3)                 占用三个位置  */
  0x75, 0x01,        /*     Report Size (1)                  每个位置长度为1位  */
  0x81, 0x02,        /*     Input (Data,Var,Abs)             以上数据是输入的变量  绝对数据*/
  0x95, 0x01,        /*     Report Count (1)                 占用一个位置 */
  0x75, 0x05,        /*     Report Size (5)                  每个位置长度为5位  */
  0x81, 0x01,        /*     Input (Const,Array,Abs)          以上数据是不变的常量,用于填充当前字节 */
  0x05, 0x01,        /*    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值