[STM32H7] 串口空闲中断加DMA接收异常说明

[复制链接]
1129|0
 楼主| tdh03z 发表于 2023-12-17 10:42 | 显示全部楼层 |阅读模式
    记录下,在调试串口空闲中断加DMA接收串口数据时,前期接收都没问题。后来想测试接收可靠性,将1帧串口数据加大到400个字节,发现串口无法收到数据,后续即使发送正常的数据帧,也收不到数据了。
    上网查找相关信息结合调试发现,应该是DMA接收初始化时,设定的DMA接收缓存大小为300,一旦一帧数据量大于300,就会停止传输数据到DMA,导致串口溢出ORE位置位,一旦ORE置位后续就不会再传输数据到DMA,导致串口后续一直无法接收数据,但还是能激活串口空闲中断。
    知道原因后,只要在串口空闲中断中查询是否接收溢出,有就清除ORE位,即可实现异常的修复。
    另外,查询到H7系列中,串口配置寄存器中有一个专门的ORE位屏蔽设置,也就是使能后,不管ORE是否置位,都不会影响串口数据传送到DMA中,好像是专门针对此问题的哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

206

帖子

4

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