【DigiKey 创意大赛】USB通讯设备枚举方法经验
[复制链接]
上期分享了SPI、IIC设备调试项目的USB设备的定义设置方法,但是这里留了一个尾巴,就是设备被设别出来后,出现了一个错误,说明这个设备没有完全成功。
这个问题的原因是因为USB设备描述符,没有正确加载造成的,打开usbd_custom_hid_if.c文件,发现描述符只有2个字节
/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
/* USER CODE BEGIN 0 */
0x00,
/* USER CODE END 0 */
0xC0 /* END_COLLECTION */
};
/* USER CODE BEGIN PRIVATE_VARIABLES */
/* USER CODE END PRIVATE_VARIABLES */
需要修改描述符的节点的其它内容,描述符的内容是根据设备的需要进行定制的,这里推荐一个软件工具,HID descriptor Tool,这个工具可以排出需要的描述符。
我参考以前的项目,生成了一段描述符
/* USER CODE BEGIN 0 */
0x06, 0x00, 0xff, // Usage Page(Undefined )
0x09, 0x01, // USAGE (Undefined)
0xa1, 0x01, // COLLECTION (Application)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x40, // REPORT_COUNT (64)
0x09, 0x01, // USAGE (Undefined)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x40, // REPORT_COUNT (64)
0x09, 0x01, // USAGE (Undefined)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x09, 0x01, // USAGE (Undefined)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
/* USER CODE END 0 */
0xC0 /* END_COLLECTION */
替换默认的描述符,这里还有个小坑,就是需要修改一下USBD_CUSTOM_HID_REPORT_DESC_SIZE的值33U,为描述符的字节长度,这个也可以在生成设备时进行,
这时的设备枚举工作就基本上完成了,编译代码,执行...
这个设备枚举成功,这时就可以正常的通讯了。
下期分享使用C#编写和下位机的通讯过程
|