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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

詳解STM32的DMA功能

CHANBAEK ? 來源:頭條號秋天滴風 ? 作者:頭條號秋天滴風 ? 2023-04-25 09:49 ? 次閱讀

本文將介紹STM32DMA功能;

①DMA介紹

②STM32F4-DMA功能框圖及詳解

③DMA的增量設置、模式、中斷

①DMA介紹

DMA是direct memory access的縮寫,即直接存儲器訪問;DMA是通過硬件在RAM和IO設備之間開辟一條通道,使得采集到的數(shù)據(jù)直接存到RAM,使得數(shù)據(jù)的傳輸不需要經(jīng)過CPU讀數(shù)據(jù)再將數(shù)據(jù)放入RAM、這樣極大提高了CPU的效率。

②STM32F4-DMA功能框圖及詳解

wKgZomRHMaKAQh-vAAFYKSnFrwM368.jpg

外設通道:

wKgaomRHMaOAX9sxAACx8iuP1NQ353.jpg

STM32F4具有2個DMA控制器,每個DMA控制器有8個數(shù)據(jù)流,每個數(shù)據(jù)流可以從8個外設請求中選擇一個作為該數(shù)據(jù)流的外設通道;外設通道就是數(shù)據(jù)流的源地址或者目標地址;外設通道的選擇可以通過DMA數(shù)據(jù)流x的配置寄存器DMA_SxCR的CHSEL[2:0]位配置;

以下是DMA1的外設通道表:

wKgZomRHMaOAQ6E4AAIHP_-spxg373.jpg

數(shù)據(jù)流仲裁:當同時存在多個數(shù)據(jù)流在工作時,需要數(shù)據(jù)流仲裁器管理判斷數(shù)據(jù)流的優(yōu)先傳輸;數(shù)據(jù)流傳輸?shù)膬?yōu)先級可以通過配置控制寄存器DMA_SxCR的PL[1:0]位,來選擇優(yōu)先級為非常高、高、中、低;當多個數(shù)據(jù)流的優(yōu)先級相同時,數(shù)據(jù)流的編號越低、優(yōu)先級越高;

數(shù)據(jù)FIFO:

每個數(shù)據(jù)流都有一個4字(16字節(jié)、4個32位寄存器)FIFO(先進先出存儲器緩沖區(qū)),DMA的傳輸具有FIFO模式和直接模式;

直接模式:當出現(xiàn)DMA請求時,會進行數(shù)據(jù)的傳輸?shù)酱鎯ζ?;若DMA的請求配置設置為存儲器到外設模式傳輸數(shù)據(jù)時,DMA會將數(shù)據(jù)從存儲器預加載到FIFO中、當外設觸發(fā)DMA請求時數(shù)據(jù)立即傳輸給外設;

FIFO模式:當數(shù)據(jù)量達到一定數(shù)量時,進行數(shù)據(jù)的傳輸;可以通過配置DMA_SxFCR的FTH[1:0]位來設置FIFO的閾值級別為FIFO的1/4 、2/4 、3/4。如果數(shù)據(jù)量達到閾值則FIFO中的數(shù)據(jù)將被傳輸?shù)侥繕说刂罚?/span>

4-5、外設端口、存儲器端口:

wKgaomRHMaSAA87jAAHRHPAYMLE136.jpg

DMA1的控制器的存儲器端口接在AHB總線上,外設端口接在APB1外設上;所以DMA1可以控制數(shù)據(jù)在外設與存儲器之間傳輸,但不能實現(xiàn)數(shù)據(jù)在存儲器與存儲器之間傳輸;

DMA2的控制器的存儲器端口和外設端口都有接到AHB總線上說以與DMA1相比,DMA2比DMA1多一個數(shù)據(jù)在存儲器與存儲器之間傳輸?shù)哪J剑?/p>

③DMA的增量設置、模式、中斷

DMA的傳輸模式:DMA的傳輸模式有外設與外設之間的傳輸、外設與存儲器之間的傳輸、存儲器與存儲器之間的傳輸;模式的選擇可以通過DMA_SxCR寄存器的DIR[1:0]位控制;

DMA傳輸?shù)脑?、目的、長度:

外設寄存器地址在DMA_SxPA寄存器中設置;

存儲器地址在DMA_SxM0AR寄存器中設置;

