




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章DMA控制器STM32微控制器原理及應(yīng)用本章教學(xué)目標(biāo)DMA的概念與作用DMA的工作原理STM32的DMA結(jié)構(gòu)與工作特點(diǎn)DMA寄存器的作用DMA的工作方式配置以及庫(kù)函數(shù)功能DMA應(yīng)用程序設(shè)計(jì)方法主要內(nèi)容8.1概述8.2STM32的DMA簡(jiǎn)介8.3DMA寄存器8.4DMA庫(kù)函數(shù)8.5DMA應(yīng)用舉例8.1概述由于外圍設(shè)備速度較慢,CPU不能像讀寫存儲(chǔ)器那樣直接讀寫外設(shè),為了解決速度不匹配的問(wèn)題,CPU與外設(shè)之間傳輸數(shù)據(jù)要采取多種方式,主要有延時(shí)方式、查詢方式、中斷方式,以及DMA方式,前三種方式都是軟件控制完成數(shù)據(jù)傳送,而DMA方式是由DMA控制器來(lái)控制數(shù)據(jù)的傳輸過(guò)程。DMA控制數(shù)據(jù)傳送的操作順序說(shuō)明如下:①I/O設(shè)備準(zhǔn)備好后,向DMA控制器(DMAController,DMAC)發(fā)出DMA請(qǐng)求信號(hào)。②DMAC向CPU發(fā)出占用總線請(qǐng)求信號(hào)。③按照預(yù)定的DMAC占用總線方式,CPU響應(yīng)總線請(qǐng)求,向DMAC發(fā)出總線響應(yīng)信號(hào),讓出總線控制權(quán),總線控制權(quán)交由DMAC接管。④DMAC接管總線后,先向I/O接口發(fā)出DMA響應(yīng)信號(hào),表示允許外設(shè)進(jìn)行DMA傳送。然后按事先設(shè)置的初始地址和需傳送的字節(jié)數(shù),依次發(fā)送地址和讀寫命令,使內(nèi)存和I/O接口直接交換數(shù)據(jù),直至全部數(shù)據(jù)交換完畢。⑤DMA傳送結(jié)束后,自動(dòng)撤消向CPU的總線請(qǐng)求信號(hào),從而使總線響應(yīng)和DMA響應(yīng)信號(hào)相繼變?yōu)闊o(wú)效,CPU又重新控制總線,恢復(fù)正常工作。DMA控制原理圖8.2STM32的DMA簡(jiǎn)介12個(gè)獨(dú)立的可配置的通道(請(qǐng)求):DMA1有7個(gè)通道,DMA2有5個(gè)通道每個(gè)通道都直接連接專用的硬件DMA請(qǐng)求,每個(gè)通道都同樣支持軟件觸發(fā)。在同一個(gè)DMA模塊上,多個(gè)請(qǐng)求間的優(yōu)先權(quán)可以通過(guò)軟件編程設(shè)置,優(yōu)先權(quán)共有四級(jí):很高、高、中等和低,優(yōu)先權(quán)設(shè)置相等時(shí)由硬件決定。獨(dú)立數(shù)據(jù)源和目標(biāo)數(shù)據(jù)區(qū)的傳輸寬度(字節(jié)、半字、全字),模擬打包和拆包的過(guò)程。源和目標(biāo)地址必須按數(shù)據(jù)傳輸寬度對(duì)齊。支持循環(huán)的緩沖器管理。每個(gè)通道都有3個(gè)事件標(biāo)志(DMA半傳輸、DMA傳輸完成和DMA傳輸出錯(cuò)),這3個(gè)事件標(biāo)志邏輯或成為一個(gè)單獨(dú)的中斷請(qǐng)求。存儲(chǔ)器和存儲(chǔ)器間的傳輸。存儲(chǔ)器和外設(shè)之間的傳輸。閃存、SRAM、外設(shè)的SRAM、APB1、APB2和AHB外設(shè)均可作為訪問(wèn)的源和目標(biāo)。可編程的數(shù)據(jù)傳輸數(shù)目最大為65535。8.3DMA寄存器DMA寄存器包括:DMA中斷狀態(tài)寄存器(DMA_ISR)DMA中斷標(biāo)志清除寄存器(DMA_IFCR)各個(gè)通道獨(dú)立的配置寄存器(DMA_CCRx)傳輸數(shù)量寄存器(DMA_CNDTRx)外設(shè)地址寄存器(DMA_CPARx)存儲(chǔ)器地址寄存器(DMA_CMARx)8.4DMA庫(kù)函數(shù)函數(shù)DMA_Init函數(shù)原形:voidDMA_Init(DMA_Channel_TypeDef*DMA_Channelx,DMA_InitTypeDef*DMA_InitStruct)功能描述:根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道x寄存器輸入?yún)?shù)DMA_Channelx選擇DMA通道x(x=1~7)。輸入?yún)?shù)DMA_InitStruct為指向結(jié)構(gòu)DMA_InitTypeDef的指針,包含了DMA通道x的配置信息。例如,下面的程序段完成根據(jù)DMA_InitStructure的成員值對(duì)DMA通道1初始化。DMA_InitTypeDefDMA_InitStructure;DMA_InitStructure.DMA_PeripheralBaseAddr=0x40005400;DMA_InitStructure.DMA_MemoryBaseAddr=0x20000100;DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize=256;DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;DMA_Init(DMA_Channel1,&DMA_InitStructure);函數(shù)DMA_ITConfig函數(shù)原形:voidDMA_ITConfig(DMA_Channel_TypeDef* DMA_Channelx,u32DMA_IT,FunctionalStateNewState)功能描述:使能或者失能指定的通道x中斷輸入?yún)?shù)DMAChannelx:選擇DMA通道x輸入?yún)?shù)DMA_IT:待使能或者失能的DMA中斷源,使用操作符“|”可以同時(shí)選中多個(gè)DMA中斷源。例如,下面語(yǔ)句允許DMA通道5數(shù)據(jù)傳輸完成產(chǎn)生中斷。DMA_ITConfig(DMA_Channel5,DMA_IT_TC,ENABLE);8.5DMA應(yīng)用程序設(shè)計(jì)8.5.1存儲(chǔ)器到存儲(chǔ)器的DMA傳輸一、設(shè)計(jì)要求:編寫程序完成存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送,并將傳送前后的結(jié)果上傳到PC機(jī),同時(shí)LED閃爍。二、硬件電路設(shè)計(jì):STM32的PC6外接LED,STM32的串口與PC機(jī)串口相連,硬件結(jié)構(gòu)如圖8-8所示。主程序流程圖部分源代碼#include"stm32f10x.h"#include<stdio.h>voidRCC_Configuration(void);voidGPIO_Configuration(void);voidDMA_Configuration(void);voiddelay_nms(u16time);voidUSART_Configuration(void);intfputc(intch,FILE*f);u8SrcStr[10]="0123456789";u8DstStr[10]="ABCDEFGHIJ";intmain(void){ RCC_Configuration(); GPIO_Configuration(); DMA_Configuration(); USART_Configuration(); USART_ClearFlag(USART1,USART_FLAG_TC); printf("MEM2MEM傳輸之前:\n"); printf("DstBuf:%s\n",DstStr); printf("SrcBuf:%s\n",SrcStr); DMA_Cmd(DMA1_Channel1,ENABLE); printf("MEM2MEM傳輸之后:\n"); printf("DstBuf:%s\n",DstStr); printf("SrcBuf:%s\n",SrcStr); while(1) {GPIO_SetBits(GPIOA,GPIO_Pin_6);//PA6置位,LED燈滅
delay_nms(200); GPIO_ResetBits(GPIOA,GPIO_Pin_6);//PA6清零,LED燈亮
delay_nms(200);}}voidDMA_Configuration(void){DMA_InitTypeDefDMA_InitStructure;DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)SrcStr;DMA_InitStructure.DMA_MemoryBaseAddr=(u32)DstStr; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize=10; DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode=DMA_Mode_Normal; DMA_InitStructure.DMA_Priority=DMA_Priority_High; DMA_InitStructure.DMA_M2M=DMA_M2M_Enable; DMA_Init(DMA1_Channel1,&DMA_InitStructure);}voidUSART_Configuration(void){ USART_InitTypeDefUSART_InitStructure; USART_InitStructure.USART_BaudRate=9600;//波特率9600bps
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_Tx; USART_Init(USART1,&USART_InitStructure);//初始化串口
USART_Cmd(USART1,ENABLE);//啟動(dòng)USART1}//重定向fputc()函數(shù),將字符ch打印到串口1(需要勾選了Target->UseMicroLib選項(xiàng))intfputc(intch,FILE*f){if(ch=='\n’){while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);USART_SendData(USART1,'\r’);}while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);USART_SendData(USART1,ch);returnch;}練習(xí)題8-1.DMA的英文全稱是什么?8-2.DMA技術(shù)有什么優(yōu)點(diǎn)?8-3.簡(jiǎn)述DMA的工作過(guò)程。8-4.STM32有幾個(gè)DMA控制器?各自有多少DMA請(qǐng)求通道?8-5.寫出使能DMA1時(shí)鐘的函數(shù)。8-6.每個(gè)通道都有3個(gè)事件標(biāo)志,分別是什么?8-7.解釋結(jié)構(gòu)體DMA_InitTypeDef中各成員變量的含義。練習(xí)題8-7.解釋結(jié)構(gòu)體DMA_InitT
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《網(wǎng)頁(yè)設(shè)計(jì)與制作》課件-靜態(tài)網(wǎng)頁(yè)與動(dòng)態(tài)網(wǎng)頁(yè)
- 2025年小學(xué)教師資格考試《綜合素質(zhì)》教育案例全面分析及反思試題(含答案)
- 2025年消防執(zhí)業(yè)資格考試題庫(kù):消防應(yīng)急救援裝備性能測(cè)試與試題
- 2025年安全生產(chǎn)隱患排查治理考試模擬題庫(kù)
- 2025年ACCA國(guó)際注冊(cè)會(huì)計(jì)師考試真題卷:審計(jì)實(shí)務(wù)與準(zhǔn)則歷年真題解析與備考指南寶典
- 2025年西班牙語(yǔ)DELE考試真題卷:模擬試題與解題技巧解析試題
- 2 基礎(chǔ)設(shè)施行業(yè)股票分析更新
- 監(jiān)控工作流程
- 蝴蝶效應(yīng)與生物多樣性
- 谷雨季節(jié)的養(yǎng)生智慧
- 2025年海南保亭縣事業(yè)單位招聘綜合歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 污水處理設(shè)施運(yùn)維服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 2024年蘇州高博軟件技術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 紀(jì)念抗日戰(zhàn)爭(zhēng)暨世界反法西斯戰(zhàn)爭(zhēng)勝利70周年主題班會(huì) 課件
- AB變頻器使用說(shuō)明書(shū)
- 新疆維吾爾自治區(qū)和田地區(qū)各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- DB13-T2355-2016蒸壓加氣混凝土砌塊專用砂漿
- 【課件】時(shí)代與變革-為人生而藝術(shù) 課件高中美術(shù)人美版(2019)美術(shù)鑒賞
- DB44∕T 876-2011 物業(yè)服務(wù) 會(huì)務(wù)服務(wù)規(guī)范
- 橫河氧量變送器標(biāo)定及檢修
- ArcGIS應(yīng)用基礎(chǔ)培訓(xùn)(共98張)
評(píng)論
0/150
提交評(píng)論