chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

小白都看得懂的STM32的DMA知識

撞上電子 ? 2023-11-27 08:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、DMA簡介

1、DMA簡介

DMA(Direct Memory Access:直接內存存取)是一種可以大大減輕CPU工作量的數據轉移方式。

CPU有轉移數據、計算、控制程序轉移等很多功能,但其實轉移數據是可以不需要CPU參與。比如希望外設A的數據拷貝到外設B,只要給兩種外設提供一條數據通路,再加上一些控制轉移的部件就可以完成數據的拷貝。

DMA就是基于以上設想設計的,它的作用就是解決大量數據轉移過度消耗CPU資源的問題。有了DMA使CPU更專注于更加實用的操作--計算、控制等。

2、DMA的工作原理

DMA的作用就是實現數據的直接傳輸,而去掉了傳統(tǒng)數據傳輸需要CPU寄存器參與的環(huán)節(jié),主要涉及四種情況的數據傳輸,但本質上是一樣的,都是從內存的某一區(qū)域傳輸到內存的另一區(qū)域(外設的數據寄存器本質上就是內存的一個存儲單元)。四種情況的數據傳輸如下:

外設到內存

內存到外設

內存到內存

外設到外設

當用戶將參數設置好,主要涉及源地址、目標地址、傳輸數據量這三個,DMA控制器就會啟動數據傳輸,傳輸的終點就是剩余傳輸數據量為0。換句話說只要剩余傳輸數據量不是0,而且DMA是啟動狀態(tài),那么就會發(fā)生數據傳輸。


3、DMA是否影響CPU的運行

在X86架構系統(tǒng)中,當DMA運作時,DMA實際上會占用系統(tǒng)總線周期中的一部分時間。也就是說,在DMA未開啟前,系統(tǒng)總線可能完全被CPU使用;當DMA開啟后,系統(tǒng)總線要為DMA分配一定的時間,以保證DMA和CPU同時運作。那么顯然,DMA會降低CPU的運行速度。

STM32控制器中,芯片采用Cortex-M3架構,總線結構有了很大的優(yōu)化,DMA占用另外的總線,并不會與CPU的系統(tǒng)總線發(fā)生沖突。也就是說,DMA的使用不會影響CPU的運行速度。


二、STM32的DMA結構

1、DMA的主要特性

● 12個 獨立的可配置的通道DMA1有7個通道,DMA2 有5個通道
● 每個通道都直接連接專用的硬件DMA請求,每個通道都同樣支持軟件發(fā)。這些功能通過軟件來配置。
● 在七個請求間的優(yōu)先權可以通過軟件編程設置(共有四級:很高、高、中等和低),假如在相等優(yōu)先權時由硬件決定(請求0優(yōu)先于請求1,依此類推) 。
● 獨立的源和目標數據區(qū)的傳輸寬度(字節(jié)、半字、全字),模擬打包和拆包的過程。源和目標地址必須按數據傳輸寬度對齊。
● 支持循環(huán)的緩沖器管理
● 每個通道都有3個事件標志(DMA 半傳輸,DMA傳輸完成和DMA傳輸出錯),這3個事件標志邏輯或成為一個單獨的中斷請求。
●存儲器和存儲器間的傳輸
●外設和存儲器,存儲器和外設的傳輸
● 閃存、SRAM 、外設的SRAM 、APB1 APB2和AHB外設均可作為訪問的源和目標。
● 可編程的數據傳輸數目:最大為65536
下面為功能框圖:  

2、兩個DMA控制器結構

① DMA1 controller

② DMA2 controller

3、DMA寄存器列表

① 中斷類

DMA_ISR:DMA中斷狀態(tài)寄存器DMA_IFCRDMA中斷標志位清除寄存器說明:DMA1、DMA2分別有一組寄存器。

② 控制傳輸類

DMA_CCRxDMA通道x配置寄存器DMA_CNDTRxDMA通道x數據數量寄存器DMA_CPARxDMA通道x外設地址寄存器DMA_CMARx:DMA通道x內存地址寄存器
說明: 1> 每一個通道都有一組寄存器。2> DMA_CPARx、DMA_CMARx是沒有差別的,它們都可以存放外設的地址、內存的地址。DMA_CPARx、DMA_CMARx只不過起得名字有差別而已。


4、STM32的DMA工作特點

① DMA進行數據傳輸的必要條件

剩余傳輸數據量大于0

DMA通道傳輸使能

通道上DMA數據傳輸有事件請求

