stm32ADC单次转换

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<<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;

你可能感兴趣的:(嵌入式,stm32,物联网)