1、通过STM32CubeMX生成自定义HID类2、把每个端点(共用到两个)的缓存设置为64字节,需改HID用户函数参数类型(字节改为指针)
3、通过参考文档《
HID设备报告描述符详解-划出重点》中关于HID设备描述符的介绍,设计HID描述符
4、通过《
[size=13.3333px]HID Descriptor Tool》工具,设置HID描述符并验证,HID报告描述符如下:
/* USER CODE BEGIN 0 */
//报告描述符---------------------------------------
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x00, // USAGE (Undefined) //自定义
0xa1, 0x01, // COLLECTION (Application)
0x15, 0x00, // LOGICAL_MINIMUM (0) //值最小为 0
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) //最大为255
0x19, 0x00, // USAGE_MINIMUM (Undefined)
0x29, 0x39, // USAGE_MAXIMUM (Hat switch)
0x75, USBD_CUSTOMHID_OUTREPORT_BUF_SIZE, // REPORT_SIZE (8) 每包数据大小
0x95, 0x08, // REPORT_COUNT (8) 每个数据的bit 数 8个bit 即一个字节
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x00, // USAGE (Undefined) //自定义
0x91, 0x02, // OUTPUT (Data,Var,Abs)
/* USER CODE END 0 */
0xC0 /* END_COLLECTION */
其中宏USBD_CUSTOMHID_OUTREPORT_BUF_SIZE的值为128,表示发送和接收的数据包长度(这里配置成全为一样长度),宏USBD_CUSTOMHID_OUTREPORT_BUF_SIZE同时也是HID类结构体中数据缓存的长度及接收一个包的长度,由于没有配置Report ID,所以其值默认为0,固上位机发送给设备的数据格式为 00 + 128字节数据 ,共129个字节
5、上位机完全参考 圈圈USB 中的上位机,只是稍微修改了下
6、如果想修改发送和接收数据包长度,只需要需改宏USBD_CUSTOMHID_OUTREPORT_BUF_SIZE的值,建议最大为255,如果大于这个值则需要修改HID报告描述符
7、通过STM32CubeMX生成自定义HID类请参考论坛帖子
http://www.openedv.com/forum.php ... highlight=usb%2Bhid ,在这就不重复了
USB HID上位机
上位机界面如上,在使用时请注意VID、PID、PVN,发送数据时第一个字节必须为00,后面接着为128个字节数据,数据的发送只支持十六进制
8、如果想在此基础上通过通信协议进行设计,建议采用USB描述符类似格式,即 长度 + 数据 。
比如想发送命令码 0X55 ,数据内容为 0X11 0X22 0X33,则发送给USB设备的数据格式为 0X00(固定,必须为0X00) 0X04(长度,表示此帧有效数据长度,包括本字节) 0X11 0X22 0X33 + 124个字节数据
STM32F1_USER_HID_TEST.zip
(3.83 MB, 下载次数: 3573)
2017-5-4 17:41 上传
点击文件名下载附件
USB HID工程
原子F103ZET6 USB HID 工程代码
USB_HID_Com.zip
(3.39 MB, 下载次数: 3378)
2017-5-4 17:42 上传
点击文件名下载附件
USB HID上位机
USB HID 上位机 ,开发环境为VS2013,如果编译保存找不到头文件,请把下面的头文件及.LIB文件拷贝到VS2013的包含路径下
HID设备读写头文件.zip
(61.64 KB, 下载次数: 387)
2017-5-4 17:44 上传
点击文件名下载附件
HID设备读写头文件
HID设备读写头文件
HID Descriptor Tool.zip
(131.81 KB, 下载次数: 419)
2017-5-4 17:43 上传
点击文件名下载附件
HID Descriptor Tool
HID Descriptor Tool 工具及《HID设备报告描述符详解-划出重点》文档
第一个字节为 Report ID,由于在HID报告描述符中没有配置Report ID,所有采用默认值0X00。128字节为数据包长度,Report ID是不会算到数据中的,单片机接收到的数据也是128字节数据,不会包含Report ID。
单片机通过USB发送数据给主机时,会自动在数据前追加Report ID。
一周热门 更多>