0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的DMA簡(jiǎn)介

CHANBAEK ? 來源:頭條號(hào)科G棧 ? 作者:頭條號(hào)科G棧 ? 2023-03-23 10:10 ? 次閱讀

DMAMCU一個(gè)非常重要的部分,它提供了一種直接、高效、快速的方式來傳輸數(shù)據(jù),而不需要CPU的介入,大大提高了MCU的工作效率。

我們先來看一下沒有DMA,數(shù)據(jù)是怎么流動(dòng)的。

poYBAGQbtPqAD6MIAAFSEzRZLjg412.jpg

如圖所示,紅色線表示外設(shè)數(shù)據(jù)的讀寫,藍(lán)色線表示內(nèi)存數(shù)據(jù)的讀寫。數(shù)據(jù)必須要先加載到內(nèi)核,然后再通過內(nèi)核寫入外設(shè)或內(nèi)存,讀寫操作都需要內(nèi)核做很多工作,雖然C代碼可能就一行語句,但是匯編可不止一條。我們知道在程序執(zhí)行的過程中這樣的數(shù)據(jù)傳輸操作非常頻繁,如果都這樣處理,內(nèi)核將花費(fèi)太多時(shí)間在搬運(yùn)數(shù)據(jù)上,無法集中精力處理更為重要的計(jì)算和中斷事件,處理速度和效率就會(huì)非常的低。

使用DMA后,數(shù)據(jù)的流動(dòng)變成了下圖所示方式。

pYYBAGQbtPyAGVjeAAFMVBOrMIk055.jpg

數(shù)據(jù)的傳輸工作由DMA控制器接管,假如我們配置由外設(shè)到內(nèi)存,那么外設(shè)的數(shù)據(jù)一旦準(zhǔn)備好,DMA就會(huì)自動(dòng)將數(shù)據(jù)搬運(yùn)到內(nèi)存,內(nèi)核只需要直接讀取內(nèi)存就可以獲取到最新的外設(shè)數(shù)據(jù)。反過來也是同樣的道理。整個(gè)傳輸過程不需要內(nèi)核的參與,如果數(shù)據(jù)量很大,DMA的優(yōu)勢(shì)會(huì)非常明顯。

內(nèi)核有點(diǎn)像一個(gè)工廠,SRAM類似倉庫,DMA就是物流。如果沒有“物流”,這個(gè)“工廠”就需要自己進(jìn)貨、入庫、出庫、發(fā)貨,而如果有了“物流”,“工廠”就不需要進(jìn)貨和發(fā)貨了,這對(duì)“工廠”的生產(chǎn)效率有質(zhì)的提升。

STM32中,DMA控制器有多個(gè)通道,每個(gè)通道對(duì)應(yīng)某幾個(gè)外設(shè),使用前需要指定好該通道給哪個(gè)外設(shè)使用。

poYBAGQbtP2AJYSqAAG1fDj9AJ4763.jpg

具體使用DMA需要做下面的配置操作:

1、 使能DMA時(shí)鐘

2、 配置外設(shè)和內(nèi)存地址

3、 配置傳輸?shù)臄?shù)據(jù)個(gè)數(shù)

4、 配置通道的優(yōu)先級(jí)

5、 配置數(shù)據(jù)傳輸方向

6、 配置circular模式或normal模式

7、 配置外設(shè)/內(nèi)存incremented模式

8、 配置外設(shè)/內(nèi)存數(shù)據(jù)位數(shù)

9、 配置中斷,編寫中斷服務(wù)程序

10、使能DMA傳輸

之后內(nèi)核只需要等待DMA中斷的到來即可,然后讀寫內(nèi)存數(shù)據(jù)。DMA有四種中斷標(biāo)志:全局中斷、傳輸完成中斷、半傳輸中斷、傳輸錯(cuò)誤中斷,清除全局中斷標(biāo)志可以將所有的中斷標(biāo)志位清零。

DMA的外設(shè)和內(nèi)存的數(shù)據(jù)位數(shù)可以不同,不同的位數(shù)傳輸最終的結(jié)果如下表所示:

pYYBAGQbtP6AAi4xAAOZRJWWnyo809.jpg

