stm32 HAL庫 串列埠DMA傳送只傳送一次

2021-10-09 04:56:15 字數 2029 閱讀 6960

由於採用cube配置stm32效率高,但是不是存在一些bug,出現這個問題 提供一種解決思路:

void mx_usart1_uart_init(void)

hal_nvic_setpriority(usart1_irqn,0,0);

}

根據自己的需要配置串列埠,重點在於dma的配置,如下:

/* usart1_tx init */

hdma_usart1_tx.instance = dma2_stream7;

hdma_usart1_tx.init.channel = dma_channel_4;

hdma_usart1_tx.init.direction = dma_memory_to_periph;

hdma_usart1_tx.init.periphinc = dma_pinc_disable;

hdma_usart1_tx.init.meminc = dma_minc_enable;

hdma_usart1_tx.init.periphdataalignment = dma_pdataalign_byte;

hdma_usart1_tx.init.memdataalignment = dma_mdataalign_byte;

hdma_usart1_tx.init.mode = dma_normal;

hdma_usart1_tx.init.priority = dma_priority_low;

hdma_usart1_tx.init.fifomode = dma_fifomode_disable;

這裡為dma tx初始化**,其中模式一般選擇 dma_normal,不選擇迴圈傳送。

hdma_usart1_rx.instance = dma2_stream2;

hdma_usart1_rx.init.channel = dma_channel_4;

hdma_usart1_rx.init.direction = dma_periph_to_memory;

hdma_usart1_rx.init.periphinc = dma_pinc_disable;

hdma_usart1_rx.init.meminc = dma_minc_enable;

hdma_usart1_rx.init.periphdataalignment = dma_pdataalign_byte;

hdma_usart1_rx.init.memdataalignment = dma_mdataalign_byte;

hdma_usart1_rx.init.mode = dma_normal;

hdma_usart1_rx.init.priority = dma_priority_low;

hdma_usart1_rx.init.fifomode = dma_fifomode_disable;

這裡為 dma rx初始化**,同tx**基本一致。其中io口初始化**未貼出,在cube配置時會自動生成。本文的重點在於解決串列埠 dma只傳送一次問題,相信大家在串列埠傳送時一般呼叫如下**:

hal_uart_transmit_dma

(uart_handletypedef *huart, uint8_t *pdata, uint16_t size)

如出現只串列埠傳送一次的情況,請確定dma tx的模式是否設定為dma_normal,如果是並且還是只傳送一次,這裡提供一種思路:在stm32f4xx_it.c(我這裡以f4位例,其餘系列按照晶元進入對應檔案)中找到對應tx dma的中斷函式,我這裡是dma2_stream7_irqhandler函式,在**中加入對串列埠的重新初始化 hal_uart_init(&huart1); ,(使用串列埠幾選擇串列埠幾,我這裡是串列埠1)如下:

void

dma2_stream7_irqhandler

(void

)

此時你會發現再次進行串列埠傳送時不會只傳送一次,這裡簡單地提供bug解決思路,未深入尋找具體原因,如有問題可諮詢。

STM32 hal庫解決串列埠 DMA接收資料

stm32cubeide stm32f4 hal庫 大疆dt7 串列埠 dma 1.硬體設計 首先了解大疆接收器傳送串列埠資料的訊號型別 如圖可知,需要做乙個取反電路 如下圖 取自網上.這些在網上都可以搜到.記住要有上拉電阻,如果外部沒有,可使用微控制器usart的rx的gpio配置為上拉 遙控接收...

stm32 hal庫串列埠通訊資料匯集

串列埠的傳送接收函式 hal uart transmit 串列埠輪詢模式傳送,使用超時管理機制。hal uart receive 串列埠輪詢模式傳送,使用超時管理機制。hal uart transmit it 串列埠中斷模式傳送,hal uart receive it 串列埠中斷模式傳送 hal u...

STM32 HAL庫串列埠不定長資料

void hal uart rxcpltcallback uart handletypedef huart ulart3 read bufs ulart3 counts read ulart3 if read ulart3 0x0d if ulart3 counts 30 hal uart rece...