• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

如何修改CubeMX中使用串口DMA,只能接收一帧数的BUG

川楠 2018-06-11 浏览量:1709

我使用的是STM32L0单片机,设置的是单片机接收发送都通过DMA。

单片机可以接收 发送任意长度的数据帧。

接收一个完整的数据帧,通过UART_FLAG_IDLE标志位来判断。

目前单片机可以发送和接收任意长度的数据帧。

问题是:单片机接收一次任意长度数据帧之后,在新来的数据帧就不在接收了。

只有单片机重新发送一帧数据出去,才能继续接收新的数据帧。


如何打破这种机制,让它可以一直监听接收数据帧?


我也知道肯定是那个标志不对,不知道有没有谁也遇到过相同的问题,

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这应该不是BUg,应该是你的DMA或是串口配置时,配置了收到数据的长度后进中断,而没有清中断标志
    • 发布于 2018-06-19
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:10
  • 我感觉重点并不是需要再发送一帧才能接受,只是发送正好去掉了标志,让接收可以经营,接收完成一帧数据后要及时处理,同时恢复标志位
    • 发布于2018-06-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 串口dma设置循环收模式才可以接收多帧吧,而且空闲标志位会自动复位的。

    • 发布于2018-06-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 在处理的时候不要关闭DMA,让DMA一直接收,这样就不会丢数据了
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 我觉得你可能是程序的问题,在空闲中断中要重新使能DMA接收
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个不禁用DMA就可以了,一直接收数据,等你要数据的时候直接拿数据就可以了
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 我用dma读取AD数据的时候不想检测时把DMA通道关闭下次再打开会造成AD数据错误,后来就不关闭DMA了,关闭AD,你采集数据也可以通过这种方法,不关闭DMA需要时缓存数据调取,不需要时不管他
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 推荐看看原子的程序,这个代码一般都是你使用DMA的时候把他关了导致
    • 发布于2018-06-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 楼主可以参考我发的文章,里面介绍了STM32接收不定长数据的手段,用的方法是串口接收DMA+IDLE中断。

    • 发布于2018-06-14
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

如何修改CubeMX中使用串口DMA,只能接收一帧数的BUG