數(shù)據(jù)的傳輸量在寄存器DMA_CNDTRx中設置

傳輸數(shù)據(jù)的位寬在DMA_SxCR寄存器的PSIZE MSIZE位設置(盡量設置為一致)

DMA的增量設置:

通過設置DMA_SxCR寄存器中的PINC MINC位的狀態(tài),可以使得外設和存儲器在每次數(shù)據(jù)傳輸后地址遞增或地址不變;當選擇為遞增模式后,地址的增量就是數(shù)據(jù)的位寬

循環(huán)模式:循環(huán)模式用于循環(huán)處理緩存區(qū)和連續(xù)的數(shù)據(jù)傳輸(ADC的掃描模式),可以通過DMA_SxCR寄存器中的CIRC位來選擇為循環(huán)模式;循環(huán)模式下當一輪數(shù)據(jù)傳輸完成后,下一次開始的地址和上一次的數(shù)據(jù)傳輸?shù)刂芬粯樱?/p>

DMA的單次傳輸和突發(fā)傳輸:

DMA有單次傳輸和突發(fā)傳輸,DMA控制器可以產(chǎn)生4、8、16個節(jié)拍的增量突發(fā)傳輸(原本一次傳輸一個數(shù)據(jù)位寬,4個節(jié)拍就是4個數(shù)據(jù)位寬一次性一起傳輸);突發(fā)傳輸?shù)拇笮⊥ㄟ^DMA_SxCR寄存器中的MBURST[1:0]和PBURST[1:0]位對兩個AHB端口獨立配置;

在突發(fā)傳輸下、AHB的總線仲裁器會一直授權(quán)給DMA主總線AHB的傳輸會鎖定其它總線暫時使用不了,使得突發(fā)傳輸不可被打斷從而保證了數(shù)據(jù)的一致性;

每個DMA數(shù)據(jù)流在傳輸?shù)臅r候可以觸發(fā)以下中斷:

wKgZomRHMaSAD6olAADkFwmQoDA028.jpg

在DMA_xISR中可以設置、查看狀態(tài);

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

    關(guān)注

    38

    文章

    7517

    瀏覽量

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

    關(guān)注

    68

    文章

    10889

    瀏覽量

    212373
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

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

    關(guān)注

    3

    文章

    566

    瀏覽量

    100741
  • STM32F4
    +關(guān)注

    關(guān)注

    3

    文章

    194

    瀏覽量

    28104
