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 << 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值