RM新时代网站-首页

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

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

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

STM32的DMA的五大問題

撞上電子 ? 2023-12-10 08:00 ? 次閱讀

1,DMA控制器的內(nèi)部結(jié)構(gòu)

STM32中的DMA控制器是一種用于在外設(shè)和存儲器之間傳輸數(shù)據(jù)的專用硬件。DMA控制器的內(nèi)部結(jié)構(gòu)主要包括以下幾個關(guān)鍵部分:

通道: DMA控制器可以有多個通道,每個通道獨立管理一個數(shù)據(jù)傳輸任務(wù)。通道的數(shù)量取決于具體的STM32型號,每個通道可以獨立配置,使得DMA可以同時執(zhí)行多個數(shù)據(jù)傳輸任務(wù)。

數(shù)據(jù)傳輸方向寄存器: 該寄存器用于配置數(shù)據(jù)傳輸?shù)姆较?,可以設(shè)置為從外設(shè)到存儲器(Memory-to-Memory)、從外設(shè)到存儲器(Peripheral-to-Memory)、從存儲器到外設(shè)(Memory-to-Peripheral)等不同方向。

地址寄存器: DMA控制器有兩個地址寄存器,一個用于配置外設(shè)地址,另一個用于配置存儲器地址。這些寄存器存儲了傳輸數(shù)據(jù)的源地址和目的地址。

傳輸計數(shù)寄存器: 該寄存器用于設(shè)置傳輸?shù)臄?shù)據(jù)量,即希望傳輸?shù)臄?shù)據(jù)的數(shù)量。傳輸計數(shù)寄存器的值遞減或遞增,直到傳輸完成。

傳輸模式寄存器: DMA控制器支持不同的傳輸模式,例如循環(huán)模式、塊傳輸模式、內(nèi)存自增/自減等。傳輸模式寄存器用于配置這些傳輸模式。

優(yōu)先級寄存器: 當多個通道同時請求DMA服務(wù)時,通過優(yōu)先級寄存器可以配置通道的優(yōu)先級。優(yōu)先級高的通道將獲得DMA控制權(quán)。

中斷和事件寄存器: DMA控制器支持中斷,用于在數(shù)據(jù)傳輸完成或發(fā)生錯誤時通知CPU。相關(guān)寄存器用于配置和監(jiān)視中斷和事件狀態(tài)。

配置寄存器: DMA控制器有一些配置寄存器,用于配置DMA的工作模式、觸發(fā)條件、錯誤處理等。

狀態(tài)寄存器: 用于存儲DMA通道的狀態(tài)信息,例如傳輸完成、半傳輸?shù)葼顟B(tài)。

2,DMA處理過程

DMA的處理過程涉及以下幾個關(guān)鍵步驟,這些步驟描述了DMA如何從源地址傳輸數(shù)據(jù)到目的地址,而無需CPU的干預(yù):

通道配置: DMA控制器可以有多個通道,每個通道獨立管理一個數(shù)據(jù)傳輸任務(wù)。首先,需要配置DMA通道,確定數(shù)據(jù)傳輸?shù)姆较?、源和目的地址、傳輸?shù)據(jù)量等參數(shù)。

源和目的地址設(shè)置: 配置DMA的源地址和目的地址,分別指定數(shù)據(jù)傳輸?shù)钠鹗键c和目標存儲位置。

傳輸數(shù)量設(shè)置: 配置傳輸計數(shù)寄存器,確定要傳輸?shù)臄?shù)據(jù)的數(shù)量。這個值在傳輸過程中遞減或遞增,直到傳輸完成。

傳輸模式設(shè)置: 配置傳輸模式寄存器,選擇傳輸模式。常見的傳輸模式包括循環(huán)模式、塊傳輸模式、內(nèi)存自增/自減等。

啟動DMA傳輸: 當DMA的配置完成后,通過軟件或外部觸發(fā)信號啟動DMA傳輸。DMA控制器將開始在指定通道上執(zhí)行數(shù)據(jù)傳輸任務(wù)。

數(shù)據(jù)傳輸: DMA控制器根據(jù)配置的參數(shù),從源地址讀取數(shù)據(jù),然后將數(shù)據(jù)寫入目的地址。這一過程在不需要CPU干預(yù)的情況下進行。

中斷和事件處理: 如果配置了中斷,DMA在傳輸完成時可以生成中斷請求。CPU可以通過中斷服務(wù)例程處理傳輸完成事件,執(zhí)行相關(guān)的操作。另外,DMA還可以在傳輸完成或發(fā)生錯誤時生成事件,用于觸發(fā)其他模塊的操作。

傳輸結(jié)束: DMA控制器監(jiān)視傳輸計數(shù)寄存器,當傳輸計數(shù)達到零時,傳輸完成。在某些情況下,可以在傳輸完成時產(chǎn)生傳輸完成事件,通知相關(guān)模塊傳輸已經(jīng)結(jié)束。

