LL庫串列埠 DMA

2021-10-05 08:32:17 字數 918 閱讀 5571

由於工作中測試發現串列埠傳輸資料延時有點大,傳輸35個位元組,115200,理論值應該在3ms左右,然而實際測試卻有40ms,所以首先想到會不會是hal庫執行效率低得原因,所以採用ll庫,但是ll庫的資料少之又少啊!自己做個記錄。

使用cubemx可以直接生產ll庫的**(我的工程裡是hal庫和ll庫混用的),ll庫串列埠硬體初始化部分會自動生成,但是傳輸位址及dma傳輸長度並沒有設定,需要手動設定。設定步驟可參考標準庫設定

初始化**使用dma+idle接收資料,

void bsp_usart_init()

中斷接收函式

void bsp_usart_irq()

else if (ll_usart_isactiveflag_tc(usart2))

}

dma傳送函式

uint8_t bsp_usart_send(uint8_t *data, uint32_t len)

ll_dma_clearflag_tc6(dma1);

memcpy(bsp_usart.atxbuffer, data, len);

ll_dma_disablestream(dma1, ll_dma_stream_6);

ll_dma_setdatalength(dma1, ll_dma_stream_6, len);

ll_dma_enablestream(dma1, ll_dma_stream_6);

return 0;

}

在使用ll庫時,串列埠接收還比較容易實現,和hal庫除了初始化設定dma位址外,其他大同小異。但是dma傳送卻沒有那麼順利,第一次呼叫傳送函式時,是可以正常接收到的,但是後面就沒有了。最後發現是沒有清除dma傳送完成中斷,使用ll庫特別要注意中斷及標誌位的清除

LL庫實現ADC多通道DMA讀取

首先依舊使用stcubemx配置一下工程 我這裡使用的是adc1的多個通道,具體看下面配置圖,比較簡單,因為我使用了dma,配置好adc之後還需要配置一下dma。1,adc配置 2,dma配置,需要配置通道以及方向,是外設到記憶體還是記憶體到記憶體,以及快取區資料寬度。3,配置好以上後,我們還需要手...

串列埠通訊DMA中斷

這是以前學32的時候寫的,那時候學了32之後感覺32真是太強大了,比51強的沒影。關於dma網上有許多的資料,親們搜搜,這裡只貼 了,其實我也想詳詳細細地敘述一番,但是自己本身打字就慢,還有好多事情要做!是我親自都在板子上測試過的,當然貼上 複製過去可能也不會盡如人意,知識這東西總是有許多道不清說不...

串列埠 DMA接受不定長資料

工作中經常會遇到串列埠通訊,並對互動的資料進行處理。經常用到的是通過不停的產生串列埠接收中斷,然後對資料做處理。這樣做的弊端就是,不停的會產生串列埠接受中斷。中斷請求不但使cpu停下來,而且要cpu執行中斷服務程式為中斷請求服務,這個請求包括了對斷點和現場的處理以及cpu與外設的傳送,所以cpu付出...