查了一整天的资料,自己把不懂的全部试了一遍

一下是程序以及注释

/* 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, , /*描述生产厂家的字符串描述符的索引*/
, /*描述产品的字符串描述符的索引*/
, /*产品序列号的字符串描述符的索引*/
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 =鼠标*/
, /* 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毫秒)*/
};

STM32 USB设备描述符、配置描述符、端点描述符含义的更多相关文章

  1. usb协议分析-设备描述符配置包-描述符

    /* usb协议分析仅供大家参考---设备描述符配置包,设备描述符, 地址设置, 配置描述符, 字符串描述符 */ /* -1- usb设备描述符配置包 */ typedef struct _USB_ ...

  2. usb驱动开发6之端点描述符

    学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼 ...

  3. USB设备描述符

    /* USB Standard Device Descriptor */ const u8 Virtual_Com_Port_DeviceDescriptor[] = { 0x12, /* bLeng ...

  4. USB设备描述符和请求命令

    USB设备描述符和请求命令 介绍标准的USB设备描述符和请求命令. 标准的USB描述符 当USB设备第一次连接到主机上时,要接收主机的枚举和配置,目的就是让主机知道该设备具有什么功能.是哪一类的USB ...

  5. 8 -- 深入使用Spring -- 1...4 重写占位符配置器

    8.1.5 重写占位符配置器 (PropertyOverrideConfigurer) PropertyOverrideConfigurer是Spring提供的另一个容器后处理器.PropertyOv ...

  6. 8 -- 深入使用Spring -- 1...4 属性占位符配置器

    8.1.4 属性占位符配置器 PropertyPlaceholderConfigurer 是一个容器后处理器,负责读取Properties属性文件里的属性值,并将这些属性值设置成Spring配置文件的 ...

  7. linux内核中的文件描述符(二)--socket和文件描述符

    http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...

  8. STM32 USB Virtual COM

    STM32 USB Virtual COM USB转串口的功能实现   这次讲的是如何实现USB转串口功能的实现.首先看看工程的布局吧: 我们主要要介绍的文件的在USB_User这个组文件.从上面的截 ...

  9. STM32 USB 问题汇总(转)

    源:STM32 USB 问题汇总 汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下 ...

随机推荐

  1. ssh_exchange_identification: Connection closed by remote host

    用服务器内网ip连接同子网服务器的时候显示ssh_exchange_identification: Connection closed by remote host 防火墙什么都关闭了,还是显示这个问 ...

  2. QT的定时器使用

    http://blog.csdn.net/steven6977/article/details/9310997

  3. 设计模式:访问者(Visitor)模式

    设计模式:访问者(Visitor)模式 一.前言    什么叫做访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+ ...

  4. SAP Fiori + Vue = ?

    2017年3月28日,我到国内一个SAP CRM客户那里,同他们的架构师关于二次开发的UI框架选择SAP UI5还是Vue进行了一番探讨.回到SAP研究院之后,我把这个问题扔到了公司的微信群里,引起了 ...

  5. 异常:Neither BindingResult nor plain target object for bean name 'command' available as request attribute

    Neither BindingResult nor plain target object for bean name 'command' available as request attribute ...

  6. UVa 10817 - Headmaster's Headache(状压DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. BZOJ2662:[BJWC2012]冻结(分层图最短路)

    Description “我要成为魔法少女!”     “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切,封印于卡片之中„„”        在这个愿望被实现以后的世界里,人们享 ...

  8. log4net快速使用流程

    以下内容大部分来自这里,对原作者流子表示感谢 1.Nuget安装,当前版本2.0.8 2.创建log4net.config文件,文件内容如下: <?xml version="1.0&q ...

  9. table中实现数据上移下移效果

    html 由于vue+Element项目中的table,没有开放的上移下移的api,但是能对数据操作,故思路为数组中的一条数据,再重新添加一条数据,办法有点笨,但是好歹也是实现了,望有好的办法的,请留 ...

  10. 记录 iOS 各种跳转到系统应用

    MARK ----拨打电话 NSString* phoneVersion = [[UIDevice currentDevice] systemVersion]; if (phoneVersion.fl ...