使用STM32的LL庫的代碼如下:

1、 打開時(shí)鐘

poYBAGQbtP-Af8isAAAMUGJTKlA533.jpg

2、 配置地址

pYYBAGQbtQCAbcZQAAAWNjWCxhQ117.jpg

這里ADC是外設(shè)。

3、 數(shù)據(jù)個(gè)數(shù)

poYBAGQbtQGASknqAAALoj9pYTY610.jpg

4、 優(yōu)先級(jí)

pYYBAGQbtQKAfgTtAAAM0Lg0jf8585.jpg

5、 傳輸方向

poYBAGQbtQOASBd6AAAKavDp5BE266.jpg

6、 Circular模式

pYYBAGQbtQSAJe2XAAAM1ldykzs279.jpg

7、 Incremented模式

poYBAGQbtQWAXAIvAAAV3IViX-w397.jpg

這里外設(shè)只有一個(gè)寄存器,所以不需要increment,內(nèi)存是一個(gè)數(shù)組,所以要increment。

8、 數(shù)據(jù)位

pYYBAGQbtQWAKEb4AAAWoMx89PE209.jpg

數(shù)據(jù)位可以是8位(BYTE)、16位(HALFWORD)、32位(WORD)

9、 中斷相關(guān)

pYYBAGQbtQeAegXoAABPpET0jbM275.jpg

pYYBAGQbtQeAAyYbAACtyp7hOPE242.jpg

10、 使能DMA

