STM32 DMA 學習筆記(一)

2021-08-22 04:27:41 字數 1301 閱讀 6848

dma 傳輸將資料從乙個位址空間複製到另外乙個位址空間。(不需要cpu干涉)

傳統的資料傳輸:位址a——>cpu——>位址b

dma資料傳輸:位址a——>位址b

這樣也就為cpu減負了

含有兩個通道,dma1有7個通道,dma2有5個通道。每一乙個通道都可以連線乙個外設。那麼就有乙個仲裁器,來處理了通道間的優先順序的。

所以,基本流程是:外設——>經過dma通道——>儲存器,或者:儲存器——>經過dma通道——>外設

儲存器——>經過dma通道——>儲存器

選好了通道,外設可選內容就已經確定了

dma_cparx:儲存外設基位址,首先要對它進行賦值,比如要 串列埠一傳送位址pr暫存器位址

dma_cmarx:記憶體記憶體基位址,對它進行賦值,比如賦值給記憶體中每乙個陣列的位址

dma_***trx:確定我們要傳輸的資料量,最大65535

假設從傳輸方向是從記憶體到外設,傳輸100個資料,那麼dma_***trx就會在傳輸過程中,傳遞乙個減乙個,減到0後表明傳輸結束了。

優先順序管理兩個部分:軟體和硬體

1.軟體:由dma_ccrx暫存器設定,有4個等級

(1)最高           (2)高                 (3)中等                     (4)低

2.硬體:當兩個請求的軟體優先順序相同時,低編號優先順序高於高通道。比如通道2高於通道4

並且dma1的優先順序高於dma2

1.記憶體資料寬度

2.外設資料寬度

兩者的寬度可以不一樣,但是不一樣時候處理比較麻煩,需要參考資料手冊。

以儲存器向外設傳輸為例,把陣列的位址作為記憶體基位址,外設基位址作為串列埠1的資料暫存器位址。

那麼它的工作流程是怎麼樣的呢?以儲存器位址增量模式為例

首先從陣列的最低位開始傳輸,傳完乙個後,位址自動加1,獲取當前位址資料。這樣每次傳完一次,位址加1,一直到傳輸結束。

迴圈模式的話:比如100個資料傳輸完成後,它又會重頭開始繼續傳輸。

一次傳輸最大資料量位65535.可以知道傳輸進度。

每個dma通道都可以在傳輸過半,傳輸完成,傳輸錯誤是產生中斷。可以通過設定暫存器的不同位來開啟這些終端。

STM32 DMA的學習筆記

dma配置參考stm32學習手冊即可 函式說明 dma1的x通道初始化,可完成儲存器到儲存器 外設到儲存器 如串列埠1的接收 儲存器到外設的初始化 如串列埠1的傳送 引數說明 dma1 channe1x dma1第x通道 x 1.7 cpar 外設位址,cmap 儲存器位址 turn 傳輸方向,0 ...

STM32 DMA原理特性

dma,直接儲存器訪問。dma 傳輸方式無需 cpu 直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,通過硬體為 ram 與 i o 裝置開闢一條直接傳送資料的通路,能使 cpu 的效率大為提高。stm32f4 最多有 2 個 dma 控制器 dma1 和 dma2 共 16 個資料流...

Stm32 DMA配置 庫函式筆記

1.簡介 1 dma,全稱為 direct memory access,即直接儲存器訪問。實際上,dma作為乙個硬體電路,實現在無cpu干預的情況下,記憶體 memory 和外設之間的聯絡 2 stm32最多有兩個dma的控制器,dma1有7個通道,dma2有5個通道,也存在乙個仲裁器來判斷優先順序...