打印

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

[复制链接]
12485|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晶晶hc|  楼主 | 2021-7-19 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32使用两个串口同时进行数据收发,目前处理方式是两个串口接收使用DMA+空闲中断方式,发送使用轮询发送方式,接收数据之后两个串口的数据分别放入两个不同的队列,再出队进行发送。目前还是会丢数据,不知道有什么方法可以不丢数据

使用特权

评论回复
评论
lawit 2021-7-19 12:14 回复TA
DMA+空闲中断收发,1.5Mbps波特率不翻车:https://acuity.blog.csdn.net/article/details/108367512 

相关帖子

沙发
LcwSwust| | 2021-7-19 10:53 | 只看该作者
没遇到过丢数据的情况,若是互相通信,可加入校验、应答、重发等机制。

使用特权

评论回复
评论
晶晶hc 2021-7-19 16:19 回复TA
目前不使用在协议通信上哈,仅仅只是大量数据的透传,两个串口同时收发数据 
板凳
coody| | 2021-7-19 11:45 | 只看该作者
串口是有线通信,没遇到过丢数据。如果你的程序员丢数据,情仔细检查程序逻辑。

使用特权

评论回复
评论
晶晶hc 2021-7-19 16:17 回复TA
应该是程序问题,串口一般不会丢数据。就是不知道怎么处理这种机制 
地板
lawit| | 2021-7-19 12:12 | 只看该作者
本帖最后由 lawit 于 2021-7-19 12:15 编辑

DMA+空闲中断

使用特权

评论回复
评论
晶晶hc 2021-7-19 16:16 回复TA
接收是用的DMA+空闲中断 
5
ayb_ice| | 2021-7-19 14:39 | 只看该作者
直接中断+FIFO

使用特权

评论回复
评论
晶晶hc 2021-7-19 16:18 回复TA
嗯嗯,可以试一下 
6
foxpro2005| | 2021-7-19 15:16 | 只看该作者
重点检查一下程序,首先接收数据是否完整, 另外发送也可以使用DMA的, 或者 中断+FIFO

使用特权

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

使用特权

评论回复
8
晶晶hc|  楼主 | 2021-7-20 13:40 | 只看该作者
linguanghua 发表于 2021-7-19 17:27
透传,串口转串口,有些好奇,那不是有些多余吗?
这个丢失数据,是队列满了吧。
...

不多余啊,一个串口接收数据再发往另外一个串口

使用特权

评论回复
9
chunyang| | 2021-7-20 17:32 | 只看该作者
中断服务程序必须足够简单,执行时间需控制在一个字节的传输时间内。

使用特权

评论回复
10
benxiaoyu4| | 2021-7-23 16:02 | 只看该作者

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

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

使用特权

评论回复
评论
晶晶hc 2021-7-26 11:24 回复TA
还可以这样吗 
11
wood2qin| | 2021-7-27 19:34 | 只看该作者

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

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

使用特权

评论回复
评论
你码没了 2021-8-13 17:12 回复TA
大佬,求代码。邮箱:1825441759@qq.com 
12
资深技术| | 2021-7-27 20:20 | 只看该作者
假如同时接收,会有这个可能性发生。所有才有了带接收(发送)缓存的单片或是芯片

使用特权

评论回复
13
li880wert| | 2021-8-3 08:24 | 只看该作者

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

做通过这 是我强项,我做过很多的通讯,你这丢失是数据多少ms一次,我做的通讯都是 上位机1ms 连续不断发送也不会丢,你用DMA + 空闲,有没考虑过 ,数据没有空闲情况,你数据不丢才怪

使用特权

评论回复
14
charrijon| | 2021-8-11 16:51 | 只看该作者

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

100个串口同时接收发送都不会丢数据,这跟你的软件设计有关系。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