STM32使用虚拟串口通过USB向PC发送数据,怎样提高速度

[复制链接]
 楼主| 令狐老爷们 发表于 2013-11-1 15:23 | 显示全部楼层 |阅读模式
各位大神,我最近在研究STM32 F107 的USB 虚拟串口程序。用的是官方的例程,然后自己稍微修改了一点。我的目的是通过USB向上位机PC发送数据,要求数据传输速度至少是400K字节/秒(网上有很多人回复说USB虚拟串口传输速度可以达到600K字节/秒)。但是我看例程里面,主机每隔1ms就会查询端点的中断,也就是说,我满打满算,每秒能够传输1000次,每次最多传输64KB(这是由端点缓冲区决定的)。即最终我的程序最大传输速度只有64KB/S,这是远远达不到我的要求的。不知道网上别人说的600KB/S的传输速度是怎么来的?不知道诸位大神谁有弄过usb虚拟串口,目前我最大的问题就不知道能否满足我要求的传输速度,USB虚拟串口到底可不可行。跪求诸位大神指教,谢谢!
zzwj5120 发表于 2013-11-1 15:49 | 显示全部楼层
我也觉得超过64KKB可能性比较小,那些声称很大的人的测试,都是哗众取宠,没见有完整源码。

玄德 发表于 2013-11-1 16:38 | 显示全部楼层
印象里,1ms查询一次是HID方式,虚拟串口也是这样吗?

如果也是,是否可以把时间缩短?

期待。
s_f_tan 发表于 2013-11-4 09:16 | 显示全部楼层
全速bulk传输时,理论上1帧最多传输19个64B的包,但是受总线调度影响,达不到这么高的负载率,640KBs的速率应该还是可以达到的
s_f_tan 发表于 2013-11-4 09:17 | 显示全部楼层
有的东西先要规范先看一遍,确定理论上可不可行再动手
ty51 发表于 2013-11-7 08:47 | 显示全部楼层
bulk方式下可以达到600k,我的产品已经使用2年了,一直稳定。如果用32f207,有时能够达到1M.但是操作系统要在系统空闲的时候才可以达到1M.很多时候操作系统不允许。不过降到600K的速度,操作系统能够保证的。
ty51 发表于 2013-11-7 08:52 | 显示全部楼层
主机每隔1ms就会查询端点的中断...
适当处理后,间隔可以降到100uS一下。
mcuatmel 发表于 2014-4-10 09:39 | 显示全部楼层
请问楼上,怎么处理可以提升速度?100us怎么改?
yang4469 发表于 2014-6-18 14:47 | 显示全部楼层
USB2.0理论上有12M,但是会有协议消耗,一般700-800k木有问题
采用bulk传输,每包64字节
官网的虚拟串口有一个FrameCount 的计数,去掉就能提高速度,不然if (FrameCount++ == CDC_IN_FRAME_INTERVAL)影响速度
libingqing 发表于 2015-12-25 19:03 | 显示全部楼层
这个帖子还有从么,可以讨论么,现在在做这个,感觉速度真的不会很快呢
huangqi412 发表于 2015-12-25 22:34 来自手机 | 显示全部楼层
libingqing 发表于 2015-12-25 19:03
这个帖子还有从么,可以讨论么,现在在做这个,感觉速度真的不会很快呢

上面已经讨论很清楚了
yiyigirl2014 发表于 2015-12-25 23:15 | 显示全部楼层
提高速率的方法就是提高波特率,前提是时钟要精确才行。
libingqing 发表于 2015-12-27 15:17 | 显示全部楼层
跟波特率没有多大的关系吧,在串口调试助手中波特率不一致也没有什么关系、但是RS232不行,如果波特率不一致,就会发乱码
BurgessKzg 发表于 2017-8-3 10:21 | 显示全部楼层
还有人在跟这个帖子吗?我最近刚好做的也是STM332F107VCT6的虚拟串口,抑制完之后,出现一些问题,陆续决解之后本以为可以用了,但是现在又遇到一个丢包的问题。刚开始还遇到一个问题,就是发送的缓存是2048,当我一次也发送2048的时候,总是不成功,小于2048(2040)就基本上每次都能传送了,但是又遇到刚才说的,丢包的字节,比如说,我每次都传2040,但是传10来次的中,总有一两包对丢许多字节,这个丢包没有什么规律,不知道大家遇到过没有。波特率我设置的范围:1200-921600都测试过,基本上没啥问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部