最近在使用串口DMA接收4G模块的AT指令回复时,一开始还能够接收到数据,后来运行到某个AT指令发送的时候,后面就接收不到数据了。进入内部的状态寄存器查看,发现接收数据过程中出现了错误:ORE:过载错误。
当数据接收区或者FIFO区有数据或者满时,又有新数据进来,会导致发生溢出错误,一旦发生溢出错误,RX 移位寄存区虽然能有新数据不断的覆盖,但是数据不会到达RXR或FIFO(现象是:RXNE在ORE置位时不会被置位),导致程序中不能读到新的数据。只有通过ICR清除ORE才能使得RXNE在接收到新数据时置位。
经过测试发现,即使在中断中清空了标志位,还是会出现这种情况,无奈之下只好增加了接收数组的容量,才解决了这个问题。