STM32f030 HAL庫使用DMA遇到的問題

STM32f030 HAL庫使用DMA遇到的問題(已解決)

初衷

問題產生在本人使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章