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

[复制链接]
10742|25
手机看帖
扫描二维码
随时随地手机跟帖
晶晶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+空闲中断 
ayb_ice| | 2021-7-19 14:39 | 显示全部楼层
直接中断+FIFO

使用特权

评论回复

评论

晶晶hc 2021-7-19 16:18 回复TA
嗯嗯,可以试一下 
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了 
linguanghua| | 2021-7-19 17:27 | 显示全部楼层
透传,串口转串口,有些好奇,那不是有些多余吗?
这个丢失数据,是队列满了吧。

使用特权

评论回复
caosix| | 2021-7-19 20:58 | 显示全部楼层
搂主 已经采用了 [DMA+空闲中断方式,发送使用轮询发送方式 ] ,首先 楼主 要说清楚,

发现丢失数据的 是下一站 吧 ?  不是 本机 吧 ?? 因为 [DMA+空闲中断方式] 是 不会丢数据的 哟,
它肯定是收到了 完整的 一包数据 , 要注意的是 :  空闲中断 最好能在 10bit 时间内处理完毕 ,
如果时间不好确定,建议 切换 串口传冲缓冲区 (双缓冲方法) .

使用特权

评论回复

评论

晶晶hc 2021-7-20 13:42 回复TA
是乒乓缓冲吗 
晶晶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口状态更直接了。不用涉及到什么复杂的缓冲区,还不会丢数据,接收管脚是什么电平直接送到发送引脚什么电平就好了

使用特权

评论回复

评论

晶晶hc 2021-7-26 11:24 回复TA
还可以这样吗 
wood2qin| | 2021-7-27 19:34 | 显示全部楼层

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

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

使用特权

评论回复

评论

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

使用特权

评论回复
li880wert| | 2021-8-3 08:24 | 显示全部楼层

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

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

使用特权

评论回复
charrijon| | 2021-8-11 16:51 | 显示全部楼层

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

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

使用特权

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

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 呐咯密密 得到打赏 ¥310.00
  • 2 gaoyang9992006 得到打赏 ¥200.00
  • 3 yanzhengxin1 得到打赏 ¥150.00
  • 4 qbwww 得到打赏 ¥130.00
  • 5 逍遥李 得到打赏 ¥75.00
  • 6 kk的回忆 得到打赏 ¥50.00
  • 7 cjseng 得到打赏 ¥50.00
  • 8 二哲科技 得到打赏 ¥50.00
  • 9 qintian0303 得到打赏 ¥25.00
  • 10 wangming147 得到打赏 ¥20.00
在线客服 快速回复 返回顶部 返回列表