使用STM32cubeide生成F103C8T6的custom hid例程,描述符如下:
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
/* USER CODE BEGIN 0 */
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1)
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x95, 0x40, // REPORT_COUNT (64)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x95, 0x40, // REPORT_COUNT (64)
0x75, 0x08, // REPORT_SIZE (8)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
/* USER CODE END 0 */
0xC0 /* END_COLLECTION */
};
在while函数中添加以下代码,使用bus hound进行监测,可以接收到数据,同时发送数据也是可以的(OUT只能是在IN发生一次以后才能通信)。
sendData[0] ++;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, sendData,64);
HAL_Delay(4000);
注释掉上面的代码(),添加如下代码,将接收到的数据返回到上位机。此时使用上位机向设备发送数据提示失败!!!
// sendData[0] ++;
// USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, sendData,64);
// HAL_Delay(4000);
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
{
/* USER CODE BEGIN 6 */
USBD_CUSTOM_HID_HandleTypeDef *hhid = hUsbDeviceFS.pClassData;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, hhid->Report_buf,64);
return (USBD_OK);
/* USER CODE END 6 */
}
寻求大神帮助!!!
|