日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式分享
[導(dǎo)讀]以STM32F103為例,當使用USART1以115200bps速率連續(xù)接收數(shù)據(jù)時,若采用傳統(tǒng)輪詢方式,每接收1字節(jié)需至少5條指令(讀DR、寫內(nèi)存、增址、判數(shù)、跳轉(zhuǎn)),在72MHz主頻下耗時約200ns。表面看CPU仍有大量空閑時間,但當需要同時處理多個高速外設(shè),如雙路ADC同步采樣、UART日志輸出、SPI Flash寫入時,CPU在多個數(shù)據(jù)搬運任務(wù)間頻繁切換,上下文保護/恢復(fù)開銷急劇上升,實時性保障徹底瓦解。而DMA(Direct Memory Access,直接存儲器訪問)技術(shù)的出現(xiàn),徹底改變了這一局面,它允許外設(shè)與存儲器之間直接進行數(shù)據(jù)傳輸,無需CPU干預(yù),從而釋放CPU資源,提高系統(tǒng)整體效率。

STM32F103為例,當使用USART1以115200bps速率連續(xù)接收數(shù)據(jù)時,若采用傳統(tǒng)輪詢方式,每接收1字節(jié)需至少5條指令(讀DR、寫內(nèi)存、增址、判數(shù)、跳轉(zhuǎn)),在72MHz主頻下耗時約200ns。表面看CPU仍有大量空閑時間,但當需要同時處理多個高速外設(shè),如雙路ADC同步采樣、UART日志輸出、SPI Flash寫入時,CPU在多個數(shù)據(jù)搬運任務(wù)間頻繁切換,上下文保護/恢復(fù)開銷急劇上升,實時性保障徹底瓦解。而DMA(Direct Memory Access,直接存儲器訪問)技術(shù)的出現(xiàn),徹底改變了這一局面,它允許外設(shè)與存儲器之間直接進行數(shù)據(jù)傳輸,無需CPU干預(yù),從而釋放CPU資源,提高系統(tǒng)整體效率。

DMA技術(shù)本質(zhì):從CPU卸載數(shù)據(jù)搬運任務(wù)

DMA的核心思想是將“數(shù)據(jù)搬運”這一確定性、重復(fù)性極強的任務(wù),從CPU軟件控制中剝離,交由專用硬件控制器獨立執(zhí)行。DMA控制器本質(zhì)上是一個狀態(tài)機+地址生成器+計數(shù)器+總線仲裁器的組合體。它不依賴CPU指令流,而是通過硬件邏輯直接接管AHB/APB總線,在內(nèi)存與外設(shè)之間建立直通通道。當配置完成后,DMA僅需響應(yīng)外設(shè)發(fā)出的硬件請求信號(如USART_RXNE、ADC_EOC),即可自動完成地址遞增、數(shù)據(jù)傳輸、計數(shù)減一、標志置位等全部動作。整個過程中CPU完全無需參與數(shù)據(jù)搬運,可專注執(zhí)行控制算法、協(xié)議解析、人機交互等高價值任務(wù)。

以STM32F107為例,當USART1接收緩沖區(qū)滿時,DMA控制器可直接從USART1_DR寄存器讀取數(shù)據(jù),并按預(yù)設(shè)步長寫入SRAM指定區(qū)域,整個過程CPU僅需在傳輸完成時收到一次通知,而非每字節(jié)中斷一次。這種硬件級卸載使CPU得以專注算法處理、協(xié)議解析或用戶交互等高價值任務(wù),系統(tǒng)整體吞吐量與確定性顯著提升。據(jù)實測數(shù)據(jù)顯示,在STM32F103平臺上,使用DMA進行USART數(shù)據(jù)接收時,CPU占用率從傳統(tǒng)中斷方式的35%降低至5%以下,數(shù)據(jù)吞吐量提升3倍以上。

STM32 DMA控制器架構(gòu):雙控制器十二通道的資源組織