收藏 人收藏

    評論

    相關(guān)推薦

    STM32CubeMx的初始配置順序是怎么影響DMA功能

    ?經(jīng)常有STM32開發(fā)者基于STM32CubeMx進行配置并生成基于HAL庫的初始化代碼,當涉及到DMA功能時,發(fā)現(xiàn)DMA
    的頭像 發(fā)表于 10-13 10:14 ?3100次閱讀
    <b class='flag-5'>STM32</b>CubeMx的初始配置順序是怎么影響<b class='flag-5'>DMA</b><b class='flag-5'>功能</b>的

    STM32實例教程-DMA實驗

    在前面我們提到過 DMA,這一章我們就來學習 STM32F1 的DMA 使用。要實現(xiàn)的功能是:通過 K_UP 按鍵控制 DMA 串口 1 數(shù)
    發(fā)表于 05-24 09:20 ?1269次閱讀
    <b class='flag-5'>STM32</b>實例教程-<b class='flag-5'>DMA</b>實驗

    STM32 DMA使用詳解

    DMASTM32 DMA使用詳解1、畫圖Cortex-M3內(nèi)部結(jié)構(gòu)圖,要體現(xiàn)相應的總線,并標注其作用。Icode:程序存在Flash中,通過ICode(Instruction Code)總線
    發(fā)表于 08-12 07:01

    什么是DMA?DMA有何功能

    stm32F1DMA詳解1、問題:什么是DMA?回答:DMA,全稱為:Direct Memory Access,即直接存儲器訪問簡而言之,DMA
    發(fā)表于 12-09 07:35

    STM32串口DMA問題詳解

    昨天晚上在STM32串口DMA的問題上糾結(jié)了好長時間,所以今天上午寫篇博客來談談我對串口DMA發(fā)送的理解。
    的頭像 發(fā)表于 10-27 16:16 ?8469次閱讀
    <b class='flag-5'>STM32</b>串口<b class='flag-5'>DMA</b>問題<b class='flag-5'>詳解</b>

    STM32F1的ADC2如何使用DMA功能 USART過載錯誤Overrun error

    STM32F1的ADC2如何使用DMA功能,USART過載錯誤Overrun error
    的頭像 發(fā)表于 03-14 14:42 ?8169次閱讀
    <b class='flag-5'>STM32</b>F1的ADC2如何使用<b class='flag-5'>DMA</b><b class='flag-5'>功能</b> USART過載錯誤Overrun error

    STM32的ADC1采集多條通道 可以不使用DMA功能嗎?

    STM32的ADC1采集多條通道,可以不使用DMA功能嗎?
    的頭像 發(fā)表于 03-14 14:46 ?5881次閱讀
    <b class='flag-5'>STM32</b>的ADC1采集多條通道 可以不使用<b class='flag-5'>DMA</b><b class='flag-5'>功能</b>嗎?

    STM32 DMA詳解

    事情。 DMA 控制器基于復雜的總線矩陣架構(gòu),將功能強大的雙 AHB 主總線架構(gòu)與獨立的 FIFO 結(jié) 合在一起,優(yōu)化了系統(tǒng)帶寬,下圖①處,可以看出雙 AHB 主總線架構(gòu)與獨立的 FIFO的結(jié)構(gòu)
    的頭像 發(fā)表于 10-27 14:47 ?1.1w次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b><b class='flag-5'>詳解</b>

    16、STM32——DMA詳解

    1、DMA簡介DMA(Direct Memory Access) :直接存儲器存取,是單片機的一個外設,它的主要功能是用來搬數(shù)據(jù),但是不需要占用 CPU,即在傳輸數(shù)據(jù)的時候, CPU 可以干其他
    發(fā)表于 12-02 13:51 ?21次下載
    16、<b class='flag-5'>STM32</b>——<b class='flag-5'>DMA</b><b class='flag-5'>詳解</b>

    STM32基礎-----DMA

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

    STM32 HAL CubeMX 串口IDLE接收空閑中斷+DMA

    關(guān)于DMA原理部分講解,及CubeMx配置部分,請參考該文章【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發(fā)送
    發(fā)表于 12-20 19:39 ?31次下載
    <b class='flag-5'>STM32</b> HAL CubeMX 串口IDLE接收空閑中斷+<b class='flag-5'>DMA</b>

    STM32單片機實現(xiàn)DMA+ADC+UART功能

    。于是想到了ADC采樣的數(shù)據(jù)用DMA功能存儲,并通過串口打印。但是串口打印依然要占用單片機時間,那能不能串口數(shù)據(jù)的輸出也采用 DMA功能呢?這樣ADC采樣的數(shù)據(jù)通過
    發(fā)表于 12-28 19:25 ?34次下載
    <b class='flag-5'>STM32</b>單片機實現(xiàn)<b class='flag-5'>DMA</b>+ADC+UART<b class='flag-5'>功能</b>

    STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA

    CPU處理。因此,大量數(shù)據(jù)拷貝時,使用DMA可以釋放CPU資源,相關(guān)文章推薦:詳解STM32中的DMA原理。
    的頭像 發(fā)表于 02-12 13:22 ?6009次閱讀
    <b class='flag-5'>STM32</b>串口收發(fā)數(shù)據(jù)為什么要使用<b class='flag-5'>DMA</b>

    STM32F1的DMA使用

    在前面我們提到過 DMA,這一章我們就來學習 STM32F1 的DMA 使 用。要實現(xiàn)的功能是:通過 K_UP 按鍵控制 DMA 串口 1
    的頭像 發(fā)表于 06-22 10:23 ?2933次閱讀
    <b class='flag-5'>STM32</b>F1的<b class='flag-5'>DMA</b>使用

    STM32G4 Advanced Timer Break功能詳解

    電子發(fā)燒友網(wǎng)站提供《STM32G4 Advanced Timer Break功能詳解.pdf》資料免費下載
    發(fā)表于 09-19 15:09 ?1次下載
    <b class='flag-5'>STM32</b>G4 Advanced Timer Break<b class='flag-5'>功能</b><b class='flag-5'>詳解</b>