前兩者都好理解,對于第三點確實需要詳細的解釋,請看下邊的三條。

② 外設到XX方向的傳輸

假設是ADC到存儲器的數據傳輸,顯然ADC的DMA傳輸的源地址是ADC的數據寄存器。并不是說只要DMA通道傳輸使能后,就立即進行數據傳輸。只有當一次ADC轉化完成,ADC的DMA通道的傳輸事件有效,DMA才會從ADC的數據寄存器讀出數據,寫入目的地址。當DMA在讀取ADC的數據寄存器時,同時使ADC的DMA通道傳輸事件無效。顯然,要等到下一次ADC轉換完成后,才能啟動再一次的數據傳輸。

③存儲器對XX的DMA傳輸

因為數據是準備好的,不像ADC還需要等待數據到位。所以,不需要對應通道的事件。只要使能DMA數據傳輸就一直傳輸,直到達到設定的傳輸量。

舉個例子:1.內存到內存DMA傳輸請求一直有效2.內存到串口 DMA傳輸請求一直有效

一種解釋:存儲器對存儲器的置位,就相當于相應通道的事件有效。對應通道的事件有效和存儲器對存儲器的置位,就是傳輸的觸發(fā)位。每次傳輸的事件置位一次,完成一次傳輸。如果是由外設引發(fā)的DMA傳輸,則傳輸完成后,相應傳輸事件會置為無效,而存儲器對存儲器的傳輸,則一次傳輸完成后,相應事件一直有效,直至完成設定的傳輸量。

④外設以DMA方式工作時,能否再以軟件方式進行操作?

有一點是肯定的,當外設以DMA方式正在數據傳輸時,不可能再相應CPU的軟件控制命令,否則這不符合邏輯。

但是,倘若外設僅僅配置成DMA工作方式,但是DMA請求并未產生,數據傳輸并沒有進行。此時,軟件控制命令仍然能夠對外設進行控制。這是筆者在串口以DMA方式發(fā)送數據情形下,所得到的測試結論。

三、STM32的DMA軟件編程

1、“內存到內存”模式傳輸

①初始化配置

/** * @brief USART1 TX DMA 配置,內存到內存 * @param 無 * @retval 無 */void DMA_Mem2Mem_Config(void){ DMA_InitTypeDef DMA_InitStructure; /*開啟DMA時鐘*/ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /*設置DMA源地址*/ DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SendBuff;
/*設置DMA目的地址*/ DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ReceiveBuff;
/*方向:從內存SendBuff到內存ReceiveBuff*/ DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; /*傳輸大小DMA_BufferSize=SENDBUFF_SIZE*/ DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;
/*ReceiveBuff地址自增*/ DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
/*SENDBUFF_SIZE地址自增*/ DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
/*ReceiveBuff數據單位*/ DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
/*SENDBUFF_SIZE數據單位*/ DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
/*DMA模式:正常模式*/ DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
/*優(yōu)先級:中*/ DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
/*使能內存到內存的傳輸 */ DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; /*配置DMA1的4通道*/ DMA_Init(DMA1_Channel4, &DMA_InitStructure); /*失能DMA1的4通道,一旦使能就開始傳輸*/ DMA_Cmd (DMA1_Channel4,DISABLE); }

②DMA中斷配置

/* * @brief DMA 中斷配置 * @param 無 * @retval 無 */void DMA_NVIC_Configuration(void){ NVIC_InitTypeDef NVIC_InitStructure; /* 配置中斷源 */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
/* 配置DMA發(fā)送完成后產生中斷 */ DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);}

③啟動傳輸

DMA_Cmd (DMA1_Channel4,ENABLE);

2、利用DMA實現循環(huán)傳輸

方法1:單次傳輸模式

當傳輸結束時,觸發(fā)DMA中斷,在中斷程序中首先失能DMA通道,然后修改該通道的傳輸數據量。最后重新使能DMA通道,注意只有失能的DMA通道才能成功修改傳輸數據量。


方法2:循環(huán)傳輸模式

當傳輸結束時,硬件自動會將傳輸數據量寄存器進行重裝,進行下一輪的數據傳輸。


四、再談STM32的DMA傳輸是否影響CPU的運行速度

聲明:經過筆者測試,當DMA工作在內存到外設的傳輸和內存到內存的傳輸時,都不會影響CPU的運行速度。為了給這種現象一個合理的解釋,筆者做以下猜測:

1、S3C2440的DMA傳輸

