最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

STM32 DMA教程 如何在STM32中使用直接內(nèi)存訪問(DMA)

2023-02-22 11:20 作者:心飛若  | 我要投稿

在這個(gè)STM32 Blue Pill教程中,我們介紹了STM32微控制器的DMA直接內(nèi)存訪問控制器。我們將討論 DMA 單元的硬件和特性、如何配置和使用它及其應(yīng)用。

直接內(nèi)存訪問通常稱為 DMA,是一種數(shù)據(jù)傳輸技術(shù),其中 I/O 設(shè)備直接與內(nèi)存通信,而無需通過中央處理器。在這種硬件機(jī)制中,DMA控制器是計(jì)算機(jī)體系結(jié)構(gòu)中代替CPU單元的數(shù)字邏輯單元,負(fù)責(zé)訪問輸入輸出設(shè)備和存儲(chǔ)器以傳輸數(shù)據(jù)。因此,它減輕了與內(nèi)存?zhèn)鬏斚嚓P(guān)的操作負(fù)載,從而大大降低了 CPU 負(fù)載。

DMA 控制器是一種專用硬件,無需 CPU 參與即可直接執(zhí)行讀取和寫入操作,并節(jié)省了涉及操作碼獲取、解碼、遞增和源/目標(biāo)測試地址的時(shí)間,否則中央處理器應(yīng)該執(zhí)行這些操作。這導(dǎo)致外圍設(shè)備和內(nèi)存之間的數(shù)據(jù)傳輸速率很高,并且可以快速傳送大塊數(shù)據(jù)。

沒有 DMA 單元的 CPU 可能會(huì)過載并導(dǎo)致其過度工作,因?yàn)橹魈幚砥髫?fù)責(zé)在外圍設(shè)備和內(nèi)存之間傳輸數(shù)據(jù)以及執(zhí)行代碼和獲取指令。為了確保 CPU 發(fā)揮其全部潛力,數(shù)據(jù)傳輸過程被交給 DMA 單元,以減少主處理器的負(fù)載。


顯示 DMA 單元的 STM32 Blue Pill 系統(tǒng)架構(gòu)

下圖顯示了 STM32 Blue Pill 附帶的 STM32F103C8T6 微控制器的系統(tǒng)架構(gòu)。

請注意,在上圖中,通過合并一個(gè) DMA 單元,來自任何外設(shè)(例如 ADC1 或 USART1)的數(shù)據(jù)流現(xiàn)在可以直接發(fā)送到 SRAM,而無需主處理器的干預(yù)。CPU 可以繼續(xù)執(zhí)行自己的任務(wù),從而提高系統(tǒng)的生產(chǎn)率。雖然并不總是有利,但 DMA 單元也可能帶來一些問題。

DMA 單元與 Cortex-M3 內(nèi)核共享系統(tǒng)總線,使其能夠完成直接內(nèi)存?zhèn)鬏???偩€矩陣使用循環(huán)調(diào)度,確保 CPU 可以訪問至少一半的系統(tǒng)帶寬??偩€矩陣實(shí)現(xiàn)循環(huán)調(diào)度,從而在 DMA 停止 CPU 訪問系統(tǒng)總線時(shí)確保 CPU 至少有一半的系統(tǒng)總線帶寬(內(nèi)存和外設(shè))主處理器具有相同的目標(biāo)目的地。

簡而言之,DMA 單元釋放了 CPU 并允許它執(zhí)行其他操作。在沒有任何 CPU 干預(yù)的情況下,在 DMA 單元的幫助下,外圍設(shè)備和內(nèi)存之間以及內(nèi)存到內(nèi)存之間會(huì)發(fā)生快速數(shù)據(jù)傳輸。

STM32 Blue Pill DMA 硬件

正如您在下面的系統(tǒng)架構(gòu)中看到的,STM32F103C8T6 有 2 個(gè) DMA 控制器(DMA1 和 DMA2)。DMA1 有 7 個(gè)通道,DMA2 有 5 個(gè)通道。此外,每個(gè)通道都有專門的資源來管理來自一個(gè)或多個(gè)外設(shè)的內(nèi)存訪問請求,這意味著它總共有 12 個(gè)通道,可以與不同的外設(shè)一起使用,以直接在內(nèi)存和外設(shè)之間傳輸。我們還可以將每個(gè) DMA 通道與一個(gè)或多個(gè)外設(shè)一起使用來處理內(nèi)存?zhèn)鬏斦埱?。為此,它提供了一個(gè)仲裁器來設(shè)置 DMA 請求的優(yōu)先級。

