版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式系統(tǒng)導(dǎo)論主講教師:第8章STM32的DMA接口本章內(nèi)容提要8.1DMA控制器8.2DMA應(yīng)用示例:USART接口的DMA傳輸8.3DMA、USART和GPIO的綜合應(yīng)用數(shù)據(jù)傳送方式程序查詢傳送中斷傳送DMA傳送8.1DMA控制器DMA傳送希望克服程序控制傳送的不足:外設(shè)→CPU→存儲(chǔ)器外設(shè)←CPU←存儲(chǔ)器直接存儲(chǔ)器存取DMA:外設(shè)→存儲(chǔ)器外設(shè)←存儲(chǔ)器CPU釋放總線,由DMA控制器管理查詢要等,中斷太煩,來(lái)個(gè)直接的DMA傳送過(guò)程1)DMA預(yù)處理2)DMA請(qǐng)求和應(yīng)答3)DMA傳送DMA讀:存儲(chǔ)器→外設(shè)DMA寫:存儲(chǔ)器←外設(shè)4)增減地址和計(jì)數(shù),判斷傳送是否完成STM32的DMA控制器直接存儲(chǔ)器存取DMA(DirectMemoryAccess)利用系統(tǒng)總線直接在外設(shè)與存儲(chǔ)器之間進(jìn)行 大量和高速數(shù)據(jù)傳輸?shù)姆椒⊿TM32設(shè)計(jì)有2個(gè)DMA控制器單元DMA1單元,支持7個(gè)DMA通道DMA2單元,支持5個(gè)DMA通道具有多達(dá)12個(gè)獨(dú)立的可配置DMA通道支持存儲(chǔ)器到存儲(chǔ)器、外設(shè)到存儲(chǔ)器、 存儲(chǔ)器到外設(shè)和外設(shè)到外設(shè)的自動(dòng)傳輸每個(gè)通道都支持軟件觸發(fā)DMA框圖DMA1各通道的請(qǐng)求外設(shè)通道1通道2通道3通道4通道5通道6通道7ADC1ADC1SPI/I2SSPI1_RXSPI1_TXSPI/I2S2_RXSPI/I2S2_TXUSARTUSART3_TXUSART3_RXUSART1_TXUSART1_RXUSART2_RXUSART2_TXI2CI2C2_TXI2C2_RXI2C1_TXI2C1_RXTIM1TIM1_CH1TIM1_CH4TIM1_TRIGTIM1_COMTIM1_UPTIM1_CH3TIM2TIM2_CH3TIM2_UPTIM2_CH1TIM2_CH2TIM2_CH4TIM3TIM3_CH3TIM3_CH3TIM3_UPTIM3_CH1TIM3_TRIGTIM4TIM4_CH1TIM4_CH2TIM4_CH3TIM4_UPDMA1各條通道連接的外設(shè)參考手冊(cè)STM32主要外設(shè)都支持DMADMA2各通道的請(qǐng)求外設(shè)通道1通道2通道3通道4通道5ADC3ADC3SPI/I2S3SPI/I2S3_RXSPI/I2S3_TXUART4UART4_RXUART4_TXSDIOSDIOTIM5TIM1_CH1TIM1_CH4TIM1_TRIGTIM1_COMTIM1_UPTIM6/DAC_Channel1TIM6_UP/DAC_Channel1TIM7TIM7_UP/DAC_Channel2TIM8TIM8_CH3TIM8_UPTIM8_CH4TIM8_TRIGTIM8_COMTIM8_CH1TIM8_CH2DMA2各條通道連接的外設(shè)DMA通道的優(yōu)先級(jí)和中斷每個(gè)DMA通道可以由應(yīng)用程序賦予4個(gè)優(yōu)先級(jí)之一(很高、高級(jí)、中級(jí)和低級(jí))在仲裁階段,高優(yōu)先級(jí)的通道優(yōu)先獲得總線響應(yīng)相同優(yōu)先級(jí)時(shí),通道號(hào)小的通道優(yōu)先獲得總線響應(yīng)每個(gè)DMA通道都可以在3個(gè)時(shí)刻產(chǎn)生中斷請(qǐng)求DMA傳輸過(guò)半HTIFDMA傳輸完成TCIFDMA傳輸錯(cuò)誤TEIF每個(gè)DMA通道都有自己的中斷向量(除大容量產(chǎn)品中,DMA2通道4和DMA2通道5的中斷被映射在同一個(gè)中斷向量上)DMA通道的寄存器每個(gè)DMA通道由4個(gè)寄存器控制配置寄存器CCR定義DMA傳輸?shù)奶匦詡鬏敂?shù)量寄存器CNDTR保存?zhèn)鬏數(shù)臄?shù)據(jù)個(gè)數(shù)外設(shè)地址寄存器CPAR保存外設(shè)的地址存儲(chǔ)器地址寄存器CMAR保存存儲(chǔ)器的地址中斷操作由兩個(gè)中斷寄存器控制中斷狀態(tài)寄存器ISR中斷標(biāo)志清除寄存器IFCR參考手冊(cè)DMA寄存器寄存器縮寫寄存器中文名稱DMA_CCR配置寄存器DMA_CNDTR傳輸數(shù)量寄存器DMA_CPAR外設(shè)地址寄存器DMA_CMAR存儲(chǔ)器地址寄存器DMA_ISR中斷狀態(tài)寄存器DMA_IFCR中斷標(biāo)志清除寄存器8.2DMA應(yīng)用示例:USART接口的DMA傳輸【例8-1】將主存一個(gè)數(shù)據(jù)塊采用DMA方式傳輸?shù)経SART1發(fā)送接口(TX)DMA傳輸前,讓所有LED燈滅DMA傳輸中,處理器繼續(xù)執(zhí)行程序讓LED1燈亮DMA傳輸后,產(chǎn)生中斷讓LED2燈亮將USART1端口連接PC機(jī)串口,重定向在PC機(jī)遠(yuǎn)程終端程序中顯示傳輸結(jié)果使用DMA方式進(jìn)行USART1發(fā)送屬于DMA1單元的通道4(USART1_TX)DMA傳輸?shù)拈_發(fā)方法使用DMA傳輸之前,需要進(jìn)行DMA初始化配置(1)開啟DMA時(shí)鐘:RCC_AHBPeriphClockCmd函數(shù)(2)如果使用中斷,進(jìn)行DMA的NVIC配置(3)DMA傳輸?shù)膮?shù)配置:DMA_Init函數(shù)(4)允許DMA傳輸:DMA_Cmd函數(shù)(5)如果使用中斷,設(shè)置DMA傳輸何時(shí)產(chǎn)生中斷:
DMA_ITConfig函數(shù)當(dāng)進(jìn)行DMA傳輸時(shí),需要進(jìn)行DMA請(qǐng)求例如,USART使用USART_DMACmd函數(shù)開始DMA傳輸后,處理器可以繼續(xù)執(zhí)行程序啟動(dòng)DMA單元時(shí)鐘使用STM32庫(kù)函數(shù)
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMAx,ENABLE);DMAx是DMA1或DMA2直接寄存器編程通過(guò)允許RCC單元的AHB時(shí)鐘寄存器實(shí)現(xiàn)
RCC->AHBENR|=0x000000001; //允許DMA時(shí)鐘DMA初始化DMA初始化函數(shù)
voidDMA_Init(DMA_Channel_TypeDef*DMAy_Channelx,DMA_InitTypeDef*DMA_InitStruct)按照DMA_InitStruct結(jié)構(gòu)變量初始化DMAy通道x(y=1、2,x=1~12)DMA_InitStruct是指向DMA_InitTypeDef結(jié)構(gòu)體的指針,包含對(duì)DMA通道的配置信息幫助文檔DMA初始化結(jié)構(gòu)類型DMA_InitTypeDeftypedef
struct{uint32_tDMA_PeripheralBaseAddr; /*外設(shè)基地址*/uint32_tDMA_MemoryBaseAddr;/*存儲(chǔ)器基地址*/uint32_tDMA_DIR; /*傳輸方向:外設(shè)是源還是目的*/uint32_tDMA_BufferSize; /*緩沖區(qū)大小*/uint32_tDMA_PeripheralInc; /*外設(shè)地址是否增量*/uint32_tDMA_MemoryInc; /*存儲(chǔ)器地址是否增量*/uint32_tDMA_PeripheralDataSize; /*外設(shè)數(shù)據(jù)寬度*/uint32_tDMA_MemoryDataSize; /*存儲(chǔ)器數(shù)據(jù)寬度*/uint32_tDMA_Mode;
/*操作模式*/
uint32_tDMA_Priority; /*軟件優(yōu)先級(jí)*/uint32_tDMA_M2M; /*是否存儲(chǔ)器到存儲(chǔ)器傳輸*/}DMA_InitTypeDef;DMA_InitTypeDef成員-1成員1:DMA_PeripheralBaseAddr,外設(shè)基地址本例的外設(shè)是USART1數(shù)據(jù)寄存器(USART1_DR)需要用戶定義給出這個(gè)地址(STM32庫(kù)沒(méi)有定義)成員2:DMA_MemoryBaseAddr,存儲(chǔ)器基地址通常是用戶程序定義的主存緩沖區(qū)首地址成員3:DMA_DIR,傳輸方向選擇外設(shè)是源(DMA_DIR_PeripheralSRC)還是目的(DMA_DIR_PeripheralDST)成員4:DMA_BufferSize,緩沖區(qū)大小傳輸?shù)臄?shù)據(jù)量(直接給出數(shù)值)單位是成員7給出的DMA_PeripheralDataSizeDMA_InitTypeDef成員-2成員5:DMA_PeripheralInc,外設(shè)地址增量允許(DMA_PeripheralInc_Enable)禁止(DMA_PeripheralInc_Disable)成員6:DMA_MemoryInc,存儲(chǔ)器地址增量允許(DMA_MemoryInc_Enable)禁止(DMA_MemoryInc_Disable)成員7:DMA_PeripheralDataSize,外設(shè)數(shù)據(jù)寬度字節(jié)(DMA_PeripheralDataSize_Byte)半字(DMA_PeripheralDataSize_HalfWord)字(DMA_PeripheralDataSize_Word)DMA_InitTypeDef成員-3成員8:DMA_MemoryDataSize,存儲(chǔ)器數(shù)據(jù)寬度字節(jié)(DMA_MemoryDataSize_Byte)半字(DMA_MemoryDataSize_HalfWord)字(DMA_MemoryDataSize_Word)成員9:DMA_Mode,操作模式正常(DMA_Mode_Normal):一次性傳輸循環(huán)(DMA_Mode_Circular):自動(dòng)重復(fù)傳輸DMA_InitTypeDef成員-4成員10:DMA_Priority,軟件優(yōu)先級(jí)選擇通道的4個(gè)優(yōu)先級(jí)之一很高(DMA_Priority_VeryHigh)高級(jí)(DMA_Priority_High)中級(jí)(DMA_Priority_Medium)低級(jí)(DMA_Priority_Low)成員11:DMA_M2M,存儲(chǔ)器到存儲(chǔ)器傳輸允許(DMA_M2M_Enable)禁止(DMA_M2M_Disable)DMA初始化配置頭文件dma.h配置DMA傳輸?shù)耐庠O(shè)基地址(USART1數(shù)據(jù)寄存器DR)(DMA_InitStructure.DMA_PeripheralBaseAddr)STM32庫(kù)的頭文件沒(méi)有定義USART1_DR地址查閱STM32參考手冊(cè)USART1的起始地址(0x40013800)數(shù)據(jù)寄存器DR在USART的偏移量(0x04)相加得到USART1_DR地址(0x40013804)
#defineUSART1_DR_Base0x40013804#defineSENDBUF_SIZE0x4000 //緩沖區(qū)大小voidDMA1_Config(void);DMA配置源文件dma.c-1/*DMA的中斷配置函數(shù)*/voidNVIC_Config(void){NVIC_InitTypeDef
NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);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配置源文件dma.c-2//USART1進(jìn)行DMA傳送的初始化配置(含中斷配置)uint8_t
SendBuf[SENDBUF_SIZE];//發(fā)送緩沖區(qū)voidDMA1_Config(void){DMA_InitTypeDefDMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); NVIC_Config(); /*配置DMA中斷
*/
//設(shè)置DMA源:串口數(shù)據(jù)寄存器地址
DMA_InitStructure.DMA_PeripheralBaseAddr=USART1_DR_Base;DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)SendBuf;/*內(nèi)存地址(要傳輸?shù)淖兞康闹羔?*/
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;/*方向:從內(nèi)存到外設(shè)*/DMA配置源文件dma.c-3
DMA_InitStructure.DMA_BufferSize=SENDBUF_SIZE; /*傳輸大小*/
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; /*外設(shè)地址不增*/
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
/*內(nèi)存地址自增*/
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
/*外設(shè)數(shù)據(jù)單位,字節(jié)*/
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
/*內(nèi)存數(shù)據(jù)單位,字節(jié)*/
DMA_InitStructure.DMA_Mode=DMA_Mode_Normal; /*DMA模式:一次傳輸,不循環(huán)*/DMA配置源文件dma.c-4
DMA_InitStructure.DMA_Priority=MA_Priority_Medium; /*優(yōu)先級(jí):中*/DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; /*禁止內(nèi)存到內(nèi)存的傳輸 */
DMA_Init(DMA1_Channel4,&DMA_InitStructure);
/*配置DMA1的4通道*/
DMA_Cmd(DMA1_Channel4,ENABLE); /*允許DMA1的4通道進(jìn)行DMA傳輸
*/
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE); /*設(shè)置DMA1的4通道DMA傳輸完成產(chǎn)生中斷*/}幫助文檔進(jìn)行DMA傳輸?shù)闹鞒绦騧ain.c-1int
main(void){ inti; USART1_Config();
//
USART1配置:1152008-N-1
DMA1_Config();
LED_Config();
LED_Off_all(); //LED燈全滅
for(i=0;i<SENDBUFF_SIZE;i++) {SendBuf[i]='A'; //填充緩沖區(qū)
}進(jìn)行DMA傳輸?shù)闹鞒绦騧ain.c-2
printf("\r\nDMA傳輸開始\r\n"); //USART1接口發(fā)出DMA請(qǐng)求
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); LED_On(1); //點(diǎn)亮LED1燈
while(1) {
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025設(shè)備搬遷協(xié)議合同
- 合伙開店鋪合同范例
- 土地勞務(wù)合同范例
- 海外派駐員工合同范例
- 單位清潔玻璃合同范例
- 銅仁學(xué)院《催化劑制備》2023-2024學(xué)年第一學(xué)期期末試卷
- 完整版100以內(nèi)加減法混合運(yùn)算4000道158
- 桐城師范高等??茖W(xué)?!缎旅襟w內(nèi)容策劃與創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 桐城師范高等??茖W(xué)?!峨娐放c模擬電子技術(shù)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 同濟(jì)大學(xué)浙江學(xué)院《羽毛球?qū)m?xiàng)教學(xué)訓(xùn)練理論與實(shí)踐(三)》2023-2024學(xué)年第一學(xué)期期末試卷
- 花籃拉桿式懸挑腳手架工程技術(shù)交底
- 公共收益管理規(guī)約
- 影視聲音藝術(shù)創(chuàng)作基礎(chǔ)教程-課件
- 第四單元大單元教學(xué)設(shè)計(jì) 編版語(yǔ)文九年級(jí)上冊(cè)
- 小班幼兒區(qū)域游戲自主性的實(shí)踐研究
- 農(nóng)商銀行、信用社面試常見題及答案
- 餐飲連鎖公司新店選址可行性報(bào)告
- 中學(xué)教師問(wèn)卷調(diào)查總結(jié)報(bào)告
- 中國(guó)中鐵PPT模板
- 國(guó)家開放大學(xué)一網(wǎng)一平臺(tái)電大《建筑測(cè)量》實(shí)驗(yàn)報(bào)告1-5題庫(kù)
- 勞務(wù)派遣整體服務(wù)方案
評(píng)論
0/150
提交評(píng)論