你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

旧帖无参考价值啦~~~usb复合设备串口+U盘!

[复制链接]
lcdi 发布时间:2015-2-4 22:12
本帖最后由 lcdi 于 2018-3-8 15:28 编辑

——————————————————————————————————————————————————————————————————————————————
在4.0库里的composite例子,把里面的HID部分去掉,换成virtual comport部分。
把一些关键点写下来给大家参考:

1:主要修改usb_desc.c里的Composite_ConfigDescriptor,
bNumInterfaces要改成总共的interface数目,我这里串口用了2个,u盘用了1个。然后是具体的描述,因为串口有2个interface,所以需要IAD描述,如果只有一个,就可以像例程那样直接描述。
    // IAD
    0x08,        //描述符大小
    0x0B,        //IAD描述符类型
    0x00,        // bFirstInterface
    0x02,        // bInterfaceCount
    0x02,        // bFunctionClass: CDC Class
    0x02,        // bFunctionSubClass
    0x01,        // bFunctionProtocol
    0x00,        // iFunction         
下面接串口本来的描述符,IAD里很简单
原串口用了IN2,是中断传输,一直没找到和搞清楚具体的服务函数在哪儿?
因为u盘也用IN2和OUT2,所以把这里改成IN4。
描述完串口接着描述u盘
                  // IAD
    0x08,        //描述符大小
    0x0B,        //IAD描述符类型
    0x02,        // bFirstInterface
    0x01,        // bInterfaceCount
    0x08,        // bFunctionClass: MASS STORAGE Class
    0x06,        // bFunctionSubClass
    0x50,        // bFunctionProtocol
    0x01,        // iFunction         
下来照搬u盘描述即可。
Composite_ConfigDescriptor 修改完了,别忘了修改一下usb_desc.h里的Composite_SIZ_CONFIG_DESC,因为增加了描述内容嘛。
这时候就能枚举出符合设备了。
2:整合,增加了端点,需要修改usb_prop.c里端点初始化部分。usb_endp.c里callback函数要修改。按照callback函数的增减修改usb_conf.h。
这里有很重要的定义,改不好的话设备还是用不了。
EP_NUM 是使用的端点数,我使用到ep4,那这里就是5。
下来是BTABLE_ADDRESS
各端点的缓冲区地址设置。BTABLE_ADDRESS是0,第一个缓冲区地址我这里要设为0x28。因为BTABLE_ADDRESS到第一个缓冲区之间是各缓冲区的偏移地址存放处,我用了5个端点,每个端点8个字节,所以我要把第一个缓冲区放在0x28才行。
这个问题搞了好久才明白

至此,修改完成,两种设备共存都正常工作了!

只是驱动不容易装,如果我安装ST的串口驱动(修改过PID),那么就只有这个设备,u盘没有,如果直接自动装驱动,有u盘没串口。这时候手动更新有惊叹号的设备,指定串口的驱动,装好后测试也就正常了。
——————————————————————————————————————————————————————————————————————————
U盘部分不需要驱动,串口部分不能自动安装驱动(即使系统安装过也不行),变惊叹号设备。如果再安装一次倒是可以用了,但是U盘却没了。对这个惊叹号设备手动选择驱动类型,强制使用以前安装的驱动则可以正常使用。这样搞总是不正常的样子。
其实,要修改驱动包里的INF, %DESCRIPTION%=DriverInstall,USB\VID_0483&PID_5750改成
%DESCRIPTION%=DriverInstall,USB\VID_0483&PID_5750&MI_00就可以一切正常了。
因为我这里设置串口为interface 0 开始的,惊叹号设备里也能看到 VID_0483&PID_5750&MI_00这样的信息,所以这样设置驱动就知道是要匹配0号interface的。
至此,全部正常!


____________________________________________________________________________________________________
测试了一段时间,串口通信不太稳定,表现为通讯一些数据后usb会重置,设备消失一下又出现。暂时还没找到原因。

评分

参与人数 1 ST金币 +6 收起 理由
wofei1314 + 6

查看全部评分

收藏 1 评论11 发布时间:2015-2-4 22:12

举报

11个回答
wgsxsm 回答时间:2015-2-5 02:12:21
7c21b7ea6b00273aa083d477bf4b1283.jpg
拼命三郎V5 回答时间:2015-2-5 08:07:41
ssss.jpg
hhhhhhhhhhh.jpg
ss.jpg
lcdi 回答时间:2015-2-5 21:49:40
st给出的库和例子并不容易修改移植,库的结构和相关注释还是不够详细。
天涯小草 回答时间:2017-1-19 14:14:28
楼主,你好,我想用stm32 cube库做MSC+HID的复合设备,有参考程序吗
温柔的孤狼 回答时间:2017-8-15 16:10:24

楼主,你好,我想用stm32F1做MSC+u盘的复合设备,有参考程序吗?
156765556@qq.com
谢谢啦!
wofei1314 回答时间:2017-8-16 11:54:27
有学习价值,谢谢分享~
zhxzsh 回答时间:2018-2-27 16:55:48
串口和U盘例程能发我学习吗?谢谢!zhxzsh@msn.com
misakorea 回答时间:2018-2-27 17:00:15
新手学习下
wylew 回答时间:2018-2-27 17:17:53
请问下还有源码存档吗?想需求一份,谢谢!308676264@qq.com
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版