原因:产生串口溢出中断的原因是usart中接受到了可读数据,但是没有被及时读取,导致第二个字节数据到达usart时没有地方存放,导致串口溢出中断。
分析代码:采用MDA方式接收数据,实际上是很快的,不存在没有及时读取数据的情况。
唯一的可能是DMA被关闭了,导致usart的数据没有被DMA及时读取。
检查代码后,发现,确实在某个条件下DISABLE了DMA接收。而此时上位机的第二帧数据已经到来。---其实就是上位机发第二帧数据的起始时刻发的太快了,而board上还在处理上一帧的数据,以及send回复帧给上位机(波特率太低,且数据量太大,导致发送的时间比较长),此时DMA接收是关闭状态的。
2种解决:
1、加大波特率
2、上位机接收完board的回复帧之后,等一段时间再发送下一帧数据。