3,DMA中斷

DMA中斷是指在DMA(Direct Memory Access)傳輸過程中,當數(shù)據(jù)傳輸完成或者發(fā)生錯誤時,DMA控制器產(chǎn)生中斷請求,通知CPU進行相應(yīng)的處理。DMA中斷允許CPU在數(shù)據(jù)傳輸階段結(jié)束時或者在發(fā)生錯誤時執(zhí)行特定的中斷服務(wù)例程,以便對數(shù)據(jù)傳輸?shù)耐瓿蔂顟B(tài)進行處理或進行錯誤處理。

在使用DMA時,可以配置DMA中斷,以便在以下情況之一發(fā)生時通知CPU:

傳輸完成中斷: 當DMA傳輸?shù)臄?shù)據(jù)量達到設(shè)定值時,DMA控制器產(chǎn)生傳輸完成中斷請求。這時,CPU可以執(zhí)行相應(yīng)的中斷服務(wù)例程,處理傳輸完成后的操作,如數(shù)據(jù)處理、狀態(tài)更新等。

半傳輸中斷: 在一些DMA控制器中,還可以配置半傳輸中斷,即在傳輸完成一半數(shù)據(jù)時產(chǎn)生中斷請求。這對于一些特殊的數(shù)據(jù)傳輸場景可能會有用。

錯誤中斷: 如果在DMA傳輸過程中發(fā)生錯誤,例如總線錯誤或存儲器溢出,DMA控制器可以產(chǎn)生錯誤中斷請求。CPU可以通過錯誤中斷服務(wù)例程來處理這些錯誤,采取相應(yīng)的措施。

DMA中斷的使用可以提高系統(tǒng)的靈活性和可靠性。通過合理配置DMA中斷,可以在不占用CPU時間的情況下及時獲取數(shù)據(jù)傳輸?shù)臓顟B(tài),進行相應(yīng)的處理。配置DMA中斷的具體步驟包括:

使能DMA中斷: 在DMA控制寄存器中,通常有一個使能中斷的位,設(shè)置為1表示允許產(chǎn)生中斷。

配置中斷優(yōu)先級: 在中斷控制器中,配置DMA中斷的優(yōu)先級,以確保在多個中斷同時發(fā)生時,能夠按照優(yōu)先級順序進行響應(yīng)。

編寫中斷服務(wù)例程: CPU需要編寫中斷服務(wù)例程,以定義在中斷發(fā)生時要執(zhí)行的操作。這可以包括數(shù)據(jù)處理、狀態(tài)更新、錯誤處理等。


4,DMA映射

DMA中斷映射是指將DMA(Direct Memory Access)傳輸?shù)闹袛嗾埱笥成涞教囟ǖ闹袛嗑€上,以便在中斷控制器中進行管理和處理。在某些DMA控制器中,可以配置DMA中斷映射,以確定DMA傳輸完成或發(fā)生錯誤時觸發(fā)的中斷是哪一個中斷線上的中斷。

為了更好地理解DMA中斷映射,以下是一些相關(guān)的概念:

中斷線: 中斷線是連接外設(shè)或模塊到中斷控制器的通道。每個中斷線上可以連接多個中斷源,中斷控制器可以通過中斷優(yōu)先級和中斷屏蔽來決定哪個中斷源獲得服務(wù)。

DMA通道: DMA控制器有多個通道,每個通道負責一個數(shù)據(jù)傳輸任務(wù)。當數(shù)據(jù)傳輸完成或發(fā)生錯誤時,DMA通道可以產(chǎn)生中斷請求。

DMA中斷映射: DMA中斷映射允許將DMA通道的中斷請求映射到特定的中斷線上。這樣,CPU就可以通過中斷控制器管理和處理DMA通道產(chǎn)生的中斷。

中斷控制器配置: 在某些STM32系列微控制器中,中斷控制器(NVIC)提供了中斷線的配置和管理功能。通過配置中斷線,可以確定DMA中斷映射到哪個中斷線上,以及中斷線的優(yōu)先級等參數(shù)。


下面是一個簡化的例子,說明DMA中斷映射的可能配置:

