1.簡介
<1>:dma,全稱為:direct memory access,即直接儲存器訪問。實際上,dma作為乙個硬體電路,實現在無cpu干預的情況下,記憶體(memory)和外設之間的聯絡
<2>:stm32最多有兩個dma的控制器,dma1有7個通道,dma2有5個通道,也存在乙個仲裁器來判斷優先順序(共四級 很高 高 中 低)
<3>:dma的通道連線著專用硬體的dma請求,可以通過軟體來配置
<4>:在dma中,每個通道存在著三個事件標誌(半傳輸,傳輸完成,傳輸失敗),通過讀取其中的0/1判斷是否配置成功
<5>:可以實現外設(peripheral)和內部儲存器(memory)之間的傳輸(單向,可相互轉換)
<6>:可以實現記憶體到記憶體之間的傳輸(m2m)
2.配置過程
1.實現dma時鐘使能
rcc_ahbperiphclockcmd(rcc_ahbperiph_dma1,enable);//使能dma1
2.實現dma的初始化
dma_inittypedef dma_initstruct;
dma1_mem_len=***tr;//設定每一次的資料傳輸量
dma_deinit(dma_chx);//重新整理設定
//開始初始化
dma_initstruct.dma_buffersize=***tr;//資料傳輸量
dma_initstruct.dma_dir=dma_dir_peripheraldst;//director(目標) dst(外設為目標) src(外設為源頭)
dma_initstruct.dma_m2m= dma_m2m_disable;//不採用儲存器到儲存器
dma_initstruct.dma_memorybaseaddr=cmar;//設定儲存器位址
dma_initstruct.dma_memorydatasize=dma_peripheraldatasize_byte;//8位
dma_initstruct.dma_memoryinc=dma_memoryinc_enable;//設定增量模式
dma_initstruct.dma_mode=dma_mode_normal;//設定迴圈模式
dma_initstruct.dma_peripheralbaseaddr=cpar;
dma_initstruct.dma_peripheraldatasize=dma_peripheraldatasize_byte;//8位
dma_initstruct.dma_peripheralinc=dma_peripheralinc_disable;
dma_initstruct.dma_priority=dma_priority_medium;//設定優先順序
dma_init(dma_chx,&dma_initstruct);//設定結構體
}
3.開啟傳輸過程(注意實現dma資料值的重新整理)
void mydma_enable(dma_channel_typedef*dma_chx)
注:對於dma初始化詳解:
typedef struct
dma_inittypedef;
1.第乙個引數 dma_peripheralbaseaddr 用來設定 dma 傳輸的外設基位址,比如要進行串列埠 dma 傳輸,那麼外設基位址為串列埠接受傳送資料儲存器 usart1->dr 的位址,表示方法為 &usart1->dr,在傳輸之前要設定外設和記憶體的位址,一般是以指標的形式
第二個引數dma_memorybaseaddr為記憶體基位址,也就是我們存放dma傳輸資料的記憶體位址。
第三個引數 dma_dir 設定資料傳輸方向,決定是從外設讀取資料到記憶體還送從記憶體讀取數 據傳送到外設,也就是外設是源地還是目的地,dst(distraction 目標),sre(source 源頭)所以選擇值為 dma_dir_peripheraldst。
第四個引數 dma_buffersize 設定一次傳輸資料量的大小,(不超過65535)
第六個引數 dma_memoryinc 設定傳輸資料時候記憶體位址是否遞增。這個引數和 dma_peripheralinc 意思接近,只不過針對的是記憶體。
第七個引數 dma_peripheraldatasize 用來設定外設的的資料長度是為位元組傳輸(8bits), 半字傳輸(16bits)還是字傳輸(32bits),這裡我們是 8 位位元組傳輸,所以值設定為 dma_peripheraldatasize_byte。
第八個引數 dma_memorydatasize 是用來設定記憶體的資料長度,和第七個引數意思接近,這 裡我們同樣設定為位元組傳輸 dma_memorydatasize_byte
STM32 DMA 學習筆記(一)
dma 傳輸將資料從乙個位址空間複製到另外乙個位址空間。不需要cpu干涉 傳統的資料傳輸 位址a cpu 位址b dma資料傳輸 位址a 位址b 這樣也就為cpu減負了 含有兩個通道,dma1有7個通道,dma2有5個通道。每一乙個通道都可以連線乙個外設。那麼就有乙個仲裁器,來處理了通道間的優先順序...
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 個資料流...