STM32系列MCU通常集成雙DMA控制器,以STM32F103為例,其包含DMA1(7通道)和DMA2(5通道)。這種設(shè)計并非簡單的冗余堆砌,而是針對不同總線矩陣(AHB/APB)的外設(shè)訪問特性進行的精細化分工。DMA1主要服務(wù)于APB1總線外設(shè),如USART2、I2C1、TIM2等,這些外設(shè)通常運行在較低頻率(如36MHz),承載著對實時性要求相對寬松的通信與模擬外設(shè);DMA2則側(cè)重APB2總線外設(shè),如USART1、TIM1、ADC1等,以及部分AHB外設(shè)(如FSMC),這些外設(shè)通常運行在系統(tǒng)主頻(如72MHz),連接著對帶寬和響應(yīng)速度要求更高的核心外設(shè)。

每個DMA通道都是完全獨立的,擁有自己的一套寄存器組,包括傳輸數(shù)量寄存器(CNDTRx)、外設(shè)地址寄存器(CPARx)、存儲器地址寄存器(CMARx)和控制寄存器(CCRx)。這種獨立性是實現(xiàn)多任務(wù)并發(fā)數(shù)據(jù)搬運的前提。例如,在一個工業(yè)控制系統(tǒng)中,可以同時配置DMA1_Channel1負責ADC采樣數(shù)據(jù)的搬運,DMA1_Channel5負責USART1的數(shù)據(jù)發(fā)送,DMA2_Channel1負責SPI Flash的讀取,三者物理上同時運行,互不搶占,從而顯著提高系統(tǒng)的實時性和數(shù)據(jù)吞吐能力。

寄存器配置:數(shù)據(jù)搬運鏈路的精確控制

DMA的強大功能依賴于對寄存器的精確配置,這些寄存器共同定義了數(shù)據(jù)搬運的完整鏈路。

地址管理:源與目標的精準定位

CPARx和CMARx寄存器分別存儲外設(shè)數(shù)據(jù)寄存器的物理地址和用戶數(shù)據(jù)緩沖區(qū)的起始地址。對于USART1接收,CPARx必須被設(shè)置為&USART1->DR(如0x40013804),因為這是外設(shè)產(chǎn)生數(shù)據(jù)的地方;而CMARx則應(yīng)指向預(yù)先在SRAM中開辟的接收緩沖區(qū),如&rx_buffer[0]。地址增量模式由CCRx寄存器中的MINC(存儲器增量)和PINC(外設(shè)增量)位控制。在USART接收場景中,通常啟用MINC(存儲器地址自動遞增),以便DMA每次傳輸后自動更新目標地址,實現(xiàn)連續(xù)填充緩沖區(qū);而PINC則禁用(外設(shè)地址保持不變),因為外設(shè)數(shù)據(jù)寄存器(如USART1_DR)為固定地址,每次讀寫均操作同一物理位置。

數(shù)據(jù)寬度與傳輸數(shù)量:匹配外設(shè)特性

MSIZE(存儲器數(shù)據(jù)大小)和PSIZE(外設(shè)數(shù)據(jù)大小)位域定義了數(shù)據(jù)傳輸?shù)牧6?,支?位(Byte)、16位(Half-Word)、32位(Word)三種模式。參數(shù)選擇必須嚴格匹配外設(shè)數(shù)據(jù)寄存器的實際寬度。例如,USART_DR寄存器在8位數(shù)據(jù)格式下為8位寬,若錯誤配置為32位傳輸,DMA將嘗試讀取4字節(jié),導(dǎo)致后續(xù)3字節(jié)被錯誤解釋為無效數(shù)據(jù);反之,ADC規(guī)則通道數(shù)據(jù)寄存器(ADC_DR)為16位寬,配置為8位將造成高位數(shù)據(jù)丟失。傳輸數(shù)量由CNDTRx寄存器定義,其值范圍為1至65535。在傳輸過程中,該寄存器的值會隨著每一次數(shù)據(jù)項的成功搬運而自動遞減,當其值減至0時,標志著本次傳輸?shù)耐瓿?,并可觸發(fā)相應(yīng)的中斷標志。

