日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32之DMA原理

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32之DMA原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、DMA簡介

1、DMA簡介

  DMA(Direct Memory Access:直接內存存取)是一種可以大大減輕CPU工作量的數據轉移方式。

  CPU有轉移數據、計算、控制程序轉移等很多功能,但其實轉移數據(尤其是轉移大量數據)是可以不需要CPU參與。比如希望外設A的數據拷貝到外設B,只要給兩種外設提供一條數據通路,再加上一些控制轉移的部件就可以完成數據的拷貝。

  DMA就是基于以上設想設計的,它的作用就是解決大量數據轉移過度消耗CPU資源的問題。有了DMA使CPU更專注于更加實用的操作--計算、控制等。

2、DMA的工作原理 

  DMA的作用就是實現數據的直接傳輸,而去掉了傳統數據傳輸需要CPU寄存器參與的環節,主要涉及四種情況的數據傳輸,但本質上是一樣的,都是從內存的某一區域傳輸到內存的另一區域(外設的數據寄存器本質上就是內存的一個存儲單元)。四種情況的數據傳輸如下:

  • 外設到內存
  • 內存到外設
  • 內存到內存
  • 外設到外設

  當用戶將參數設置好,主要涉及源地址、目標地址、傳輸數據量這三個,DMA控制器就會啟動數據傳輸,傳輸的終點就是剩余傳輸數據量為0(循環傳輸不是這樣的)。換句話說只要剩余傳輸數據量不是0,而且DMA是啟動狀態,那么就會發生數據傳輸。  

3、DMA是否影響CPU的運行

  在X86架構系統中,當DMA運作時(假設我們從磁盤拷貝一個文件到U盤),DMA實際上會占用系統總線周期中的一部分時間。也就是說,在DMA未開啟前,系統總線可能完全被CPU使用;當DMA開啟后,系統總線要為DMA分配一定的時間,以保證DMA和CPU同時運作。那么顯然,DMA會降低CPU的運行速度。

  在STM32控制器中,芯片采用Cortex-M3架構,總線結構有了很大的優化,DMA占用另外的總線,并不會與CPU的系統總線發生沖突。也就是說,DMA的使用不會影響CPU的運行速度。

二、STM32的DMA結構

1、DMA的主要特性

● 12個 獨立的可配置的通道(請求)DMA1有7個通道,DMA2 有5個通道?
● 每個通道都直接連接專用的硬件DMA請求,每個通道都同樣支持軟件觸發。這些功能通過
軟件來配置。?
● 在七個請求間的優先權可以通過軟件編程設置(共有四級:很高、高、中等和低),假如在相
等優先權時由硬件決定(請求0優先于請求1,依此類推) 。?
● 獨立的源和目標數據區的傳輸寬度(字節、半字、全字),模擬打包和拆包的過程。源和目標
地址必須按數據傳輸寬度對齊。?
● 支持循環的緩沖器管理?
● 每個通道都有3個事件標志(DMA 半傳輸,DMA傳輸完成和DMA傳輸出錯),這3個事件標志
邏輯或成為一個單獨的中斷請求。?
●?存儲器和存儲器間的傳輸?
●?外設和存儲器,存儲器和外設的傳輸?
● 閃存、SRAM 、外設的SRAM 、APB1 APB2和AHB外設均可作為訪問的源和目標。?
● 可編程的數據傳輸數目:最大為65536

下面為功能框圖:

  

2、兩個DMA控制器結構

① DMA1 controller

② DMA2 controller

3、DMA寄存器列表

① 中斷類

DMA_ISR:   DMA中斷狀態寄存器

DMA_IFCR:  DMA中斷標志位清除寄存器

說明:  DMA1、DMA2分別有一組寄存器。

② 控制傳輸類

DMA_CCRx:   DMA通道x配置寄存器 

DMA_CNDTRx:  DMA通道x數據數量寄存器

DMA_CPARx:  ?DMA通道x外設地址寄存器

DMA_CMARx:  DMA通道x內存地址寄存器

說明: ? ?

1> 每一個通道都有一組寄存器。

2> DMA_CPARx、DMA_CMARx是沒有差別的,它們都可以存放外設的地址、內存的地址。DMA_CPARx、DMA_CMARx只不過起得名字有差別而已。

4、STM32的DMA工作特點

① DMA進行數據傳輸的必要條件

  • 剩余傳輸數據量大于0
  • DMA通道傳輸使能
  • 通道上DMA數據傳輸有事件請求

 ?前兩者都好理解,對于第三點確實需要詳細的解釋,請看下邊的三條。

② 外設到XX方向的傳輸

  假設是ADC到存儲器的數據傳輸,顯然ADC的DMA傳輸的源地址是ADC的數據寄存器。并不是說只要DMA通道傳輸使能后,就立即進行數據傳輸。只有當一次ADC轉化完成,ADC的DMA通道的傳輸事件有效,DMA才會從ADC的數據寄存器讀出數據,寫入目的地址。當DMA在讀取ADC的數據寄存器時,同時使ADC的DMA通道傳輸事件無效。顯然,要等到下一次ADC轉換完成后,才能啟動再一次的數據傳輸。

③存儲器對XX的DMA傳輸

  因為數據是準備好的,不像ADC還需要等待數據到位。所以,不需要對應通道的事件。只要使能DMA數據傳輸就一直傳輸,直到達到設定的傳輸量。

example:

1.內存到內存

  DMA傳輸請求一直有效

2.內存到串口?

  DMA傳輸請求一直有效

一種解釋:

  存儲器對存儲器的置位,就相當于相應通道的事件有效。?對應通道的事件有效和存儲器對存儲器的置位,就是傳輸的觸發位。每次傳輸的事件置位一次,完成一次傳輸。如果是由外設引發的DMA傳輸,則傳輸完成后,相應傳輸事件會置為無效,而存儲器對存儲器的傳輸,則一次傳輸完成后,相應事件一直有效,直至完成設定的傳輸量。 ?              摘自:http://bbs.21ic.com/icview-400841-1-1.html

④外設以DMA方式工作時,能否再以軟件方式進行操作?

  有一點是肯定的,當外設以DMA方式正在數據傳輸時,不可能再相應CPU的軟件控制命令,否則這不符合邏輯。

  但是,倘若外設僅僅配置成DMA工作方式,但是DMA請求并未產生,數據傳輸并沒有進行。此時,軟件控制命令仍然能夠對外設進行控制。這是筆者在串口以DMA方式發送數據情形下,所得到的測試結論。?

總結

以上是生活随笔為你收集整理的STM32之DMA原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。