金牌会员
 
- 积分
- 1823
- 金钱
- 1823
- 注册时间
- 2014-8-5
- 在线时间
- 211 小时
|
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, 下载次数: 4031)
|
|