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

旧帖无参考价值啦~~~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的复合设备,有参考程序吗
156765556@qq.co 回答时间: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
lcdi 回答时间:2018-3-8 15:21:52
wylew 发表于 2018-2-27 17:17
请问下还有源码存档吗?想需求一份,谢谢!

没了没了,现在库都变了,我这些老经验没参考价值了~有机会再研究新的吧~
lcdi 回答时间:2018-3-8 15:23:35
zhxzsh 发表于 2018-2-27 16:55
串口和U盘例程能发我学习吗?谢谢!

没有了,以前项目终止了没完成~现在库都不一样了没意义了,去学习库里自带的例程吧~

所属标签

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