打印
[单片机芯片]

【CH32X035评估板测评】usb输入字符

[复制链接]
4412|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 新曲难觅旧知音 于 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

使用特权

评论回复
沙发
forgot| | 2023-9-14 08:48 | 只看该作者
赞一下,非常好的测评,我的板子也收到了,先来学习一下

使用特权

评论回复
板凳
tpgf| | 2023-10-10 19:26 | 只看该作者
为什么我们常使用的u盘容易损坏呢

使用特权

评论回复
地板
nawu| | 2023-10-10 19:45 | 只看该作者
我们在做硬件的时候是不是需要对usb 的接口进行电气隔离呢

使用特权

评论回复
5
aoyi| | 2023-10-10 20:06 | 只看该作者
nawu 发表于 2023-10-10 19:45
我们在做硬件的时候是不是需要对usb 的接口进行电气隔离呢

最好还是使用一下 这样能延长usb的使用寿命

使用特权

评论回复
6
zljiu| | 2023-10-11 10:47 | 只看该作者
什么样的文件是公共文件呢 我们如何进行区分呢

使用特权

评论回复
7
gwsan| | 2023-10-11 11:08 | 只看该作者
usb有哪些描述符是必须要进行配置的呢

使用特权

评论回复
8
tfqi| | 2023-10-11 11:31 | 只看该作者
如果所有的头文件放在一个地方 所有工程的头文件都是用绝对路径这样是不是节省空间呢

使用特权

评论回复
9
linhuikui| | 2024-3-19 16:16 | 只看该作者
我也用官方例子,发送一个字符会一直发

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

135

帖子

0

粉丝