當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]一、DMA功能簡介  首先嘮叨一下DMA的基本概念,DMA的出現(xiàn)大大減輕了CPU的工作量。在硬件系統(tǒng)中,主要由CPU(內(nèi)核)、外設(shè)、內(nèi)存(SRAM)、總線等結(jié)構(gòu)組成,數(shù)據(jù)經(jīng)常要在內(nèi)存和外設(shè)之間,外設(shè)和外設(shè)之間轉(zhuǎn)移。例如:CPU

一、DMA功能簡介

  首先嘮叨一下DMA的基本概念,DMA的出現(xiàn)大大減輕了CPU的工作量。在硬件系統(tǒng)中,主要由CPU(內(nèi)核)、外設(shè)、內(nèi)存(SRAM)、總線等結(jié)構(gòu)組成,數(shù)據(jù)經(jīng)常要在內(nèi)存和外設(shè)之間,外設(shè)和外設(shè)之間轉(zhuǎn)移。例如:CPU需要處理從外設(shè)采集回來的數(shù)據(jù),CPU需要先將數(shù)據(jù)從ADC外設(shè)的寄存器讀取到內(nèi)存中(變量)去,然后進(jìn)行運(yùn)算處理,這是一般的解決方法。CPU的資源是非常寶貴的,我們可以設(shè)法把轉(zhuǎn)移的工作交給其他部件來完成,CPU把更多的資源用于數(shù)據(jù)運(yùn)算和中斷響應(yīng)上,如此DMA便登場了。DMA正是為CPU分擔(dān)數(shù)據(jù)轉(zhuǎn)移工作,因為DMA的存在,CPU才被解放出來,它可以在數(shù)據(jù)轉(zhuǎn)移的同時進(jìn)行數(shù)據(jù)運(yùn)算,相應(yīng)中斷,大大提高了效率。

二、DMA的主要特性

  

三、DMA中斷特性

四、DMA之串口通信

  我們實(shí)現(xiàn)一個簡單的功能,在DMA中處理串口通信,把數(shù)據(jù)轉(zhuǎn)移的工作交給DMA,DMA把數(shù)據(jù)從內(nèi)存(數(shù)組)到外設(shè)(串口)的轉(zhuǎn)移,在main函數(shù)中不斷進(jìn)行閃燈操作,這樣我們可以看到DMA在工作的時候CPU也在工作。非常有必要復(fù)習(xí)一下DMA的對應(yīng)關(guān)系,我們知道stm32總共有2個DMA控制器(DMA1有7個通道,DMA2有5個通道),每個通道專門用來管理來自一個或多個外設(shè)對存儲器訪問的請求,還有一個仲裁器來協(xié)調(diào)DMA請求的優(yōu)先級(優(yōu)先級分:很高、高、中等、低),這可不是隨便對應(yīng)的。

  

1、LED初始化程序如下:

1234567891011121314151617voidLED_GPIO_Config(void){/*定義一個GPIO_InitTypeDef類型的結(jié)構(gòu)體*/GPIO_InitTypeDef GPIO_InitStructure;/*開啟LED的外設(shè)時鐘*/RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);/*選擇要控制的GPIOB引腳*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;/*設(shè)置引腳模式為通用推挽輸出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/*設(shè)置引腳速率為50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/*調(diào)用庫函數(shù),初始化GPIOB0*/GPIO_Init(GPIOB, &GPIO_InitStructure);/* 關(guān)閉所有l(wèi)ed燈 */GPIO_SetBits(GPIOB, GPIO_Pin_14);}

  這個地方地方?jīng)]什么要注意的,唯一要注意的就是輸入輸出模式,我們按需求這樣配就好了。

2、串口初始化

123456789101112131415161718192021222324252627voidUSART3_Config(void){GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART3 clock */RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE);/* USART1 GPIO config *//* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);/* USART1 mode config */USART_InitStructure.USART_BaudRate = 38400;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART3, &USART_InitStructure);USART_Cmd(USART3, ENABLE);}

3、DMA初始化

123456789101112131415161718192021222324252627282930313233343536voidUSART3_DMA_Config(void){DMA_InitTypeDef DMA_InitStructure;/*開啟DMA時鐘*/RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//NVIC_Config(); //配置DMA中斷//NVIC_Configuration();/*設(shè)置DMA源:串口數(shù)據(jù)寄存器地址*/DMA_InitStructure.DMA_PeripheralBaseAddr = USART3_DR_Base;/*內(nèi)存地址(要傳輸?shù)淖兞康闹羔?*/DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;/*方向:從內(nèi)存到外設(shè)*/DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;/*傳輸大小DMA_BufferSize=SENDBUFF_SIZE*/DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;/*外設(shè)地址不增*/DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;/*內(nèi)存地址自增*/DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;/*外設(shè)數(shù)據(jù)單位*/DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;/*內(nèi)存數(shù)據(jù)單位 8bit*/DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;/*DMA模式:不斷循環(huán)*/DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;//DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;/*優(yōu)先級:中*/DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;/*禁止內(nèi)存到內(nèi)存的傳輸 */DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;/*配置DMA1的2通道*/DMA_Init(DMA1_Channel2, &DMA_InitStructure);//DMA_ITConfig(DMA1_Channel2,DMA_IT_TC,ENABLE); //配置DMA發(fā)送完成后產(chǎn)生中斷/*使能DMA*/DMA_Cmd (DMA1_Channel2,ENABLE);}

在這里我們要注意以下幾點(diǎn):

(1)DMA_InitStructure.DMA_PeripheralBaseAddr = USART3_DR_Base;這里對應(yīng)USART數(shù)據(jù)寄存器地址,這個地址我們是這樣定義的:#define USART3_DR_Base 0x40004804,這個值是怎么算出來的呢?我們可以查看stm32存儲器映射表:

USART3的起始地址是0x40004800,我們查看stm32串口數(shù)據(jù)寄存器偏移地址為0x04

因此我們可以計算到USART3數(shù)據(jù)寄存器地址為0x40004804

(2)我們數(shù)據(jù)傳輸方向內(nèi)存(變量)到外設(shè)(串口),所以DMA方向為內(nèi)存到外設(shè)

(3)DMA傳輸模式有兩種:DMA_Mode_Normal(普通模式),DMA只傳輸一次;DMA_Mode_Circular(循環(huán)模式),DMA循環(huán)傳輸,比如在AD采集時要配置成循環(huán)模式。

4、主函數(shù)

123456789101112131415161718192021222324252627intmain(void){/* USART1 config 115200 8-N-1 */USART3_Config();USART3_DMA_Config();LED_GPIO_Config();printf("rn usart3 DMA TX 測試 rn");{ ui

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