STM32F4寄存器初始化系列:三重ADC——DMA

static void ADC_Init(void)
{
  /********************DMA配置**************************/
  DMA2_Stream0->PAR=(uint32_t)&(ADC->CDR);        //DMA外设地址           多重ADC->CDR
  DMA2_Stream0->M0AR=(uint32_t)_AD_Value;            //DMA 存储器0地址
  DMA2_Stream0->NDTR=24;       //传输数据项个数
  DMA2_Stream0->CR=0;        //先全部复位CR寄存器值 
  DMA2_Stream0->CR|=0<<25;     //通道选择
  DMA2_Stream0->CR|=0<<23;     //存储器单次传输
  DMA2_Stream0->CR|=0<<21;     //外设单次传输
  DMA2_Stream0->CR|=1<<16;     //中等优先级        2:高  3:非常高
  DMA2_Stream0->CR|=1<<13;     //存储器数据大小为16位     0:8位    1:16位  2:32位
  DMA2_Stream0->CR|=1<<11;     //外设数据大小为16位       0:8位    1:16位  2:32位
  DMA2_Stream0->CR|=1<<10;     //存储器地址递增
  DMA2_Stream0->CR|=0<<9;      //外设地址固定
  DMA2_Stream0->CR|=1<<8;     //循环模式
  DMA2_Stream0->CR|=0<<6;     //外设到存储器   1:存储器到外设   2:存储器到存储器
  DMA2_Stream0->CR|=1<<0;      //开启DMA传输
  /******************************************************/  
  
  /********************ADC通用配置**************************/   
  ADC->CCR|=1<<16;    //ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
  ADC->CCR|=1<<14;       //多重DMA模式1
  ADC->CCR|=1<<13;      //多重DMA持续转换
  ADC->CCR|=0X16;       //仅三重模式规则同时模式
  /******************************************************/ 
  
  /********************CR1配置**************************/ 
  ADC1->CR1|=1<<24;     //10位模式         1:10位   2:8位  3:6位
  ADC1->CR1|=1<<8;      //扫描模式
  ADC2->CR1|=1<<24;     //10位模式         1:10位   2:8位  3:6位
  ADC2->CR1|=1<<8;      //扫描模式
  ADC3->CR1|=1<<24;     //10位模式         1:10位   2:8位  3:6位
  ADC3->CR1|=1<<8;      //扫描模式
  /******************************************************/
  
  
  /********************采样时间**************************/  
  ADC1->SMPR2|=7;            //通道0的采样时间为480个周期
  ADC1->SMPR2|=7<<3*1;       //通道1的采样时间为480个周期
  ADC1->SMPR2|=7<<3*2;       //通道2的采样时间为480个周期
  ADC1->SMPR2|=7<<3*3;       //通道3的采样时间为480个周期
  ADC1->SMPR2|=7<<3*4;       //通道4的采样时间为480个周期
  ADC1->SMPR2|=7<<3*5;       //通道5的采样时间为480个周期
  ADC1->SMPR2|=7<<3*6;       //通道6的采样时间为480个周期
  ADC1->SMPR2|=7<<3*7;       //通道7的采样时间为480个周期
  
  ADC2->SMPR2|=7<<3*8;       //通道8的采样时间为480个周期
  ADC2->SMPR2|=7<<3*9;       //通道9的采样时间为480个周期 
  ADC2->SMPR1|=7;            //通道10的采样时间为480个周期
  ADC2->SMPR1|=7<<3*1;       //通道11的采样时间为480个周期
  ADC2->SMPR1|=7<<3*2;       //通道12的采样时间为480个周期
  ADC2->SMPR1|=7<<3*3;       //通道13的采样时间为480个周期
  ADC2->SMPR1|=7<<3*4;       //通道14的采样时间为480个周期
  ADC2->SMPR1|=7<<3*5;       //通道15的采样时间为480个周期
  
  ADC3->SMPR2|=7<<3*4;       //通道4的采样时间为480个周期
  ADC3->SMPR2|=7<<3*5;       //通道5的采样时间为480个周期
  ADC3->SMPR2|=7<<3*6;       //通道6的采样时间为480个周期
  ADC3->SMPR2|=7<<3*7;       //通道7的采样时间为480个周期
  ADC3->SMPR2|=7<<3*8;       //通道8的采样时间为480个周期
  ADC3->SMPR2|=7<<3*9;       //通道9的采样时间为480个周期 
  ADC3->SMPR1|=7<<3*4;       //通道14的采样时间为480个周期
  ADC3->SMPR1|=7<<3*5;       //通道15的采样时间为480个周期
  /******************************************************/
  
  /********************转换序列**************************/  
  ADC1->SQR1|=7<<20;         //8个转换在规则序列中 
  ADC1->SQR3|=0;                //第一次转换ADC_IN0 
  ADC1->SQR3|=1<<5;             //第二次转换ADC_IN1 
  ADC1->SQR3|=2<<2*5;           //第三次转换ADC_IN2
  ADC1->SQR3|=3<<3*5;           //第四次转换ADC_IN3 
  ADC1->SQR3|=4<<4*5;           //第五次转换ADC_IN4 
  ADC1->SQR3|=5<<5*5;           //第六次转换ADC_IN5 
  ADC1->SQR2|=6;               //第七次转换ADC_IN6 
  ADC1->SQR2|=7<<5;            //第八次转换ADC_IN7 
  
  ADC2->SQR1|=7<<20;         //8个转换在规则序列中 
  ADC2->SQR3|=8;                //第一次转换ADC_IN8 
  ADC2->SQR3|=9<<5;             //第二次转换ADC_IN9 
  ADC2->SQR3|=10<<2*5;           //第三次转换ADC_IN10
  ADC2->SQR3|=11<<3*5;           //第四次转换ADC_IN11 
  ADC2->SQR3|=12<<4*5;           //第五次转换ADC_IN12 
  ADC2->SQR3|=13<<5*5;           //第六次转换ADC_IN13 
  ADC2->SQR2|=14;               //第七次转换ADC_IN14 
  ADC2->SQR2|=15<<5;            //第八次转换ADC_IN15 
  
  ADC3->SQR1|=7<<20;         //8个转换在规则序列中 
  ADC3->SQR3|=4;                //第一次转换ADC_IN4 
  ADC3->SQR3|=5<<5;             //第二次转换ADC_IN5 
  ADC3->SQR3|=6<<2*5;           //第三次转换ADC_IN6
  ADC3->SQR3|=7<<3*5;           //第四次转换ADC_IN7 
  ADC3->SQR3|=8<<4*5;           //第五次转换ADC_IN8 
  ADC3->SQR3|=9<<5*5;           //第六次转换ADC_IN9 
  ADC3->SQR2|=14;               //第七次转换ADC_IN14 
  ADC3->SQR2|=15<<5;            //第八次转换ADC_IN15 
  /******************************************************/ 
  
  
  ADC1->CR2|=1<<9;              //使能ADC1_DMA 
  ADC1->CR2|=1<<8;              //使能ADC1_DMA
  ADC1->CR2|=1<<1;              //连续转换
  ADC1->CR2|=1<<0;              //使能ADC1
  
  ADC2->CR2|=1<<9;              //使能ADC2_DMA 
  ADC2->CR2|=1<<1;              //连续转换
  ADC2->CR2|=1<<0;              //使能ADC2
  
  ADC3->CR2|=1<<9;              //使能ADC2_DMA 
  ADC3->CR2|=1<<1;              //连续转换
  ADC3->CR2|=1<<0;              //使能ADC3
  
  ADC1->CR2|=1<<30;              //开启AD转换器
  
}

猜你喜欢

转载自www.cnblogs.com/penuel/p/11265300.html