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

STM32F103C8T6的USB虚拟串口VCP最大速度能达到多少?

[复制链接]
zen2017 提问时间:2017-4-2 23:21 /
本帖最后由 zen2017 于 2017-4-2 23:43 编辑

程序是在CUBE生成的USB虚拟串口VCP基础上修改。

在不丢失数据的情况下,传输采集的数据1M字节,花了大约14秒,算下来每秒钟的传输速度大概是72K字节/秒
想请教一下研究过虚拟串口的XD,这个速度还有提高的余地吗

其他硬件情况:

1.数据采集。使用外部信号作为定时器源,在中断中进行数据采集。采集一个数据,需要进入中断14次。速度大约是0.03ms采集一个字节,但VCP传输的时候,要传输8字节。

2.还有一个5通道的AD转换,使用AD+DMA,0.1s进行一次AD手动采集。

3.同时还有一个SPI接口的128x64的oled实时显示状态,显示内容全部是8x16的ASCII码字符,所以这个屏幕采用的是虚拟屏幕,内部RAM有一个4x16=64字节的缓冲区,对应显示内容。更新这个屏幕是采用全屏幕重刷方式,使用SPI DMA中断传输显示内容的,我测试过,大约2ms更新一次屏幕内容(SPI采用的是4分频对应是36/4=9MHZ),是在DMA+SPI中断内部,实际消耗CPU的资源很有限,应该不到2ms的10%。

已经充分做了优化,包括采集的数据用FIFO方式存储,VCP传输的时候,直接使用FIFO里面缓冲区指针进行发送,不进行数据搬移。按道理应该和双缓冲区的效果一样。

就是VCP发送,采用的是1ms一次的SOF软中断里面判断是否有数据,如果有数据,则配置好对应的数据指针发送。

收藏 评论7 发布时间:2017-4-2 23:21

举报

7个回答
zen2017 回答时间:2017-4-8 21:15:53
vcp和波特率没有关系
zen2017 回答时间:2017-4-3 12:52:40
没人知道吗?
zen2017 回答时间:2017-4-6 08:23:34
好吧。自己动手DIY做了一个实验,直接在stm32里面持续发送数据。

传送不变的数据速率是:729KB/S

如果每次传送的数据用for循环修改成另一个值,则速度急剧下降为:652KB/S ??!!

同时,这个也说明我使用FIFO进行VCP传输数据管理,速度基本达到了所谓的双缓冲区的效果!
anywill 回答时间:2017-4-6 09:57:22
试过256000波特率正常
爱德华迪奥 回答时间:2019-3-17 00:14:20
zen2017 发表于 2017-4-6 08:23
好吧。自己动手DIY做了一个实验,直接在stm32里面持续发送数据。

传送不变的数据速率是:729KB/S

怎么持续收发, 求大神指点
radio2radio 回答时间:2019-3-17 11:00:34
USB全速的最大速率是............感觉你已经接近极限了。
lxffly 回答时间:2019-8-1 18:46:53
全速模式的话,最快14Mbps/s,换算成B/s的话,约为1.7MB/s,我觉得如果不是大量数据传输,应该是够的
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版