完善资料让更多小伙伴认识你,还能领取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(英文输入法下)。 |
|
|
|
只有小组成员才能发言,加入小组>>
2722 浏览 9 评论
2434 浏览 16 评论
3018 浏览 1 评论
7896 浏览 16 评论
3526 浏览 18 评论
2606浏览 6评论
6610浏览 6评论
1437浏览 4评论
439浏览 4评论
1054浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 粤ICP备14022951号 )
GMT+8, 2023-8-18 19:54 , Processed in 0.810889 second(s), Total 64, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:粤 B2-20160233 工商网监 湘ICP备2023018690号