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

當(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)移工作,因?yàn)镈MA的存在,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

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

(2)我們數(shù)據(jù)傳輸方向內(nèi)存(變量)到外設(shè)(串口),所以DMA方向?yàn)閮?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)系本站刪除。
換一批
延伸閱讀

在嵌入式開發(fā)中,STM32的時鐘系統(tǒng)因其靈活性和復(fù)雜性成為開發(fā)者關(guān)注的焦點(diǎn)。然而,看似簡單的時鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導(dǎo)致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時鐘源選擇、PLL配置、總線時鐘分配等關(guān)鍵環(huán)...

關(guān)鍵字: STM32 時鐘系統(tǒng)

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應(yīng)用于設(shè)備自檢、環(huán)境監(jiān)測等場景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準(zhǔn)算法、軟...

關(guān)鍵字: STM32 溫度傳感器

單片機(jī)將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關(guān)情況以及信息有所認(rèn)識和了解,詳細(xì)內(nèi)容如下。

關(guān)鍵字: 單片機(jī) 中斷 boot

在能源效率與智能化需求雙重驅(qū)動下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術(shù)正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構(gòu)的深刻變革。基于STM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結(jié)合動態(tài)電壓調(diào)整(Dynam...

關(guān)鍵字: AC-DC STM32

當(dāng)前智能家居產(chǎn)品需求不斷增長 ,在這一背景下 ,對現(xiàn)有澆花裝置缺陷進(jìn)行了改進(jìn) ,設(shè)計(jì)出基于STM32單片機(jī)的全 自動家用澆花機(jī)器人。該設(shè)計(jì)主要由機(jī)械結(jié)構(gòu)和控制系統(tǒng)構(gòu)成 ,機(jī)械結(jié)構(gòu)通過麥克納姆輪底盤與噴灑裝置的結(jié)合實(shí)現(xiàn)機(jī)器...

關(guān)鍵字: STM32 麥克納姆輪 安全可靠 通過性強(qiáng)

用c++編程似乎是讓你的Arduino項(xiàng)目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個圖形化編程平臺將復(fù)雜電子項(xiàng)目的創(chuàng)建變成了拖動和連接塊的簡單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術(shù)的無線傳感網(wǎng)絡(luò)憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測、工業(yè)自動化等場景的核心解決方案。然而,如何在復(fù)雜電磁環(huán)境中實(shí)現(xiàn)高效休眠調(diào)度與動態(tài)信道優(yōu)化,成為提升網(wǎng)絡(luò)能效與可靠性的關(guān)鍵挑戰(zhàn)。本...

關(guān)鍵字: STM32 LoRa

在實(shí)時控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對時間敏感的應(yīng)用場景中,中斷響應(yīng)延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(DMA)...

關(guān)鍵字: STM32 DMA

數(shù)字電源技術(shù)向高功率密度、高效率與高動態(tài)響應(yīng)方向加速演進(jìn),STM32微控制器憑借其基于DSP庫的算法加速能力與對LLC諧振變換器的精準(zhǔn)控制架構(gòu),成為優(yōu)化電源動態(tài)性能的核心平臺。相較于傳統(tǒng)模擬控制或通用型數(shù)字控制器,STM...

關(guān)鍵字: STM32 數(shù)字電源

STM32微控制器憑借其針對電機(jī)控制場景的深度優(yōu)化,成為高精度、高可靠性驅(qū)動系統(tǒng)的核心選擇。相較于通用型MCU,STM32在電機(jī)控制領(lǐng)域的核心優(yōu)勢集中體現(xiàn)在FOC(磁場定向控制)算法的硬件加速引擎與PWM死區(qū)時間的動態(tài)補(bǔ)...

關(guān)鍵字: STM32 電機(jī)控制
關(guān)閉