初级会员

- 积分
- 126
- 金钱
- 126
- 注册时间
- 2014-7-28
- 在线时间
- 2 小时
|
5金钱
使用寄存器进行ADC采集,中断模式,结果ADC_DR理数据一直是0X43,求大神帮忙看看
void ADC1_Config(void)
{
RCC->APB2ENR |=1;
RCC->APB2ENR |=1<<2;
GPIOC->CRL&=0XFFFFF0FF;//PC2 Analog模式
GPIOC->CRL|=0X00000800;
// GPIOC_CRL_bit.CNF2 = 0; /
// RCC_APB2ENR_bit.ADC1EN = 1; //ADC1时钟使能
RCC->APB2ENR |= 1<<9; //开ADC1时钟
// RCC_APB2RSTR_bit.ADC1RST = 1;//ADC1复位
RCC->APB2RSTR|=1<<9;
// RCC_APB2RSTR_bit.ADC1RST = 0;//停止复位
RCC->APB2RSTR&=~(1<<9);
// RCC_CFGR_bit.ADCPRE = 2; //ADC 8分频,即12MHz,
// //ADC时钟设置为12M,ADC最大时钟不能超过14M!
// //否则将导致ADC准确度下降!
RCC->CFGR|=2<<14;
//ADC1_CR1_bit.DUALMOD = 0; //独立工作模式
// ADC1_CR1_bit.SCAN = 0; //非扫描模式
// ADC1_CR2_bit.CONT = 0; //单次扫描
ADC1->CR1=0; //独立工作模式,非扫描模式,单次扫描
// ADC1_CR2_bit.EXTSEL = 7; //选择启动转换的外部事件是 软件启动SWSTART
ADC1->CR2|=7<<17;
// ADC1_CR2_bit.EXTTRIG = 1; //使用外部触发,必须使用一个事件来触发
ADC1->CR2|=1<<20;
// ADC1_CR2_bit.ALIGN = 0; //右对齐
ADC2->CR2&=~(1<<12);
// ADC1_SQR1_bit.L = 0; //1个转换在规则通道中 也就是只转换规则通道1
ADC1->SQR1=0;
// ADC1_SQR3_bit.SQ1 = 12; //选择通道12
ADC1->SQR3|=12;
// ADC1_SMPR1_bit.SMP12 = 7;//通道12 239.5周期,提高采样时间可以提高精确度
ADC1->SMPR1=7<<6;
// ADC1_CR2_bit.ADON =1; //使能ADC1
ADC1->CR2|=1<<0;
// ADC1_CR2_bit.RSTCAL =1; //使能复位校准
ADC1->CR2|=1<<3;
// while(ADC1_CR2_bit.RSTCAL);//等待校准结束
while(ADC1->CR2&(1<<3));//等待校准结束
// ADC1_CR2_bit.CAL = 1; //开启AD校准
ADC1->CR2|=1<<2;
// while(ADC1_CR2_bit.CAL);//等待校准结束
while(ADC1->CR2&(1<<2));
// ADC1_CR1_bit.EOCIE = 1;//开启转换结束中断
ADC1->CR1|=1<<5;
// SETENA0 |= 1 << NVIC_ADC1_2;//开启ADC1的全局中断
MY_NVIC_Init(1,0,ADC1_2_IRQn,2);//组2
}
|
|