单片机同时使用两个串口进行数据收发怎么才能不丢数据?

[复制链接]
13669|24
 楼主| 晶晶hc 发表于 2021-7-19 10:26 | 显示全部楼层 |阅读模式
stm32使用两个串口同时进行数据收发,目前处理方式是两个串口接收使用DMA+空闲中断方式,发送使用轮询发送方式,接收数据之后两个串口的数据分别放入两个不同的队列,再出队进行发送。目前还是会丢数据,不知道有什么方法可以不丢数据

评论

DMA+空闲中断收发,1.5Mbps波特率不翻车:https://acuity.blog.csdn.net/article/details/108367512  发表于 2021-7-19 12:14
LcwSwust 发表于 2021-7-19 10:53 | 显示全部楼层
没遇到过丢数据的情况,若是互相通信,可加入校验、应答、重发等机制。

评论

目前不使用在协议通信上哈,仅仅只是大量数据的透传,两个串口同时收发数据  发表于 2021-7-19 16:19
coody 发表于 2021-7-19 11:45 | 显示全部楼层
串口是有线通信,没遇到过丢数据。如果你的程序员丢数据,情仔细检查程序逻辑。

评论

应该是程序问题,串口一般不会丢数据。就是不知道怎么处理这种机制  发表于 2021-7-19 16:17
lawit 发表于 2021-7-19 12:12 | 显示全部楼层
本帖最后由 lawit 于 2021-7-19 12:15 编辑

DMA+空闲中断

评论

接收是用的DMA+空闲中断  发表于 2021-7-19 16:16
ayb_ice 发表于 2021-7-19 14:39 | 显示全部楼层
直接中断+FIFO

评论

嗯嗯,可以试一下  发表于 2021-7-19 16:18
foxpro2005 发表于 2021-7-19 15:16 | 显示全部楼层
重点检查一下程序,首先接收数据是否完整, 另外发送也可以使用DMA的, 或者 中断+FIFO

评论

@ayb_ice :单方面的发送是没有问题的,串口1接收->串口2发送没有问题,串口2接收->串口1发送没有问题。两者同时进行,就有问题。两者发送速度过快的话还会产生ORE错误  发表于 2021-7-19 17:21
@晶晶hc :发送都丢失数据那只能说你的代码太差了,发送是你自己主动操作的,接收是被动的,丢数据还可以理解  发表于 2021-7-19 16:38
发送我也试过DMA,丢的更严重。因为我两个串口接收都是用的DMA,发送再用DMA不知道会不会有冲突,单片机只有1个DMA,4个通道。中断+FIFO 的话还没试过,只使用发送中断试过效果好一点。FIFO的话估计不行,单片机资源没了,接收数据开了两个1k的FIFO,ram一共8k,其他的用了差不多了,用不起FIFO了  发表于 2021-7-19 16:16
linguanghua 发表于 2021-7-19 17:27 | 显示全部楼层
透传,串口转串口,有些好奇,那不是有些多余吗?
这个丢失数据,是队列满了吧。
 楼主| 晶晶hc 发表于 2021-7-20 13:40 | 显示全部楼层
linguanghua 发表于 2021-7-19 17:27
透传,串口转串口,有些好奇,那不是有些多余吗?
这个丢失数据,是队列满了吧。
...

不多余啊,一个串口接收数据再发往另外一个串口
chunyang 发表于 2021-7-20 17:32 | 显示全部楼层
中断服务程序必须足够简单,执行时间需控制在一个字节的传输时间内。
benxiaoyu4 发表于 2021-7-23 16:02 | 显示全部楼层

单片机同时使用两个串口进行数据收发怎么才能不丢数据?

如果是数据透传,莫不如直接读取IO口状态,然后改变IO口状态更直接了。不用涉及到什么复杂的缓冲区,还不会丢数据,接收管脚是什么电平直接送到发送引脚什么电平就好了

评论

还可以这样吗  发表于 2021-7-26 11:24
wood2qin 发表于 2021-7-27 19:34 | 显示全部楼层

单片机同时使用两个串口进行数据收发怎么才能不丢数据?

做过这种,代码你自己研究。双重环形缓区,中断实现。如果有需要,可以给源码的。三个串口的。

评论

大佬,求代码。邮箱:1825441759@qq.com  发表于 2021-8-13 17:12
资深技术 发表于 2021-7-27 20:20 | 显示全部楼层
假如同时接收,会有这个可能性发生。所有才有了带接收(发送)缓存的单片或是芯片
li880wert 发表于 2021-8-3 08:24 | 显示全部楼层

单片机同时使用两个串口进行数据收发怎么才能不丢数据?

做通过这 是我强项,我做过很多的通讯,你这丢失是数据多少ms一次,我做的通讯都是 上位机1ms 连续不断发送也不会丢,你用DMA + 空闲,有没考虑过 ,数据没有空闲情况,你数据不丢才怪
charrijon 发表于 2021-8-11 16:51 | 显示全部楼层

单片机同时使用两个串口进行数据收发怎么才能不丢数据?

100个串口同时接收发送都不会丢数据,这跟你的软件设计有关系。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

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