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

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

一、DMA功能簡介

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

二、DMA的主要特性

  

三、DMA中斷特性

四、DMA之串口通信

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

  

1、LED初始化程序如下:

1234567891011121314151617voidLED_GPIO_Config(void){/*定義一個GPIO_InitTypeDef類型的結構體*/GPIO_InitTypeDef GPIO_InitStructure;/*開啟LED的外設時鐘*/RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);/*選擇要控制的GPIOB引腳*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;/*設置引腳模式為通用推挽輸出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/*設置引腳速率為50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/*調用庫函數(shù),初始化GPIOB0*/GPIO_Init(GPIOB, &GPIO_InitStructure);/* 關閉所有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();/*設置DMA源:串口數(shù)據(jù)寄存器地址*/DMA_InitStructure.DMA_PeripheralBaseAddr = USART3_DR_Base;/*內存地址(要傳輸?shù)淖兞康闹羔?*/DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;/*方向:從內存到外設*/DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;/*傳輸大小DMA_BufferSize=SENDBUFF_SIZE*/DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;/*外設地址不增*/DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;/*內存地址自增*/DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;/*外設數(shù)據(jù)單位*/DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;/*內存數(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;/*禁止內存到內存的傳輸 */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);}

在這里我們要注意以下幾點:

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

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

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

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

(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

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

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

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

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

關鍵字: STM32 溫度傳感器

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

關鍵字: 單片機 中斷 boot

在能源效率與智能化需求雙重驅動下,AC-DC轉換器的數(shù)字控制技術正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構的深刻變革?;赟TM32微控制器的PFM(脈沖頻率調制)+PWM(脈沖寬度調制)混合調制策略,結合動態(tài)電壓調整(Dynam...

關鍵字: AC-DC STM32

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

關鍵字: STM32 麥克納姆輪 安全可靠 通過性強

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

關鍵字: Visuino Arduino ESP32 STM32

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

關鍵字: STM32 LoRa

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

關鍵字: STM32 DMA

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

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

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

關鍵字: STM32 電機控制
關閉