STM32F407 USB 自定义 HID 只有上电能枚举成功

2019-08-14 06:01发布

第一次接触USB ,目的是想能够跟PC双向通讯,然后根据原子哥例程修改成自定义HID设备,只有上电时才能枚举成功,再次拔插识别成unknown device,不知道是什么原因,求大神解惑这是devicedesc描述符

__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
  {
    0x12,                       /*bLength */
    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
    0x00,                       /*bcdUSB */
    0x02,
    0x00,                       /*bDeviceClass*/
    0x00,                       /*bDeviceSubClass*/
    0x00,                       /*bDeviceProtocol*/
    USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/
    LOBYTE(USBD_VID),           /*idVendor*/
    HIBYTE(USBD_VID),           /*idVendor*/
    LOBYTE(USBD_PID),           /*idVendor*/
    HIBYTE(USBD_PID),           /*idVendor*/
    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_CFG_MAX_NUM            /*bNumConfigurations*/
  } ; /* USB_DeviceDescriptor */



下面是配置描述符
__ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END=
{
  /* 18 */
  0x09,         /*bLength: HID Descriptor size*/
  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
  0x11,         /*bcdHID: HID Class Spec release number*/
  0x01,
  0x00,         /*bCountryCode: Hardware target country*/
  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
  0x22,         /*bDescriptorType*/
  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
  0x00,
};
#endif


#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
    #pragma data_alignment=4   
  #endif
#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */  
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{
                0x05,0x8c, /* USAGE_PAGE (ST Page) */
                0x09, 0x01, /* USAGE (Demo Kit) */
                0xa1, 0x01, /* COLLECTION (Application) */
                /* 6 */

                // The Input report


                0x09,0x03, // USAGE ID - Vendor defined
                0x15,0x00, // LOGICAL_MINIMUM (0)
                0x25,0xFF, // LOGICAL_MAXIMUM (255)

                0x75,0x08, // REPORT_SIZE (8)
                0x95,0x01, // REPORT_COUNT (20)   
                0x81,0x02, // INPUT (Data,Var,Abs)
                //18
                // The Output report


                0x09,0x04, // USAGE ID - Vendor defined
                0x15,0x00, // LOGICAL_MINIMUM (0)
                0x25,0xFF, // LOGICAL_MAXIMUM (255)
                0x75,0x08, // REPORT_SIZE (8)
                0x95,0x01, // REPORT_COUNT (20)        
                0x91,0x02, // OUTPUT (Data,Var,Abs)
                //30
                // The Feature report

                /* 31 */
                0xc0 /* END_COLLECTION */

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。