ADC1通道1初始化
1.使能相应的PORT时钟,并设置模拟输入模式,adc1时钟
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0XFFFFFF0F;
RCC->APB2ENR|=1<<9;
2.复位ADC1
RCC->APB2RSTR|=1<<9;
RCC->APB2RSTR&=~(1<<9);
3.设置ADCCLOCK分频因子
RCC->CFGR&=~(3<<14);
RCC->CFGR|=2<<14;
4.设置CR1寄存器
ADC1->CR1&=0XF0FFFF; //工作模式清零
ADC1->CR1|=0<<16; //独立工作模式
ADC1->CR1&=~(1<<8); //非扫描模式
5.设置CR2
ADC1->CR2&=~(1<<1); //单次转换模式
ADC1->CR2&=~(7<<17);
ADC1->CR2|=7<<17; //软件控制转换
ADC1->CR2 |= 1 << 20; //规则通道的外部触发转换模式,必须加
ADC1->CR2&=~(1<<11); //右对齐
6.设置SQR
ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1|=0<<20; //L位为0,一个转换
7.设置SMPR
ADC1->SMPR2&=~(7<<3); //通道1采样时间清空
ADC1->SMPR2|=7<<3; //通道1 239.5周期
8.开启AD并校准
ADC1->CR2|=1<<0; //开启AD
ADC1->CR2|=1<<3; //使能复位校准寄存器
while(ADC1->CR2&1<<3); //等待复位校准寄存器准备好
ADC1->CR2|=1<<2; //开启AD校准
while(ADC1->CR2&1<<2); //等待校准结束
获取AD的值
unsigned int adc
ADC1->SQR3&=0XFFFFFFE0;
ADC1->SQR3|=ch; //设置规则序列1为通道ch
ADC1->CR2|=1<<22; //启动规则转换
while(!(ADC1->SR&1<<1));//等待转换结束
adc = ADC1->DR;