完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文目的:将STM32F103C8T6的CustomHID和MSC USB设备进行复合,EP0用于枚举 ,EP1用于键盘设备,EP2用于鼠标设备(支持绝对模式和相对模式),EP3用于MSC设备(配有官方demo版本和FAT16版本(默认)),以上全部为双端口。
正常情况下,键鼠设备可以共用一个接口,利用报告ID作为前缀,发送不同的report到主机上。但是这种情况下,报告描述符是写在同一个数组内的,当遇到某些主机(如IBM的AIX7系统)枚举阶段是boot启动模式时,并不会启动报告描述符的请求,那么键鼠均不能用,因此键鼠需要分配不同的接口(interface)。 本文虽然以CUSTOMHID和MSC为复合对象,但是也可为其他复合设备,其他型号的单片机提供参考,如F1 F4 F0 等单片机的HID+MSC,CDC+MSC,HID+CDC等,双复合,甚至是三复合均可。 本文某些内容不会写得太详细,仅为一些需要修改的东西,所涉及的内容某些作者也不是很理解。要求读者有一定的USB device的相关知识[1],本文方可有参考意义。
此处不需要IDA描述符,有关该描述符的定义参考该网站[6]。
每个EP(EP0、EP1 EP2 PE3)都要有一个缓存区,需要配置每个EP的IN和OUT端点的缓存地址,该函数在u***d_conf.c函数里面。 注意这里的端点0的初始值是0x18,但是我参考了这个网站[7][8][9]的相关配置,故设置成EP0设置成0x40 而端点1属于键盘的接口,数据量一般不大,这里只设置了16个字节(0xd0-0xc0),其他的端口按规矩设置0x40,也就是64个字节,这里中断说明一下,PMA地址的最大值不能超过0x1C0,否则枚举不成功。
每个设备需要占据不同的内存空间,而默认生成的工程是以你母版工程的默认设备的地址如,如图所示,为USBD_mallc, 故要将相关函数及宏定义修改成以下的样子。
正确的结果是识别出如下的设备,弹出一个U盘,鼠标不断往下移动,并且不断输出一个a(英文输入法下)。 |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9050 浏览 16 评论
4085 浏览 18 评论
1169浏览 3评论
602浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
594浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2331浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 23:08 , Processed in 1.161337 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号