傳輸模式與優(yōu)先級:適應(yīng)不同應(yīng)用場景

DIR位選擇傳輸方向,包括外設(shè)到存儲器(Peripheral to Memory)、存儲器到外設(shè)(Memory to Peripheral)、存儲器到存儲器(Memory to Memory)三種模式。其中,“存儲器到存儲器”模式為特殊場景設(shè)計,其啟動不依賴外設(shè)請求信號,而是由軟件置位EN位直接觸發(fā),常用于RAM數(shù)據(jù)塊拷貝、Flash編程前的數(shù)據(jù)預(yù)處理等場景。CIRC位啟用循環(huán)模式,使CNDTRx在減至0后自動重載初始值,形成無限循環(huán)傳輸,典型應(yīng)用包括ADC連續(xù)掃描,可避免采樣丟失。優(yōu)先級配置分為軟件可編程優(yōu)先級(High/Medium/Low/Very Low)和硬件默認優(yōu)先級(通道號越小,優(yōu)先級越高),工程師可根據(jù)系統(tǒng)實時性需求進行精細化調(diào)控,例如將ADC采樣通道設(shè)為最高優(yōu)先級以保障數(shù)據(jù)不丟失。

實戰(zhàn)案例:USART接收的DMA配置

以STM32F103的USART1接收為例,完整的DMA配置流程如下:

時鐘使能:開啟DMA1和USART1的時鐘。

DMA通道配置:

設(shè)置CPARx為&USART1->DR,指定外設(shè)數(shù)據(jù)源。

設(shè)置CMARx為接收緩沖區(qū)地址,如&rx_buffer[0]。

配置CCRx寄存器:啟用MINC(存儲器地址遞增),禁用PINC(外設(shè)地址不變),設(shè)置MSIZE和PSIZE為8位(根據(jù)實際需求調(diào)整),選擇傳輸方向為外設(shè)到存儲器,啟用傳輸完成中斷(TCIE)。

初始化CNDTRx為緩沖區(qū)大小,如100。

USART配置:啟用USART接收DMA請求(DMAR位)。

啟動DMA通道:置位CCRx中的EN位,使能通道。

配置完成后,當USART1接收到數(shù)據(jù)時,DMA控制器會自動將數(shù)據(jù)從USART1_DR寄存器搬運到接收緩沖區(qū),無需CPU干預(yù)。當CNDTRx減至0時,觸發(fā)傳輸完成中斷,通知CPU處理接收到的數(shù)據(jù)。

結(jié)語

DMA技術(shù)通過硬件化數(shù)據(jù)搬運任務(wù),顯著提升了STM32系統(tǒng)的數(shù)據(jù)吞吐能力和實時性。其核心在于對寄存器的精確配置,包括地址管理、數(shù)據(jù)寬度、傳輸數(shù)量、傳輸模式和優(yōu)先級等關(guān)鍵參數(shù)。通過深入理解DMA的工作原理和寄存器配置方法,開發(fā)者可以充分利用DMA的優(yōu)勢,設(shè)計出高效、可靠的嵌入式系統(tǒng),滿足各種復(fù)雜應(yīng)用場景的需求。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

通過DMA硬件加速與IDLE中斷的協(xié)同工作,該方案實現(xiàn)了變長數(shù)據(jù)幀的高效可靠接收,特別適用于工業(yè)控制、智能儀表等對實時性和可靠性要求嚴苛的場景。其核心優(yōu)勢在于:

關(guān)鍵字: USART DMA

