- __ALIGN_BEGIN uint8_t USBD_HID_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
- {
- 0x12, /*bLength */
- USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
- 0x00, /*bcdUSB */
- 0x02,
- 0x00, /*bDeviceClass*/
- 0x00, /*bDeviceSubClass*/
- 0x00, /*bDeviceProtocol*/
- USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
- LOBYTE(USBD_VID), /*idVendor*/
- HIBYTE(USBD_VID), /*idVendor*/
- LOBYTE(USBD_PID), /*idProduct*/
- HIBYTE(USBD_PID), /*idProduct*/
- 0x00, /*bcdDevice rel. 2.00*/
- 0x02,
- USBD_IDX_MFC_STR, /*Index of manufacturer string*/
- USBD_IDX_PRODUCT_STR, /*Index of product string*/
- USBD_IDX_SERIAL_STR, /*Index of serial number string*/
- USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
- };
- USBD_DescriptorsTypeDef HID_Desc =
- {
- USBD_HID_DeviceDescriptor,
- USBD_HID_LangIDStrDescriptor,
- USBD_HID_ManufacturerStrDescriptor,
- USBD_HID_ProductStrDescriptor,
- USBD_HID_SerialStrDescriptor,
- USBD_HID_ConfigStrDescriptor,
- USBD_HID_InterfaceStrDescriptor
- };
上述的定义最终会在USB Device初始化函数(USBD_Init(&hUsbDeviceHS, &HID_Desc, DEVICE_HS)中被使用。然后调用(USBD_RegisterClass(&hUsbDeviceHS, &USBD_HID)来注册USB设备,最后调用(USBD_Start(&hUsbDeviceHS) 来启动USB设备。
对于具体的鼠标应用而言,还需要定义鼠标相关的报告描述。
- __ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
- {
- 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) */
- 0x81, 0x02, /* Input (Data,Var,Abs) */
- 0x95, 0x01, /* Report Count (1) */
- 0x75, 0x05, /* Report Size (5) */
- 0x81, 0x01, /* Input (Const,Array,Abs) */
- 0x05, 0x01, /* Usage Page (Generic Desktop Ctrls) */
- 0x09, 0x30, /* Usage (X) */
- 0x09, 0x31, /* Usage (Y) */
- 0x09, 0x38, /* Usage (Wheel) */
- 0x15, 0x81, /* Logical Minimum (-127) */
- 0x25, 0x7F, /* Logical Maximum (127) */
- 0x75, 0x08, /* Report Size (8) */
- 0x95, 0x03, /* Report Count (3) */
- 0x81, 0x06, /* Input (Data,Var,Rel) */
- 0xC0, /* End Collection */
- 0x09, 0x3C, /* Usage (Motion Wakeup) */
- 0x05, 0xFF, /* Usage Page (Reserved 0xFF) */
- 0x09, 0x01, /* Usage (0x01) */
- 0x15, 0x00, /* Logical Minimum (0) */
- 0x25, 0x01, /* Logical Maximum (1) */
- 0x75, 0x01, /* Report Size (1) */
- 0x95, 0x02, /* Report Count (2) */
- 0xB1, 0x22, /* Feature (Data,Var,Abs,NoWrp) */
- 0x75, 0x06, /* Report Size (6) */
- 0x95, 0x01, /* Report Count (1) */
- 0xB1, 0x01, /* Feature (Const,Array,Abs,NoWrp) */
- 0xC0 /* End Collection */
- };
上述鼠标相关描述符的定义出现在文件usbd_hid.c中,其属于STM32_USB_Device_Library,是ST免费提供的中间件的一部分。
最后一步是烧录,把USB1接口通过TYPE-C接口连接到电脑,可以看到ST BBS.21IC这个HID设备显示出来。