初衷
問題產生在本人使用esp8266連接stm32f030,應爲esp8266免不了上電打印,但是上電打印會導致頭2條數據產生粘滯的問題,即IDLE中斷不響應,
相應之後DMA數據並未從0開始搬運,而是從上次位置開始搬運。
解決
本人經過KEIL查看寄存器時發現,在接收非指定波特率的數據時,USART的cR1寄存器的PEIE和CR3寄存器的EIE被置位。導致下面一包的數據產生問題。
於是我搜索了PEIE,發現在HAL_UART_Receive_DMA中會對打開此中斷,雖然這個標誌位不會進入中斷,但是會導致DMA時讀取此標誌位,對後面的數據產生干擾,目前我也沒有完整理解HAL DMA的處理邏輯。
但是經過我的想象,我在中斷之前清除了這兩個標誌位後,問題解決,數據可以正常分包
CLEAR_BIT(huart1.Instance->CR1, USART_CR1_PEIE);
CLEAR_BIT(huart1.Instance->CR3, USART_CR3_EIE);
這是串口1的例子,其他再試,dma可以大大釋放mcu的性能,希望串口都可以用上dma