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