STM32F4寄存器初始化系列:三重ADC——DMA
阅读原文时间:2023年07月10日阅读:1

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转换器

}