STM32中DMA的使用
扫描二维码
随时随地手机看文章
一、DMA的定义:
DMA,全称为:Direct Memory Access,即直接存储器访问。DMA传输方式无需CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM 与I/O设备开辟一条直接传送数据的通路,能使CPU 的效率大为提高。
二、stm32的DMA1、DMA2功能介绍。
STM32中 DMA1有7个通道,DMA2有5个通道(DMA2 仅存在大容量产品中)。DMA挂载的时钟为AHB总线,其时钟为72Mhz,所以可以实现高速数据搬运。
下面我们就针对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内存地址
DMA_InitStructure .DMA_DIR =DMA_DIR_PeripheralSRC;//外设作为源,数据传输方向为外设到内存DMA_InitStructure .DMA_BufferSize =N*M;//DMA缓存的
DMA_InitStructure .DMA_PeripheralInc =DMA_PeripheralInc_Disable;//接收一次数据后,外设地址固定
DMA_InitStructure .DMA_MemoryInc =DMA_MemoryInc_Enable;//内存地址自增
DMA_InitStructure .DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord ;//DMA外设数据长度为半字,16字节
DMA_InitStructure .DMA_MemoryDataSize =DMA_MemoryDataSize_HalfWord;//内存数据长度,16字节
DMA_InitStructure .DMA_Mode =DMA_Mode_Circular ;//工作在循环模式
DMA_InitStructure .DMA_Priority =DMA_Priority_High ;//DMA通道拥有高优先级
DMA_InitStructure .DMA_M2M =DMA_M2M_Disable ;//DMA 通道没有设置为内存到内存传输
DMA_Init (DMA1_Channel1 ,&DMA_InitStructure );//初始化dma1
DMA_Cmd (DMA1_Channel1 ,ENABLE );
}