一、DMA的定義:
DMA,全稱(chēng)為:Direct Memory Access,即直接存儲(chǔ)器訪(fǎng)問(wèn)。DMA傳輸方式無(wú)需CPU 直接控制傳輸,也沒(méi)有中斷處理方式那樣保留現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的過(guò)程,通過(guò)硬件為RAM 與I/O設(shè)備開(kāi)辟一條直接傳送數(shù)據(jù)的通路,能使CPU 的效率大為提高。
二、stm32的DMA1、DMA2功能介紹。
STM32中 DMA1有7個(gè)通道,DMA2有5個(gè)通道(DMA2 僅存在大容量產(chǎn)品中)。DMA掛載的時(shí)鐘為AHB總線(xiàn),其時(shí)鐘為72Mhz,所以可以實(shí)現(xiàn)高速數(shù)據(jù)搬運(yùn)。
下面我們就針對(duì)DMA1 進(jìn)行介紹。
下面我們就針對(duì)DMA2進(jìn)行介紹。
三、DMA1初始化。
1、時(shí)鐘初始化。
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
2、配置初始化。
void DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure;DMA_DeInit (DMA1_Channel1 );//將DMA的通道1寄存器設(shè)為默認(rèn)值
DMA_InitStructure .DMA_PeripheralBaseAddr =(u32)&(ADC1->DR);//DMA外設(shè)的基地址
DMA_InitStructure.DMA_MemoryBaseAddr =(u32)&AD_Value;//DMA內(nèi)存地址
DMA_InitStructure .DMA_DIR =DMA_DIR_PeripheralSRC;//外設(shè)作為源,數(shù)據(jù)傳輸方向?yàn)橥庠O(shè)到內(nèi)存DMA_InitStructure .DMA_BufferSize =N*M;//DMA緩存的
DMA_InitStructure .DMA_PeripheralInc =DMA_PeripheralInc_Disable;//接收一次數(shù)據(jù)后,外設(shè)地址固定
DMA_InitStructure .DMA_MemoryInc =DMA_MemoryInc_Enable;//內(nèi)存地址自增
DMA_InitStructure .DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord ;//DMA外設(shè)數(shù)據(jù)長(zhǎng)度為半字,16字節(jié)
DMA_InitStructure .DMA_MemoryDataSize =DMA_MemoryDataSize_HalfWord;//內(nèi)存數(shù)據(jù)長(zhǎng)度,16字節(jié)
DMA_InitStructure .DMA_Mode =DMA_Mode_Circular ;//工作在循環(huán)模式
DMA_InitStructure .DMA_Priority =DMA_Priority_High ;//DMA通道擁有高優(yōu)先級(jí)
DMA_InitStructure .DMA_M2M =DMA_M2M_Disable ;//DMA 通道沒(méi)有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?/p>
DMA_Init (DMA1_Channel1 ,&DMA_InitStructure );//初始化dma1
DMA_Cmd (DMA1_Channel1 ,ENABLE );
}