主要特征

下面我們列出了 STM32 Blue Pill 的 DMA 單元的一些主要特性:

  • STM32 Blue Pill 具有十二個(gè)通道,可針對 DMA 請求進(jìn)行配置。這包括七個(gè)用于 DMA1 和五個(gè)用于 DMA2

  • 所有通道都有自己的 DMA 硬件請求和軟件觸發(fā)器,可以通過軟件輕松配置。

  • DMA 請求還具有非常高、高、中和低四個(gè)級別的優(yōu)先級,可以通過軟件設(shè)置。它們在 DMA_CCRx 寄存器中配置。就硬件而言,它具有相等性,其中編號(hào)較小的通道優(yōu)先于編號(hào)較大的通道。仲裁器負(fù)責(zé)根據(jù)設(shè)置的優(yōu)先級監(jiān)控通道請求。之后,它將啟動(dòng)外設(shè)或內(nèi)存訪問序列。

  • 它具有模擬打包/解包、自依賴源和目標(biāo)傳輸(包括字節(jié)、半字和字)的特點(diǎn)。

  • 循環(huán)緩沖區(qū)管理

  • 具有內(nèi)存到內(nèi)存、外設(shè)到外設(shè)、外設(shè)到內(nèi)存和內(nèi)存到外設(shè)的傳輸功能

  • 能夠訪問閃存、SRAM、APB1、APB2 和 AHB 外設(shè),既可以作為源也可以作為目標(biāo)。

  • 通過DMA單元最多可傳輸65536個(gè)可編程數(shù)據(jù)

  • 對于單個(gè)中斷請求,每個(gè)通道都有三個(gè)事件標(biāo)志,包括 DMA 傳輸一半、DMA 傳輸完成和 DMA 傳輸錯(cuò)誤。這些標(biāo)志使靈活性成為可能,因?yàn)橛袉为?dú)的中斷使能位。

DMA 中的數(shù)據(jù)處理

在本節(jié)中,我們將了解 DMA 單元如何執(zhí)行數(shù)據(jù)事務(wù)。主要有三個(gè)操作決定數(shù)據(jù)處理/傳輸過程。

  1. 首先,數(shù)據(jù)從外設(shè)數(shù)據(jù)寄存器或內(nèi)存中的特定位置加載。它通過內(nèi)部當(dāng)前外設(shè)或內(nèi)存地址寄存器定向。這里,對于第一次傳輸,起始地址是在 DMA_CPARx/DMA_CMARx 寄存器中編程的基本存儲(chǔ)器或外設(shè)地址。

  2. 其次,存儲(chǔ)加載到外設(shè)數(shù)據(jù)寄存器或內(nèi)存中特定位置的數(shù)據(jù),這些數(shù)據(jù)是通過內(nèi)部當(dāng)前外設(shè)或內(nèi)存地址寄存器定向的。這里,對于第一次傳輸,起始地址是在 DMA_CPARx/DMA_CMARx 寄存器中編程的基本存儲(chǔ)器或外設(shè)地址。

  3. 第三,DMA_CNDTRx 寄存器后遞減。該寄存器保存剩余的數(shù)據(jù)傳輸數(shù)。

DMA 通道

如前所述,STM32 Blue Pill 具有十二個(gè)獨(dú)立的 DMA 通道,能夠監(jiān)控內(nèi)存地址和在特定地址處找到的外設(shè)地址之間的 DMA 傳輸。DMA 單元最多可以傳輸 65535 個(gè)可編程數(shù)據(jù)。事務(wù)發(fā)生后,保存數(shù)據(jù)數(shù)量的寄存器會(huì)遞減。

