bug1:
使用空闲中断接收ESP8266回复的消息时,存在丢包的问题,esp8266本来回复的是一帧数据,但是由于网络问题,或者硬件连接,电压不稳定等问题,导致一帧数据出现了两次空闲中断,而空闲中断触发一次后只接收到一帧数据的前一部分。
bug2:
开启DMA空闲中断时,需先调用HAL_DMA_Abort(&hdma_uart4_rx);函数,否则可能会出现一直返回HAL_BUSY的错误。看看函数调用关系就知道,当开启DMA空闲中断时产生错误时,HAL库没有对上锁后的状态进行解锁,从而导致下一次不能开启DMA空闲中断。
函数调关系如下所示:
解锁其实就是一个条件判断,如果处于上锁状态就返回忙碌状态
所以开启DMA空闲中断接收应该先调用HAL_DMA_Abort函数
释放信号量
获取信号量