STM32 USB设备描述符、配置描述符、端点描述符含义

STM32 USB设备描述符、配置描述符、端点描述符含义
查了一整天的资料,自己把不懂的全部试了一遍

一下是程序以及注释

复制代码
/* 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毫秒)*/

};
复制代码

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值