查了一整天的資料,自己把不懂的全部試了一遍
一下是程序以及注釋
/* USB設備描述符*/ const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] = { 0x12, /*bLength 描述符的長度*/ USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType 描述符的類型(設備描述符為0x01)*/ 0x00, /*bcdUSB USB協議的版本*/ 0x02, 0x00, /*bDeviceClass 類代碼*/ 0x00, /*bDeviceSubClass 子類代碼*/ 0x00, /*bDeviceProtocol 設備所使用的協議*/ 0x40, /*bMaxPacketSize 端點0的最大包長*/ /*idVendor 廠商ID*/ LOBYTE(USB_VID), HIBYTE(USB_VID), /*idProduct 設備ID*/ LOBYTE(USB_PID), HIBYTE(USB_PID), 0x00, /*bcdDevice rel 設備版本號*/ 0x02, 1, /*描述生產廠家的字符串描述符的索引*/ 2, /*描述產品的字符串描述符的索引*/ 3, /*產品序列號的字符串描述符的索引*/ 0x01 /*bNumConfigurations 可能的配置數*/ } ; /* CustomHID_DeviceDescriptor */ /* USB配置描述符 */ /* All Descriptor s (Configuration, Interface, Endpoint, Class, Vendor */ const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] = { //以下為配置描述符 0x09, /* bLength: 端點描述符長度*/ USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符類型 (配置描述符為0x02) */ LOBYTE(CUSTOMHID_SIZ_CONFIG_DESC),/* wTotalLength: 配置描述符集合總長度 */ HIBYTE(CUSTOMHID_SIZ_CONFIG_DESC), 0x01, /* bNumInterfaces: 該配置所支持的接口數*/ 0x01, /* bConfigurationValue: 該配置的值*/ 0x00, /* iConfiguration: 描述配置的字符串描述符的索引*/ 0xA0, /* bmAttributes:該設備的屬性(總線供電,支持遠程喚醒) bit 4 ... 0: 保留(必須為0) bit 5: 1表示支持遠程喚醒 bit 6: 1表示設備是自供電 0表示是總線供電 bit 7: 保留(必須為1) */ 0xC8, /* MaxPower 設備所需要的電流(單位為2mA)400 mA*/ //以下為接口描述符 0x09, /* bLength: 接口描述符長度*/ USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: 描述符類型 (接口描述符為0x04)*/ 0x00, /* bInterfaceNumber: 該接口編號(從0開始) */ 0x00, /* bAlternateSetting: 該接口的備用編號 */ 0x02, /* bNumEndpoints 該接口所使用的端點數*/ 0x03, /* bInterfaceClass: 該接口所使用的類*/ 0x00, /* bInterfaceSubClass : 該接口所使用的子類 */ 0x00, /* nInterfaceProtocol : 該接口所使用的協議 0 =無,1 =鍵盤,2 =鼠標*/ 0, /* iInterface: 描述該接口的字符串描述符的索引 */ //以下為HID描述符 0x09, /* bLength: HID描述符長度 */ HID_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符類型 (接口描述符為0x21) */ 0x10, /* bcdHID: HID 協議版本號 */ 0x01, 0x00, /* bCountryCode: 國家代碼 (美式鍵盤代碼為0x21)*/ 0x01, /* bNumDescriptors:下級描述符的數量*/ 0x22, /* bDescriptorType 下級描述符的類型*/ LOBYTE(CUSTOMHID_SIZ_REPORT_DESC),/* wItemLength: 下級描述符的長度*/ HIBYTE(CUSTOMHID_SIZ_REPORT_DESC), //以下為端點描述符 /******************** Descriptor of Custom HID endpoints ******************/ 0x07, /* bLength:端點描述符長度 */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* 描述符類型 (端點描述符為0x05)*/ 0x81, /* bEndpointAddress:端點地址 bit 3 ... 0:端點號 bit 6 ... 4:保留(設置為0) bit 7:0(OUT),1(IN)*/ 0x03, /* bmAttributes: 端點屬性 bit 1 ... 0:表示該端點的傳輸類型 0 控制傳輸 1 等時傳輸 2 批量傳輸 3 中斷傳輸 bit 7 ... 2:如果該端點是非等時傳輸 則bit 7 ~ 2 保留(設置為0) 如果該端點是等時傳輸 bit 3 ... 2: 表示同步類型 0 無同步 1 異步 2 適配 3 同步 bit 5 ... 4: 表示用途 0 數據端點 1 反饋端點 2 暗含反饋的數據端點 3 保留 bit 7 ... 6: 保留*/ 0x40, /* wMaxPacketSize: 該端點支持的最大包長度 */ 0x00, 0x0A, /* bInterval:端口的查詢時間*/ //以下為輸出端點1描述符 0x07, /*bLength:端點描述符大小 */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* 端點描述符類型*/ 0x01, /* bEndpointAddress:端點地址 bit 3 ... 0:端點號 bit 6 ... 4:保留 bit 7:0(OUT),1(IN)*/ 0x03, /* bmAttributes: 中斷端點 */ 0x40, /* wMaxPacketSize: 最多64個字節 */ 0x00, 0x0A, /* bInterval: 輪詢間隔(20毫秒)*/ };