16029|12

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个stm32的多个串口同时接收数据 [复制链接]

                                 几个串口同时接受数据,怎样保证不丢失数据。数据不断的发送给每个串口
此帖出自stm32/stm8论坛

最新回复

                                 我用AVR的M64,开两个串口,还用定时器虚拟一个串口,都来得及,没事的。串口数据在下一个自己接收完成之前,接收BUF里的数据是不会被覆盖的。所以实际中断相应只要不超过1个字节的传输时间就没事。即使是115200bps,1个字节的传输也要90微秒,适当调整下各个中断处理程序,完全来得及。   详情 回复 发表于 2008-7-23 11:34
点赞 关注
 

回复
举报

54

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

太容易了吧。

                                  
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

说说

                                  
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 

两个串口同时来数据了 这个时候只能进入一个中断

                                 那另个串口要接受的数据不是丢失了吗
此帖出自stm32/stm8论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

5
 

UART串口数据传输是一种很慢的传输方式

以波特率为38400计算,假定数据帧格式为:8个数据位、1个停止位、没有奇偶检验位,则每个字节的传输时间至少为260us,中断处理程序只要在这个时间之内从接受寄存器读出收到的数据,就不会造成数据丢失。

如果你有2个串口同时传输数据,则每个串口的接收中断处理程序只要能在130us内完成,就不会造成数据丢失。

请问你的接收中断处理程序需要多长的时间?

如果数据传输速率很高,使用中断程序处理有困难,还可以使用DMA进行传输。总之,对于STM32来说,UART串口数据传输是一种很慢的传输方式。
此帖出自stm32/stm8论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(初级)

6
 

谢谢香主 不过还有一个问题

如果要接受的数据的  发过来的数据间隔很小  是不是就会产生丢数据
  那么如果像您说的接受时间大于130了  那么使用dma会解决这个问题吗
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 

STM32的USART中移位寄存器和数据寄存器是分开的

下图是STM32 USART的框图,在图的右上方可以看到,从USART_RX到来的数据通过Receive Shift Register被转换为并行格式,只有当收到一个完整的字节后,Receive Shift Register的内容才被送到Receive Data Register (RDR),程序可以通过RDR读出收到的数据字节。

只要你的程序在下一个数据字节到来之前读出Receive Data Register (RDR),就不会产生数据丢失。

问题的关键是:USART的内部有2个寄存器,一个用于接收数据,另一个用于读取数据,而你把这2者想象为一个寄存器了。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 

还有一个问题

                                 最大容量的带有5个串口  他们是一样的吗  都可以做为485通讯吗
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

9
 

STM32的5个USART模块不尽相同

请看STM32技术参考手册,所有答案都在其中。


至于是否可以作为485通讯,要你自己决定。485协议只规定了物理层的传输,没有规定数据传输格式,UART只是常用的一种。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 

哈哈~~~HotComm支持250个串口~~~

                                 可惜俺没机会实验~~~
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

11
 

楼上是什么东东

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 

呵呵,真 不是东西:-)

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

13
 

3个串口肯定来得及

我用AVR的M64,开两个串口,还用定时器虚拟一个串口,都来得及,没事的。

串口数据在下一个自己接收完成之前,接收BUF里的数据是不会被覆盖的。所以实际中断相应只要不超过1个字节的传输时间就没事。即使是115200bps,1个字节的传输也要90微秒,适当调整下各个中断处理程序,完全来得及。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表