Stm32F103R6之DMA

概述

直接存儲器存取(DMA)用來提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸。無須CPU干預,數據可以通過DMA快速地移動,這就節省了CPU的資源來做其他操作。

每個DMA通道專門用來管理來自於一個或多個外設對存儲器訪問的請求,還有一個仲裁器來協調各個DMA請求的優先權。

DMA主要特性

  • 支持循環的緩衝器管理 。
  • 每個通道都有3個事件標誌(DMA半傳輸、DMA傳輸完成和DMA傳輸出錯),這3個事件標誌邏輯或成為一個單獨的中斷請求。
  • 存儲器和存儲器間的傳輸。
  • 外設和存儲器、存儲器和外設之間的傳輸。
  • 閃存、SRAM、外設的SRAM、APB1、APB2和AHB外設均可作為訪問的源和目標。
  • 可編程的數據傳輸數目,最大為65535。
Stm32F103R6之DMA

圖 1DMA框圖

配置步驟

1、開啟DMA模塊時鐘,開啟要使用DMA通道的外設的時鐘;

2、按照配置外設的一般步驟配置外設,包括相關IO的配置,外設工作方式的配置等;

3、調用外設的DMA配置命令函數配置外設是接收數據通道還是發送數據通道使用DMA;

4、配置相應的DMA通道,在STM32中不同的DMA通道支持的外設通道不同,所以要查閱STM32的參考手冊,確定要配置的DMA通道,配置過程如下:

4.1、配置DMA通道的工作方式,比如外設地址,內存地址,傳輸的數據寬度和數據量等等;

4.2、配置DMA通道的中斷以及中斷處理函數。

使用DMA時需要注意的問題

1、不同的DMA通道支持的外設不同,例如SPI1的DMA通道是DMA1_Channel3,而SPI2的DMA通道是DMA1_Channel5。

2、DMA使用場景一般是,傳輸的數據量和傳輸的時間確定。例如使用SPI或者串口發送字節數確定的數據,而通過中斷方式接受數據的場景不適合DMA,例如使用中斷的方式通過串口接收數據時,因為每次有數據到來的時候,串口中斷都會打斷CPU的運行,CPU要介入處理且一般情況下不知道發送方發送的數據量是多少,所以不好配置DMA。


分享到:


相關文章: