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