S3C2440的SDRAM是外置的,并且SDRAM的數據線、地址線、控制線總共只有一組。假設DMA傳輸的方向是內存到外設,當DMA運作時,需要占用SDRAM的三類線才才能實現傳輸;而與此同時CPU也需要通過這三類線來訪問SDRAM來讀取程序、讀寫數據。

顯然,DMA的運行與CPU的運行有交叉點,DMA就會影響到CPU的運行。

2、STM32的DMA傳輸

STM32與S3C2440的區(qū)別是很大的,S3C2440是微處理器,RAM外置且空間很大;STM32是微控制器,RAM片內集成且空間較小。此時,ST公司就有可能提升DMA的運作效率,使DMA的工作不影響到CPU的運行。外設與外設之間的DMA傳輸,因為與CPU的運行沒有交叉點(CPU的數據流注意是在Flash、內存、寄存器中傳輸),所以不會影響CPU的運行速度。唯一有可能影響的是外設與內存或者內存與內存之間的DMA傳輸。倘若ST公司的SRAM是一個雙口RAM,也就是同時可以由兩組接口對RAM進行訪問,就可以很好的解決速度影響問題。倘若CPU恒定占有一組接口,而另一組接口留給DMA控制器。那么當外設與內存或者內存與內存之間的DMA傳輸時,由于不與CPU的訪問SRAM接口沖突,所以可以解決速度影響問題。但其實偶爾還是會影響的,當CPU訪問SRAM的空間和DMA訪問SRAM的空間相同時,SRAM勢必會對這種情況進行仲裁,這可能會影響到CPU的訪問SRAM的速度。其實,這種情況的概率也是很小的,所以即使影響CPU的運行速度,也不會很大。

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

    關注

    31

    文章

    5587

    瀏覽量

    128993
  • STM32
    +關注

    關注

    2305

    文章

    11118

    瀏覽量

    370956
  • dma
    dma
    +關注

    關注

    3

    文章

    577

    瀏覽量

    105291
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    天下武功 唯快不破 ——高幀率CMOS圖像傳感器

    高幀率CMOS圖像傳感器是現代視覺系統(tǒng)從“看得見”邁向“看得清”、“看得懂”的關鍵一環(huán)。它通過捕捉和解析高速瞬態(tài)過程,為工業(yè)自動化、科學探索、安全保障和藝術創(chuàng)作提供了前所未有的洞察力。隨著技術的不斷
    的頭像 發(fā)表于 11-16 21:13 ?71次閱讀
    天下武功 唯快不破 ——高幀率CMOS圖像傳感器

    感知即安全:安防監(jiān)控系統(tǒng)的價值重構

    在數字技術飛速發(fā)展的當下,安防監(jiān)控系統(tǒng)正在經歷一場深刻的認知革命。這套系統(tǒng)已不再滿足于傳統(tǒng)意義上的“看得見”,而是向著“看得懂、能預警、會思考”的智能視覺中樞演進,成為城市治理和企業(yè)運營的視覺神經
    的頭像 發(fā)表于 10-22 14:43 ?92次閱讀

    聆思大模型智能FAE,看得懂技術,答得準問題

    聆思大模型智能FAE,看得懂技術,答得準問題 在智能硬件開發(fā)的嵌入式技術支持中,響應遲緩、人員培訓成本高企、服務時間覆蓋不足等痛點,常常制約FAE團隊效率 聆思大模型智能FAE作為專為智能硬件
    發(fā)表于 09-30 11:29

    stm32支持canfd和dma結合使用嗎?

    stm32支持canfd和dma結合使用嗎
    發(fā)表于 08-01 07:15

    索尼水產養(yǎng)殖智能監(jiān)控攝像頭模塊——FCB-EV9520L

    當傳統(tǒng)攝像機還在為“看得見”掙扎時,索尼FCB-EV9520L已通過寬動態(tài)與HDR技術,為水產養(yǎng)殖行業(yè)打開“看得清、看得懂、用得好”的新維度。
    的頭像 發(fā)表于 07-18 17:24 ?513次閱讀

    瑞芯微全新AI視覺芯片RV1126B:多場景智能終端方案介紹

    技術、硬件級安全機制等創(chuàng)新特性,為智慧安防、工業(yè)視覺、智慧車載、服務機器人等AIoT應用場景提供強大助力,推動終端設備從「看得清」邁向「看得懂」的全新階段。RV1
    的頭像 發(fā)表于 07-16 17:00 ?4159次閱讀
    瑞芯微全新AI視覺芯片RV1126B:多場景智能終端方案介紹

    高光譜相機讓農業(yè)“看得懂作物”!病蟲害一拍識別

    在傳統(tǒng)農業(yè)中,判斷作物是否健康,主要依賴經驗和肉眼觀察:葉子黃了,是不是缺氮?葉片上有斑,是不是病害?但這些判斷不僅主觀性強,而且往往滯后——等肉眼看到問題,作物可能已經受損。 現在,一種新技術正在改變這一切。它就是 高光譜相機 。在智慧農業(yè)場景中,它被稱為“作物的醫(yī)生眼”,能看見作物細胞層級的變化,用光譜語言解讀植物的真實狀態(tài)。 一、什么是高光譜相機? 高光譜相機不是普通照相機。它不是拍“彩照”,而是捕捉物
    的頭像 發(fā)表于 06-12 18:25 ?549次閱讀
    高光譜相機讓農業(yè)“<b class='flag-5'>看得懂</b>作物”!病蟲害一拍識別

    觀測云:從云時代走向AI時代

    、業(yè)務鏈路的全面掌控。 5月13日的產品發(fā)布會上,我們正式宣布: 觀測云,已從云時代邁入 AI 時代。 在數據量爆炸、系統(tǒng)復雜度日益提升的今天,僅依靠傳統(tǒng)的監(jiān)控手段已經難以滿足企業(yè)對“看得見、看得懂看得清”的需求。從早期的
    的頭像 發(fā)表于 05-15 10:47 ?571次閱讀

    傳統(tǒng)攝像頭為什么需要升級為AI盒子?多場景痛點解析

    系統(tǒng)具備了“看得懂”的能力,大幅提升了管理效率并降低了人力成本。?? 那么, 為什么傳統(tǒng)攝像頭需要升級AI盒子? 哪些場景必須依賴AI分析?小編將從安防、零售、工業(yè)三大典型場景出發(fā),解析傳統(tǒng)方案的痛點,并說明AI盒子如何解
    的頭像 發(fā)表于 05-14 17:53 ?746次閱讀

    經典智能電路300例

    328例智能電路中,使讀者看得懂用得上。 純分享貼,有需要可以直接下載附件獲取文檔! (如果內容有幫助可以關注、點贊、評論支持一下哦~)
    發(fā)表于 04-19 15:26

    涂鴉打造超強AI IPC技術!深度融合視覺+聽覺感知能力,顛覆傳統(tǒng)IPC交互玩法

    隨著AI大模型能力的突破與成本的下降,IPC開始從單一的“看得見”向“看得懂”迭代,并進一步向“智能交互、主動決策”的方向升級演進。目前主流設備已標配三大能力:即智能識別與分析、多模態(tài)交互與自動化管
    的頭像 發(fā)表于 04-17 18:20 ?870次閱讀
    涂鴉打造超強AI IPC技術!深度融合視覺+聽覺感知能力,顛覆傳統(tǒng)IPC交互玩法

    STM32虛擬仿真系統(tǒng):零基礎小白到嵌入式全棧工程師的進階秘籍

    在嵌入式開發(fā)領域,硬件原理的抽象性和項目全流程的復雜性一直是初學者面臨的挑戰(zhàn),尤其是像STM32單片機開發(fā)這種軟硬件結合的方向,初學者很容易被復雜的硬件知識、寄存器配置、PCB設計這些東西勸退
    的頭像 發(fā)表于 03-12 11:46 ?1027次閱讀
    <b class='flag-5'>STM32</b>虛擬仿真系統(tǒng):零基礎<b class='flag-5'>小白</b>到嵌入式全棧工程師的進階秘籍

    STM32H7ZGT6使用SPI+DMA方式驅動屏幕,使用DMA方式會花屏,為什么?

    STM32H7ZGT6使用SPI+DMA方式驅動屏幕時候,使用阻塞式發(fā)送不會花屏幕,但是使用DMA方式會花屏。
    發(fā)表于 03-12 06:03

    ZYNQ基礎---AXI DMA使用

    前言 在ZYNQ中進行PL-PS數據交互的時候,經常會使用到DMA,其實在前面的ZYNQ學習當中,也有學習過DMA的使用,那就是通過使用自定義的IP,完成HP接口向內存寫入和讀取數據的方式。同樣
    的頭像 發(fā)表于 01-06 11:13 ?3536次閱讀
    ZYNQ基礎---AXI <b class='flag-5'>DMA</b>使用