HAL庫DMA使用異常問題

2021-10-24 10:06:08 字數 553 閱讀 2264

1.串列埠接收一旦溢位就會丟資料。

串列埠接收滿了,稍等幾秒再重新啟動dma接收函式hal_uart_receive_dma()時,就會丟失資料,而且此時串列埠接收空閒中斷啟動正常,列印出來會發現全是』\0』。如果接滿後馬上啟動就沒此問題。

2.串列埠dma接收與傳送不能單獨停止。

如果串列埠同時進行dma傳送和dma接收,在dma接收到一半我要終止dma時,只能呼叫hal_uart_dmastop()把接收dma和傳送dma都停止,不能單獨停止dma接收。

當你將接收dma關閉後,此時串列埠還是啟用的,若此時串列埠來資料,無法觸發dma傳輸,此時產生上溢錯誤(ore),由於串列埠資料暫存器裡的資料不能及時轉移走,後面來的資料就進不來。一旦出現這種錯誤後,就不會再觸發dma請求,即使再開啟dma也不行。

官方示例是deinit後再重新初始化串列埠,或者使用read介面直接將資料暫存器中的資料讀走後,後面的資料才能正常進入,從而正常產生dma請求,這個dma請求是指硬體請求。

親測解決方法:將hal_uart_dmastop()替換成hal_uart_abortreceive(),此函式是只關閉dma接收的函式。

HAL驅動庫學習 如何使用HAL庫

二 具體使用過程 1 hal 硬體抽象層 初始化 2hal io 操作流程 hal functions 與內部資料處理類似傳送 接收,讀 寫.提供三種處理模型 apolling mode 查詢模式,hal函式在資料處理完成 阻塞 後返回處理狀態 ok or err 可以通過 hal ppp gets...

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

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

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

由於採用cube配置stm32效率高,但是不是存在一些bug,出現這個問題 提供一種解決思路 void mx usart1 uart init void hal nvic setpriority usart1 irqn,0,0 根據自己的需要配置串列埠,重點在於dma的配置,如下 usart1 tx...