搜索
楼主: creep

[原创] STM32 USB CDC 虚拟多串口

  [复制链接]

该用户从未签到

1

主题

8

帖子

0

蝴蝶豆

中级会员

最后登录
2018-3-13
发表于 2018-1-11 11:48:21 | 显示全部楼层
楼主你好,您这篇帖子我研究好几天了,也看了很多其它的资料。现在遇到的问题是2VCP能枚举出,但是无法连续发送,而且在不同系统的电脑上表现的状态不一致。我目前使用的win10系统,驱动自动安装,设备管理器显示USB Serial Port(COM X),但是打开串口助手无法连续输出,切换两串口会是不是出现VCP0/VCP1发送语句,但也仅限于一句。个人猜测和驱动有关,不知道楼主有没有类似情况?或者说明一下附件中程序用F769-DISCO开发板,在什么系统上使用能正常的呢?另外INF文件在我电脑上装不上,
回复 支持 反对

使用道具 举报

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
 楼主| 发表于 2018-1-11 12:03:31 | 显示全部楼层
MaggiGunner 发表于 2018-1-11 11:48
楼主你好,您这篇帖子我研究好几天了,也看了很多其它的资料。现在遇到的问题是2VCP能枚举出,但是无法连续 ...

帖子里面的测试gif 和截图是在win7 上进行的,这个时候需要加载一个inf 驱动。
在win10上是可以自己加载驱动,如果你能正常枚举2个串口那就问题不大了,通信部分你可以再确认下代码。
至少可以先调通一个VCP收发没有任何问题再移植多VCP。
回复 支持 反对

使用道具 举报

该用户从未签到

43

主题

296

帖子

38

蝴蝶豆

金牌会员

最后登录
2022-3-31
发表于 2018-1-11 13:43:51 | 显示全部楼层
本帖最后由 kylongmu 于 2018-1-11 13:48 编辑

楼主你好,有没有linux下CDC驱动,比如接入树莓派这样的板子就很方便了,接口控制与逻辑由MCU来完成,高级功能“界面、网络”由树莓派完成。
一直有这个想法,ST官方也不提供驱动源码,要是有USB2的HS驱动源码,有的话MCU拿来传大数据流也是不错的。
回复 支持 反对

使用道具 举报

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
 楼主| 发表于 2018-1-11 14:39:32 | 显示全部楼层
kylongmu 发表于 2018-1-11 13:43
楼主你好,有没有linux下CDC驱动,比如接入树莓派这样的板子就很方便了,接口控制与逻辑由MCU来完成,高级 ...

其实这个我也不懂,问了几个大佬后他们说linux里面集成的有CDC驱动了,不需要另外的驱动文件。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

蝴蝶豆

中级会员

最后登录
2018-3-13
发表于 2018-1-11 15:35:16 | 显示全部楼层
creep 发表于 2018-1-11 12:03
帖子里面的测试gif 和截图是在win7 上进行的,这个时候需要加载一个inf 驱动。
在win10上是可以自己加载 ...

现在用CUBEMX生成单VCP发送没有问题。我看网上说VID和PID也很重要,我在您例程里看用的是0x03EB/0x6133,不知道这个有什么考虑吗?STM默认用的是0x0483/0x5740.另外win10安装没有数字签名驱动的方法您那有吗?我这边安装总是不成功
回复 支持 反对

使用道具 举报

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
 楼主| 发表于 2018-1-11 16:06:23 | 显示全部楼层
MaggiGunner 发表于 2018-1-11 15:35
现在用CUBEMX生成单VCP发送没有问题。我看网上说VID和PID也很重要,我在您例程里看用的是0x03EB/0x6133, ...

1、 要保证STM32程序里面的用PID VID和驱动文件INF的PID VID保持一致,这里使用和官方的PID VID不一样是为了加载自己写的那个驱动,这样可以修改枚举出来的串口名称。
2、没有数字证书的问题我也搞不定,这个目前没有办法,WIN7 32位可以强制安装驱动,但是64位或者win10好像只能禁用签名验证才能安装驱动。win10也可以使用系统自动加载的兼容驱动好像也能正常通信。
回复 支持 反对

使用道具 举报

该用户从未签到

43

主题

296

帖子

38

蝴蝶豆

金牌会员

最后登录
2022-3-31
发表于 2018-1-11 18:03:58 | 显示全部楼层
creep 发表于 2018-1-11 14:39
其实这个我也不懂,问了几个大佬后他们说linux里面集成的有CDC驱动了,不需要另外的驱动文件。 ...

好的,谢谢,回头试试。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

蝴蝶豆

中级会员

最后登录
2018-3-13
发表于 2018-2-2 10:18:24 | 显示全部楼层
楼主你好,目前又有一个细节问题需要请教~我发了一个帖子询问端点缓冲区大小设置:STM32F7 USB 缓冲区设置最小单位是字节还是字?
https://www.stmcu.org.cn/module/ ... amp;fromuid=3350409
(出处: 意法半导体STM32/STM8技术社区)

想请教一下你的缓冲区大小设置是怎么考虑的?
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

41

帖子

0

蝴蝶豆

高级会员

最后登录
2018-5-14
发表于 2018-2-6 09:25:22 | 显示全部楼层
你好,你写的教程基本都能理解,就是我想问一下,我研究的源码里,它没有分别对某一个端点进行初始化的函数,而是统一用一个函数来初始化:
endpoint_control_address = (UX_DCD_OTG_FS_DIEPCTL0 + (ed -> ux_dcd_otg_ed_index * UX_DCD_OTG_ENDPOINT_SPACE_SIZE));
endpoint_size_address = (UX_DCD_OTG_FS_DIEPTSIZ0 + (ed -> ux_dcd_otg_ed_index * UX_DCD_OTG_ENDPOINT_SPACE_SIZE));
endpoint_dma_address = (UX_DCD_OTG_FS_DIEPDMA0 + (ed -> ux_dcd_otg_ed_index * UX_DCD_OTG_ENDPOINT_SPACE_SIZE));
就像这样,在一个函数里就设置了端点0和非0端点的所有端点的IN设置,可根据ed -> ux_dcd_otg_ed_index来判断是哪一个端点,所以,相对来说,如果我添加了端点,就是不是不需要再添加我加的端点的初始化函数呢
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

3

帖子

0

蝴蝶豆

新手上路

最后登录
2018-2-24
发表于 2018-2-24 11:55:26 | 显示全部楼层
感谢分享!!
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-9 08:19 , Processed in 1.214766 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表