问答

汇集网友智慧,解决技术难题

21ic问答首页 - 单片机同时使用两个串口进行数据收发怎么才能不丢数据?

数据收发 串口 单片机 ST 串口接收 中断方式

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

晶晶hc2021-07-19
stm32使用两个串口同时进行数据收发,目前处理方式是两个串口接收使用DMA+空闲中断方式,发送使用轮询发送方式,接收数据之后两个串口的数据分别放入两个不同的队列,再出队进行发送。目前还是会丢数据,不知道有什么方法可以不丢数据
回答 +关注 1
3886人浏览 10人回答问题 分享 举报
10 个回答
  • 本帖最后由 lawit 于 2021-7-19 12:15 编辑

    DMA+空闲中断
    晶晶hc 2021-7-19 16:16 回复TA
    接收是用的DMA+空闲中断 
  • 如果是数据透传,莫不如直接读取IO口状态,然后改变IO口状态更直接了。不用涉及到什么复杂的缓冲区,还不会丢数据,接收管脚是什么电平直接送到发送引脚什么电平就好了
  • 中断服务程序必须足够简单,执行时间需控制在一个字节的传输时间内。
  • linguanghua 发表于 2021-7-19 17:27
    透传,串口转串口,有些好奇,那不是有些多余吗?
    这个丢失数据,是队列满了吧。
    ...

    不多余啊,一个串口接收数据再发往另外一个串口
  • 搂主 已经采用了 [DMA+空闲中断方式,发送使用轮询发送方式 ] ,首先 楼主 要说清楚,

    发现丢失数据的 是下一站 吧 ?  不是 本机 吧 ?? 因为 [DMA+空闲中断方式] 是 不会丢数据的 哟,
    它肯定是收到了 完整的 一包数据 , 要注意的是 :  空闲中断 最好能在 10bit 时间内处理完毕 ,
    如果时间不好确定,建议 切换 串口传冲缓冲区 (双缓冲方法) .
    晶晶hc 2021-7-20 13:42 回复TA
    是乒乓缓冲吗 
  • 透传,串口转串口,有些好奇,那不是有些多余吗?
    这个丢失数据,是队列满了吧。
  • 重点检查一下程序,首先接收数据是否完整, 另外发送也可以使用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了 
  • 直接中断+FIFO
    晶晶hc 2021-7-19 16:18 回复TA
    嗯嗯,可以试一下 
  • 串口是有线通信,没遇到过丢数据。如果你的程序员丢数据,情仔细检查程序逻辑。
    晶晶hc 2021-7-19 16:17 回复TA
    应该是程序问题,串口一般不会丢数据。就是不知道怎么处理这种机制 
12下一页

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