- const UINT8 MyDevDescr[] =
- {
- 0x12, //设备描述符长度,18字节
- 0x01, //描述符类型,0x01为设备描述符
- 0x10, 0x01, //本设备所使用USB版本协议,因为是小端结构,所以低字节在前,即USB1.1版本为0x10,0x01,USB2.0为0x00,0x02
- 0x00, //类代码,此处不在设备描述符中定义设备类,而在接口描述符中定义设备类。对于大多数标准的USB设备类,该字段通常设置为0,而在接口描述符中的bInterfaceClass中指定接口所实现的功能
- 0x00, //子类代码,当类代码bDeviceClass为0时,下面的子类代码bDeviceSubClass也必须为0。
- 0x00, //设备所使用的协议,协议代码由USB协会规定。当该字段为0时,表示设备不使用类所定义的协议。
- DevEP0SIZE, //端点0的最大包长,可以取值8、16、32、64,此处为64字节
- 0x86, 0x1A, //厂商ID
- 0xe1, 0xe6, //产品设备ID
- 0x00, 0x01, //设备版本号
- 0x01, //描述厂商的字符串索引值。当该值为0时,表示没有厂商字符串
- 0x02, //描述产品的字符串索引值。当该值为0时,表示没有产品字符串
- 0x03, //描述设备的序列号字符串索引值。当该值为0时,表示没有序列号字符串
- 0x01, //可能的配置数,通常为1
- };
配置描述符
- const UINT8 MyCfgDescr[] =
- {
- //配置描述符
- 0x09, //配置描述符长度,标准USB配置描述符长度为9字节
- 0x02, //描述符类型,配置描述符为0x02
- 0x3b, 0x00, //配置描述符集合总长度,59字节
- 0x02, //该配置所支持的接口数,2个接口
- 0x01, //表示该配置的值
- 0x00, //描述该配置的字符串的索引值,0x00表示没有字符串
- 0xA0, //描述设备的一些属性,如供电方式和唤醒等,0xA0表示设备总线供电且支持远程唤醒
- 0x32, //设备需要从总线获取的最大电流量,0x32表示最大电流100ma
- //键盘
- //接口描述符,接口描述符不能单独返回,必须附着在配置描述符后一并返回
- 0x09, //接口描述符长度,标准的USB接口描述符长度为9字节
- 0x04, //描述符类型,接口描述符为0x04
- 0x00, //该接口的编号,从0开始,此处为0x00
- 0x00, //该接口的备用编号,通常设置为0
- 0x01, //该接口所使用的端点数,0x01表示使用1个端点。如果该字段为0,则表示没有非0端点,只使用默认的控制端点
- 0x03, //该接口所使用的类,0x03为HID类
- 0x01, //该接口所使用的子类
- 0x01, //该接口所使用的协议
- 0x00, //该接口的字符串的索引值,0x00表示没有字符串
- //HID类描述符,它是一个类描述符,应该跟在接口描述符后面
- 0x09, //该描述符长度,它的大小与该描述符中下级描述符的个数有关。例如只有一个下级描述符时,总长度为9
- 0x21, //描述符类型,HID描述符为0x21
- 0x10,0x01, //HID协议的版本号,这里参看的HID协议是USB HID1.1协议,因此这里为0x0110
- 0x00, //国家代码,是设备所适用的国家。通常我们的键盘是美式键盘,代码为33,即0x21,但此处设置为0x00
- 0x01, //下级描述符的数量,该值至少为1,即至少要有一个报告描述符。下级描述符可以是报告描述符或物理描述符
- 0x22, //下级描述符的类型,报告描述符的编号为0x22,物理描述符编号为0x23
- sizeof(KeyRepDesc)&0xFF, 0x00, //下级描述符的长度
- //端点描述符,端点描述符不能单独返回,必须附着在配置描述符后一并返回
- 0x07, //端点描述符长度,标准的USB端点描述符长度为7字节
- 0x05, //描述符类型,端点描述符为0x05
- 0x81, //该端点的地址,0x81表示端点1作为输入,最高位D7为该端点的传输方向,1为输入,0为输出。D3-D0为端点号,可设置为0-7,D6-4保留,设为0.
- //关于端点属性,最低两位D1-0表示该端点的传输类型,0为控制传输,1为等时传输,2为批量传输,3为中断传输。
- 0x03, //该端点的属性,此处为中断传输方式
- DevEP0SIZE, 0x00, //该端点支持的最大包长度,此处设置为64字节
- 0x0a, //端点的查询时间。对于中断端点,表示查询的帧间隔数
- //鼠标
- //接口描述符
- 0x09, //接口描述符长度,9字节
- 0x04, //描述符类型,接口描述符为0x04
- 0x01, //该接口的编号,从0开始,此处为0x01
- 0x00, //该接口的备用编号
- 0x01, //该接口所使用的端点数,0x01表示使用1个端点
- 0x03, //该接口所使用的类,0x03为HID类
- 0x01, //该接口所使用的子类
- 0x02, //该接口所使用的协议
- 0x00, //该接口的字符串的索引值,0x00表示没有字符串
- //HID类描述符
- 0x09, //该描述符长度,它的大小与该描述符中下级描述符的个数有关。例如只有一个下级描述符时,总长度为9
- 0x21, //描述符类型,HID描述符为0x21
- 0x10,0x01, //HID协议的版本号,这里参看的HID协议是USB HID1.1协议,因此这里为0x0110
- 0x00, //国家代码,是设备所适用的国家。通常我们的键盘是美式键盘,代码为33,即0x21,但此处设置为0x00
- 0x01, //下级描述符的数量,该值至少为1,即至少要有一个报告描述符。下级描述符可以是报告描述符或物理描述符
- 0x22, //下级描述符的类型,报告描述符的编号为0x22,物理描述符编号为0x23
- sizeof(MouseRepDesc)&0xFF,0x00, //下级描述符的长度
- //端点描述符
- 0x07, //端点描述符长度,7字节
- 0x05, //描述符类型,端点描述符为0x05
- 0x82, //该端点的地址,0x82表示端点2作为输入
- 0x03, //该端点的属性
- DevEP0SIZE, 0x00, //该端点支持的最大包长度,64字节
- 0x0a, //端点的查询时间
- };
这些鼠标和键盘的配置描述符可以直接用HID Descriptor Tool生成
三.程序现象
下载完成后,将串口三的TX端,也就是PA3接到chlink的RX端,C to C线连接开发板跟电脑
打开串口助手
波特率设置与程序相同
用杜邦线短接一下PB13引脚
可以看到串口日志打印出了a被按下,同时文本框也输出a