本帖最后由 新曲难觅旧知音 于 2023-9-10 19:24 编辑
一.新建工程
在官方例程里提供了CompositeKM的例程,解压用MounRiver Studio打开后,直接编译会报错
原因是例程的工程文件链接了部分公共文件,会找不到文件路径。
解决方法就是新建一个空工程,然后把例程user里的文件复制进新建工程的user目录下。
这样再编译就不会报错了。
二.usb配置相关描述符
设备描述符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
|
共1人点赞
|