#include"stm32f4xx_hal.h"
void DMA_Configuration(void) { // 初始化 DMA 結(jié)構(gòu)體 DMA_HandleTypeDef dma_handle; dma_handle.Instance = DMA1_Stream0; dma_handle.Init.Channel = DMA_CHANNEL_0; dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY; dma_handle.Init.PeriphInc = DMA_PINC_ENABLE; dma_handle.Init.MemInc = DMA_MINC_ENABLE; dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; dma_handle.Init.MemDataAlignment=DMA_MDATAALIGN_WORD; dma_handle.Init.Mode=DMA_NORMAL; dma_handle.Init.Priority=DMA_PRIORITY_HIGH; //關(guān)聯(lián)DMA句柄與DMA控制器 HAL_DMA_Init(&dma_handle); //關(guān)聯(lián)DMA句柄與源、目的地地址 HAL_DMA_Start(&dma_handle,(uint32_t)sourceBuffer,(uint32_t)destinationBuffer,BUFFER_SIZE); //配置DMA中斷映射 HAL_NVIC_SetPriority(DMA1_Stream0_IRQn,0,0); HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);}

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

    關(guān)注

    112

    文章

    16332

    瀏覽量

    177803
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

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

    關(guān)注

    3

    文章

    560

    瀏覽量

    100544
收藏 人收藏

    評論

    相關(guān)推薦

    STM32實例教程-DMA實驗

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

    2011年沙特吉達五大行業(yè)展|沙特建材展|吉達建材展|五大行業(yè)展|

    2011 沙特big 5 五大行業(yè)展(北京邁斯百特)展會時間:2011年02月27日—03月02日   展會地點:沙特吉達國際會展中心 &
    發(fā)表于 07-05 17:09

    降低測量噪聲的五大技巧

    降低測量噪聲的五大技巧…………
    發(fā)表于 07-12 15:06

    【eBox生態(tài)圈】連載一:簡化STM32的編程之eBox,解決五大問題

    了很多種引導(dǎo)方式。但是總需要外部引腳的配置。讓人覺得是那么不爽,目前網(wǎng)上各種bootloader漫天飛舞,百花齊放,一個字“亂”。五大問題,到底該如何解決?怎樣才能通過簡單的編程實現(xiàn)STM32的強大
    發(fā)表于 09-26 12:38

    STM32五大時鐘源有何關(guān)系

    目錄STM32時鐘系統(tǒng)時鐘系統(tǒng)框圖時鐘系統(tǒng)總結(jié)PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之間的關(guān)系五大時鐘源簡要概述系統(tǒng)時鐘源APB1&ABP2總線對應(yīng)的設(shè)備與時鐘
    發(fā)表于 08-02 07:37

    了解下五大嵌入式操作系統(tǒng)

    [掌握這五大嵌入式操作系統(tǒng),你就是STM32牛人技術(shù)往往更新得非常快,并且總是讓我們覺得學(xué)起來有難度而且有些迷茫。不過沒有關(guān)系我們發(fā)燒友專注于在快樂中學(xué)習(xí),要學(xué)習(xí)STM32,我們首先了解下五大
    發(fā)表于 12-22 06:21

    STM32_DMA程序程序

    STM32 DMA程序程序,很好的學(xué)習(xí)資料,快來下載吧
    發(fā)表于 02-15 15:27 ?28次下載

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

    很好的一份關(guān)于STM32DMA的分析資料,可以給開發(fā)者一個借鑒
    發(fā)表于 07-01 16:45 ?7次下載

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

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

    STM32F1 _DMA_USART

    STM32F1_DMA_USART
    的頭像 發(fā)表于 04-08 10:23 ?4630次閱讀
    <b class='flag-5'>STM32</b>F1 _<b class='flag-5'>DMA</b>_USART

    串口服務(wù)器常見的五大問題是什么,如何解決

    串口服務(wù)器提供串口轉(zhuǎn)網(wǎng)絡(luò)功能,使得串口設(shè)備能夠立即具備TCP/IP網(wǎng)絡(luò)接口功能,連接網(wǎng)絡(luò)進行數(shù)據(jù)通信,極大的擴展串口設(shè)備的通信距離。為了更方便我們操作和使用,下面為大家介紹下串口服務(wù)器常見五大問題解決方案。
    的頭像 發(fā)表于 12-19 10:02 ?3393次閱讀

    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串口接收不定長數(shù)據(jù)

    STM32 DMA串口接收不定長數(shù)據(jù)
    發(fā)表于 12-24 18:50 ?40次下載
    <b class='flag-5'>STM32</b>  <b class='flag-5'>DMA</b>串口接收不定長數(shù)據(jù)

    STM32 DMA傳輸?shù)膯栴}分析

    用戶使用STM32G473RET6芯片,開發(fā)環(huán)境STM32CubeMX+Keil(LL庫)。使用DMA1通道1,在半傳輸中斷和完全傳輸中斷里,拷貝ADC采集的數(shù)據(jù)。在應(yīng)用過程中發(fā)現(xiàn)DMA
    的頭像 發(fā)表于 12-01 09:19 ?2899次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b>傳輸?shù)膯栴}分析

    電機的五大啟動方式

    自動化小白必學(xué)!電機的五大啟動方式
    的頭像 發(fā)表于 01-09 10:39 ?879次閱讀
    電機的<b class='flag-5'>五大</b>啟動方式
    RM新时代网站-首页