前两天使用HAL库的空闲中断+DMA接收串口数据,第一帧会丢失,今天找了下原因。
使能DMA接收用的如下语句,
我把这句话放在了
这里使用的,这个函数是被串口初始化调用的,就是这个函数
就是相当于先开启DMA接收再使能串口。
这样的话HAL_UART_Receive_DMA()这个函数就无法正常运行(他需要
).所以HAL_UART_Receive_DMA()这个函数需要HAL_UART_INIT()之后调用。
我之前之所以想先使能DMA再使能串口,是因为怕先使能串口没来得及使能DMA的时候串口有数据进来的话会触发溢出中断,但是现在没有使能串口接收中断或溢出中断就不用担心这个了,所以改为先使能串口再使用DMA接收数据就可正常接收。