STM32的內(nèi)存管理效率直接影響系統(tǒng)性能,以某智能電表項目為例,其數(shù)據(jù)采集模塊每秒需處理12000次ADC采樣,傳統(tǒng)malloc/free機制導(dǎo)致內(nèi)存碎片率超過40%,系統(tǒng)運行12小時后出現(xiàn)內(nèi)存分配失敗。通過引入ART內(nèi)...

關(guān)鍵字: STM32 內(nèi)存加速器

在工業(yè)控制、音頻處理等實時性要求嚴苛的場景中,傳統(tǒng)單緩沖DMA模式常因數(shù)據(jù)覆蓋導(dǎo)致系統(tǒng)崩潰。以某自動化產(chǎn)線為例,當PLC以115200bps速率接收Modbus RTU指令時,若采用單緩沖模式,CPU處理延遲超過50μs...

關(guān)鍵字: STM32 多線程DMA

DMA(Direct Memory Access)技術(shù)通過硬件自治機制實現(xiàn)高速數(shù)據(jù)傳輸,但實際工程中常因內(nèi)存對齊、緩存一致性、外設(shè)同步等問題導(dǎo)致數(shù)據(jù)錯位。本文以STM32為例,結(jié)合STM32CubeMonitor工具,解...

關(guān)鍵字: STM32 DMA傳輸

工業(yè)HMI、醫(yī)療影像處理等高性能嵌入式場景中,STM32通過FSMC/FMC接口外擴SRAM已成為突破片內(nèi)資源限制的關(guān)鍵方案。然而,當總線頻率突破50MHz時,信號完整性(SI)問題凸顯:某智慧園區(qū)監(jiān)控系統(tǒng)采用STM32...

關(guān)鍵字: STM32 FSMC

在嵌入式存儲領(lǐng)域,STM32的SDIO接口憑借其硬件加速能力成為高速SD卡通信的核心方案。隨著SD卡規(guī)格從Class 10向UHS-I/UHS-II演進,傳統(tǒng)48MHz時鐘配置已無法滿足現(xiàn)代應(yīng)用對帶寬的需求。本文通過硬件...

關(guān)鍵字: STM32 SDIO

在工業(yè)自動化、高速數(shù)據(jù)采集和實時控制領(lǐng)域,USB 3.0憑借其5Gbps的理論帶寬和全雙工通信能力,成為STM32微控制器擴展高速外設(shè)的核心接口。然而,其超高速信號(2.5GHz基頻)對PCB設(shè)計提出嚴苛要求,需通過差分...

關(guān)鍵字: USB 3.0 STM32

STM32高速信號處理SRAM作為關(guān)鍵存儲組件,其信號完整性直接影響系統(tǒng)穩(wěn)定性。然而,串擾(Crosstalk)作為高速電路中的“隱形殺手”,常導(dǎo)致SRAM讀寫錯誤、數(shù)據(jù)丟失甚至系統(tǒng)崩潰。本文將從串擾的物理機制出發(fā),結(jié)合...

關(guān)鍵字: STM32 高速信號

嵌入式設(shè)備,功耗管理是決定產(chǎn)品續(xù)航能力與市場競爭力的核心要素。針對STM32高速電路,需通過動態(tài)電源管理策略優(yōu)化SRAM、SD卡和USB等關(guān)鍵外設(shè)的功耗,實現(xiàn)毫安級到納安級的電流控制。本文從硬件架構(gòu)、時鐘配置、喚醒機制和...

關(guān)鍵字: STM32 高速電路 低功耗

STM32高速電路設(shè)計,SD卡作為核心存儲設(shè)備,其數(shù)據(jù)傳輸穩(wěn)定性直接影響系統(tǒng)可靠性。然而,當SDIO接口時鐘超過8MHz時,地彈效應(yīng)(Ground Bounce)會顯著增加誤碼率,導(dǎo)致數(shù)據(jù)丟失或存儲錯誤。本文通過解析地彈...

關(guān)鍵字: STM32 高速電路
關(guān)閉