pYYBAGQbtQiAStVQAAAKeB7xgNo875.jpg

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16665

    瀏覽量

    347756
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10698

    瀏覽量

    209343
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2902

    瀏覽量

    73536
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352452
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    552

    瀏覽量

    99927
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32實(shí)例教程-DMA實(shí)驗(yàn)

    在前面我們提到過 DMA,這一章我們就來學(xué)習(xí) STM32F1 的DMA 使用。要實(shí)現(xiàn)的功能是:通過 K_UP 按鍵控制 DMA 串口 1 數(shù)據(jù)的傳送,在傳送過程中讓 D2 指示燈不斷閃
    發(fā)表于 05-24 09:20 ?1022次閱讀
    <b class='flag-5'>STM32</b>實(shí)例教程-<b class='flag-5'>DMA</b>實(shí)驗(yàn)

    DMA簡(jiǎn)介

    DMA簡(jiǎn)介,STM32學(xué)習(xí)心得
    發(fā)表于 04-20 22:14

    ADC與DMA簡(jiǎn)介

    文章目錄一、準(zhǔn)備工具二、前置知識(shí)1.ADC簡(jiǎn)介2.DMA簡(jiǎn)介2.STM32Cubemx配置1.新建工程2.時(shí)鐘源選擇及時(shí)鐘樹配置3.時(shí)基選擇調(diào)試接口選擇4.配置ADC采集1.選擇要配置
    發(fā)表于 01-19 06:54

    STM32DMA簡(jiǎn)介

    1、DMA簡(jiǎn)介DMA(Direct Memory Access) :直接存儲(chǔ)器存取,是單片機(jī)的一個(gè)外設(shè),它的主要功能是用來搬數(shù)據(jù),但是不需要占用 CPU,即在傳輸數(shù)據(jù)的時(shí)候, CPU 可以干其他
    發(fā)表于 01-26 08:27

    STM32 DMA應(yīng)用與性能分析

    STM32 DMA應(yīng)用與性能分析 學(xué)習(xí)資料,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-06 17:33 ?11次下載

    1. stm32 mcu簡(jiǎn)介

    1. stm32 mcu簡(jiǎn)介 1.1 stm32 mcu結(jié)構(gòu) 1.2 STM32 MCU存儲(chǔ)器映像 1.3 STM32 MCU系統(tǒng)時(shí)鐘樹 1
    發(fā)表于 10-25 19:06 ?15次下載
    1. <b class='flag-5'>stm32</b> mcu<b class='flag-5'>簡(jiǎn)介</b>

    基于STM32F407的DMA解析-ADC單通道DMA讀取數(shù)據(jù)

    一:什么是DMA?1.DMA簡(jiǎn)介DMA,全稱為:Direct Memory Access,即直接存儲(chǔ)器訪問。DMA 傳輸方式無需 CPU
    發(fā)表于 11-25 09:51 ?5次下載
    基于<b class='flag-5'>STM32</b>F407的<b class='flag-5'>DMA</b>解析-ADC單通道<b class='flag-5'>DMA</b>讀取數(shù)據(jù)

    STM32學(xué)習(xí)筆記(7)——DMA直接存儲(chǔ)器訪問

    STM32學(xué)習(xí)筆記(7)——DMA直接存儲(chǔ)器訪問一、DMA簡(jiǎn)介二、DMA功能框圖1. DMA請(qǐng)求
    發(fā)表于 12-02 14:06 ?3次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)筆記(7)——<b class='flag-5'>DMA</b>直接存儲(chǔ)器訪問

    STM32F1開發(fā)指南筆記32----DMA

    本章介紹STM32F1的DMA。在本章中,我們將利用STM32F1的DMA來實(shí)現(xiàn)串口數(shù)據(jù)傳送,并在TFTLCD模塊上顯示當(dāng)前的傳送進(jìn)度。當(dāng)CPU初始化這個(gè)傳輸動(dòng)作,傳輸動(dòng)作本身是由
    發(fā)表于 12-04 19:21 ?20次下載
    <b class='flag-5'>STM32</b>F1開發(fā)指南筆記32----<b class='flag-5'>DMA</b>

    STM32串口DMA發(fā)送數(shù)據(jù)

    一、DMA簡(jiǎn)介二、實(shí)驗(yàn)流程了解了DMA之后,我們做一個(gè)實(shí)驗(yàn):STM32采用串口DMA方式,用115200bps或更高速率向上位機(jī)連續(xù)發(fā)送數(shù)據(jù)
    發(fā)表于 12-07 10:36 ?22次下載
    <b class='flag-5'>STM32</b>串口<b class='flag-5'>DMA</b>發(fā)送數(shù)據(jù)

    Stm32DMA直接內(nèi)存讀取(2021-07-30)

    Stm32DMA直接內(nèi)存讀取1.DMA簡(jiǎn)介DMA*(Direct Memory Access controller)*:可用于為CPU減
    發(fā)表于 12-09 15:36 ?10次下載
    <b class='flag-5'>Stm32</b>之<b class='flag-5'>DMA</b>直接內(nèi)存讀?。?021-07-30)

    STM32基礎(chǔ)-----DMA

    STM32基礎(chǔ)-------DMA
    發(fā)表于 12-20 19:35 ?11次下載
    <b class='flag-5'>STM32</b>基礎(chǔ)-----<b class='flag-5'>DMA</b>

    STM32之串口DMA接收不定長(zhǎng)數(shù)據(jù)

    目錄STM32之串口DMA接收不定長(zhǎng)數(shù)據(jù)引言DMA簡(jiǎn)介什么是DMASTM32
    發(fā)表于 12-24 19:03 ?30次下載
    <b class='flag-5'>STM32</b>之串口<b class='flag-5'>DMA</b>接收不定長(zhǎng)數(shù)據(jù)

    DMA】淺談STM32F4xx的DMA(附初始化代碼)

    又到年末,事情總是格外的多,12月竟然沒有一點(diǎn)產(chǎn)出是不行的,今天就來分析一下DMA的作用【下附DMA映射表,可用于開發(fā)者自查】 簡(jiǎn)介 DMA 即 Direct Memory Acces
    發(fā)表于 01-17 09:59 ?2次下載
    【<b class='flag-5'>DMA</b>】淺談<b class='flag-5'>STM32</b>F4xx的<b class='flag-5'>DMA</b>(附初始化代碼)

    STM32F1的DMA使用

    傳送完成。D1 指示燈閃爍提示系統(tǒng)正常運(yùn)行。學(xué)習(xí)時(shí)可以參考《STM32F10x 中文參考手冊(cè)》-10 DMA 控制器(DMA)章節(jié)。 DMA 簡(jiǎn)介
    的頭像 發(fā)表于 06-22 10:23 ?2415次閱讀
    <b class='flag-5'>STM32</b>F1的<b class='flag-5'>DMA</b>使用