天天看點

【STM32】DMA

  介紹      

        DMA,全稱為: Direct Memory Access,即直接存儲器通路。 DMA 傳輸方式無需 CPU 直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢複現場的過程,通過硬體為 RAM 與 I/O 裝置

開辟一條直接傳送資料的通路, 能使 CPU 的效率大為提高。

【STM32】DMA

DMA1 有 7 個通道。 DMA2 有 5個通道。每個通道專門用來管理來自于一個或多個外設對存儲器通路的請求。還有一個仲裁起來協調各個 DMA 請求的優先權。

 特性

STM32 的 DMA 有以下一些特性:

●每個通道都直接連接配接專用的硬體 DMA 請求,每個通道都同樣支援軟體觸發。這些功能

通過軟體來配置。

●在七個請求間的優先權可以通過軟體程式設計設定(共有四級:很高、高、中等和低),假如

在相等優先權時由硬體決定(請求 0 優先于請求 1,依此類推) 。

●獨立的源和目标資料區的傳輸寬度(位元組、半字、全字),模拟打包和拆包的過程。源和

目标位址必須按資料傳輸寬度對齊。

●支援循環的緩沖器管理

●每個通道都有 3 個事件标志(DMA 半傳輸, DMA 傳輸完成和 DMA 傳輸出錯),這 3 個

事件标志邏輯或成為一個單獨的中斷請求。

●存儲器和存儲器間的傳輸

●外設和存儲器,存儲器和外設的傳輸

●閃存、 SRAM、外設的 SRAM、 APB1 APB2 和 AHB 外設均可作為通路的源和目标。

●可程式設計的資料傳輸數目:最大為 65536

【STM32】DMA
【STM32】DMA

傳輸參數

1.資料的源位址

2.資料傳輸的目标位址

3.資料的傳輸量

4.傳輸次數的傳輸模式

當傳輸量不為0時,DMA啟動資料傳輸,當剩餘傳輸量為0時,便會結束DMA傳輸。

DMA傳輸模式

1.正常模式

當一次DMA資料傳輸完成隻會便會停止DMA傳輸

2.循環傳輸模式

當一次傳輸完成之後,DMA自動重裝載,進行下一次的資料傳輸

3.存儲器到存儲器模式(不能和循環模式同時使用)

傳輸優先級:仲裁器

【STM32】DMA

仲裁器根據通道請求的優先級來優先啟動外設/儲存器的通路

● 軟體:每個通道的優先權可以在DMA_CCRx寄存器中設定,有4個等級:

─ 最高優先級

─ 高優先級

─ 中等優先級

─ 低優先級

● 硬體:如果2個請求有相同的軟體優先級,則較低編号的通道比較高編号的通道有較高的優

先權。舉個例子,通道2優先于通道4。

注意: 在大容量産品和互聯型産品中, DMA1控制器擁有高于DMA2控制器的優先級

DMA傳輸通道

每個通道都可以在有固定位址的外設寄存器和存儲器位址之間執行DMA傳輸。DMA傳輸的資料 量是可程式設計的,大達到65535。包含要傳輸的資料項數量的寄存器,在每次傳輸後遞減。

指針遞增模式

根據設定,外設和存儲器指針在每次傳輸後可以自動向後遞增或保持常量。

中斷

由三種中斷事件

【STM32】DMA

cubeMX設定

【STM32】DMA
【STM32】DMA

 如果設定為遞增,那麼下一次傳輸的時候位址便會增加Data Width位元組

序列槽發送資料時将資料不斷存進固定外設位址,外設的位址是不遞增的

記憶體裡存的是要發送的資料,就要遞增保證資料發出

DMA配置

1.使能DMA時鐘

2.初始化DMA

3.使能外設DMA

4.使能DMA通道傳輸

5.檢視傳輸狀态

函數庫

HAL_UART_Transmit();序列槽發送資料,使用逾時管理機制

HAL_UART_Receive();序列槽接收資料,使用逾時管理機制

HAL_UART_Transmit_IT();序列槽中斷模式發送

HAL_UART_Receive_IT();序列槽中斷模式接收

HAL_UART_Transmit_DMA();序列槽DMA模式發送

HAL_UART_Transmit_DMA();序列槽DMA模式接收

HAL_UART_DMAPause() 暫停序列槽DMA

HAL_UART_DMAResume(); 恢複序列槽DMA

HAL_UART_DMAStop(); 結束序列槽DMA