DMA_CCRx 寄存器包含 PSIZE/MSIZE 位,可以輕松編程外設(shè)/存儲(chǔ)器的傳輸數(shù)據(jù)大小。根據(jù) DMA_CCRx 寄存器中存在的 PINC/MINC 位,可以將外設(shè)/內(nèi)存指針設(shè)置為在每次事務(wù)發(fā)生后遞增。如果啟用增量模式,則下一次傳輸?shù)牡刂穼⑹乔耙淮蝹鬏數(shù)牡刂犯鶕?jù)設(shè)置的數(shù)據(jù)大小增加 1、2 或 4。

DMA請求可以設(shè)置為連續(xù)數(shù)據(jù)傳輸?shù)难h(huán)模式,根據(jù)通道配置階段設(shè)置的初始值不斷重新加載要發(fā)送的數(shù)據(jù)個(gè)數(shù),DMA請求不斷工作。要啟用循環(huán)模式,使用 DMA_CCRx 寄存器中的 CIRC 位。

但是,DMA 請求也可以設(shè)置為內(nèi)存到內(nèi)存模式。在這種情況下,DMA 通道不是由來自外設(shè)的請求觸發(fā)的。它不與循環(huán)模式同時(shí)使用。

MA 請求映射

下表顯示了從通道 1 到通道 7 的每個(gè)通道的 DMA1 請求。

要激活或停用外設(shè) DMA 請求,必須對特定外設(shè)寄存器上的 DMA 控制位進(jìn)行編程。

STM32 Blue Pill DMA 配置

在本節(jié)中,讓我們看看如何在 STM32 Blue Pill 中配置 DMA 單元。它遵循一系列步驟來成功配置單元。

  • 首先,要配置 DMA 通道,需設(shè)置 DMA_CPARx 寄存器中的外設(shè)寄存器地址。外設(shè)事件發(fā)生后,數(shù)據(jù)將從/到該地址傳輸?shù)?從內(nèi)存。

  • 其次,接下來設(shè)置 DMA_CMARx 寄存器中的內(nèi)存地址。外設(shè)事件發(fā)生后,數(shù)據(jù)將從/到該地址傳輸?shù)?從內(nèi)存。

  • 接下來,要傳輸?shù)臄?shù)據(jù)總數(shù)在 DMA_CNDTRx 寄存器中配置。每當(dāng)發(fā)生數(shù)據(jù)事務(wù)時(shí),寄存器中的值就會(huì)遞減。

  • 通道的優(yōu)先級通過 PL[1:0] 位在 DMA_CCRx 寄存器中設(shè)置。

  • 之后,在 DMA_CCRx 寄存器中配置 DMA 請求的模式以及數(shù)據(jù)傳輸方向、中斷類型、外設(shè)/內(nèi)存數(shù)據(jù)大小等。

  • 最后,設(shè)置 DMA_CCRx 寄存器中特定通道的使能位以啟動(dòng)它。

  • 啟用 DMA 通道后,DMA 請求從與配置通道連接的外設(shè)開始。如果啟用 HTIE(半傳輸中斷使能)并標(biāo)記半傳輸標(biāo)志的設(shè)置,則在發(fā)送一半數(shù)據(jù)字節(jié)時(shí)觸發(fā)中斷。在這種情況下,如果使能 TCIE(傳輸完成中斷使能),則在所有數(shù)據(jù)傳輸完成后觸發(fā)中斷并標(biāo)記傳輸完成標(biāo)志的設(shè)置。

以上文章由IC先生網(wǎng)www.mrchip.cn編輯整理,請勿轉(zhuǎn)載。

STM32 DMA教程 如何在STM32中使用直接內(nèi)存訪問(DMA)的評論 (共 條)

分享到微博請遵守國家法律
贞丰县| 乳山市| 巴楚县| 惠安县| 杭锦旗| 绥德县| 济源市| 光泽县| 河北省| 宝清县| 叙永县| 平安县| 温宿县| 海淀区| 策勒县| 邢台市| 靖宇县| 尖扎县| 永顺县| 广安市| 隆德县| 阿拉善左旗| 金湖县| 登封市| 乐昌市| 翼城县| 台州市| 阿合奇县| 贡嘎县| 西乌| 上林县| 高碑店市| 桓台县| 石林| 富蕴县| 蒙自县| 祁门县| 漠河县| 乌拉特中旗| 黎川县| 榆林市|