在...\M451BSP\SampleCode\StdDriver\USBD_HID_Transfer\范例中 
文件 descriptors.c 的 
70~79行如下,中文注释是我加的下同 
    /* I/F descr: HID 接口描述符 */ 
    LEN_INTERFACE,  /* bLength 接口描述符的字节数大小 */ 
    DESC_INTERFACE, /* bDescriptorType 接口描述符的类型编号 */ 
    0x00,           /* bInterfaceNumber 该接口的编号 */ 
    0x00,           /* bAlternateSetting 备用的接口描述符编号 */ 
    0x02,           /* bNumEndpoints 该接口使用的端点数,不包括端点0 */ 
    0x03,           /* bInterfaceClass 接口类型 */ 
    0x00,           /* bInterfaceSubClass 接口子类型 */ 
    0x00,           /* bInterfaceProtocol 接口遵循的协议 */ 
    0x00,           /* iInterface 描述该接口的字符串索引值 */ 
注意这个接口只使用了2个端点 
92~110行如下: 
    /* EP Descriptor: interrupt in.端点描述符:中断输入 */ 
    LEN_ENDPOINT,   /* bLength 端点描述符字节数大小 7 */ 
    DESC_ENDPOINT,  /* bDescriptorType 端点描述符类型编号 0x05 */ 
    (INT_IN_EP_NUM | EP_INPUT), /* bEndpointAddress 端点地址及输入输出属性 0x01|0x80=0x81 */ 
    EP_INT,         /* bmAttributes 端点的传输类型属性 0x03 */ 
    /* wMaxPacketSize 端点收、发的最大包大小 64 */ 
    EP2_MAX_PKT_SIZE & 0x00FF, 
    (EP2_MAX_PKT_SIZE & 0xFF00) >> 8, 
    HID_DEFAULT_INT_IN_INTERVAL,        /* bInterval 主机查询端点的时间间隔 1ms */ 
 
    /* EP Descriptor: interrupt out. 端点描述符:中断输出 */ 
    LEN_ENDPOINT,   /* bLength 端点描述符字节数大小 */ 
    DESC_ENDPOINT,  /* bDescriptorType 端点描述符类型编号 */ 
    (INT_OUT_EP_NUM | EP_OUTPUT),   /* bEndpointAddress 端点地址及输入输出属性 0x02|0x00=0x02 */ 
    EP_INT,         /* bmAttributes 端点的传输类型属性 */ 
    /* wMaxPacketSize 端点收、发的最大包大小*/ 
    EP3_MAX_PKT_SIZE & 0x00FF, 
    (EP3_MAX_PKT_SIZE & 0xFF00) >> 8, 
    HID_DEFAULT_INT_IN_INTERVAL     /* bInterval 主机查询端点的时间间隔 */ 
注意:2个端点描述符定义了端点1是中断输入,端点2为中断输出 
而在文件hid_transfer.c的端点事件处理中,详见88~144行 这里只抄3段 
        if(u32IntSts & USBD_INTSTS_EP1) 
        { 
            /* Clear event flag */ 
            USBD_CLR_INT_FLAG(USBD_INTSTS_EP1); 
 
            // control OUT  
            USBD_CtrlOut(); 
        } 
 
        if(u32IntSts & USBD_INTSTS_EP2) 
        { 
            /* Clear event flag */ 
            USBD_CLR_INT_FLAG(USBD_INTSTS_EP2); 
            // Interrupt IN 
            EP2_Handler(); 
        } 
 
        if(u32IntSts & USBD_INTSTS_EP3) 
        { 
            /* Clear event flag */ 
            USBD_CLR_INT_FLAG(USBD_INTSTS_EP3); 
            // Interrupt OUT 
            EP3_Handler(); 
        } 
显然是认为端点1是控制输出,端点2为中断输入,端点3为中断输出。 
    这和描述符定义的有明显的矛盾。所以在此就教于明白人。    
 |