各位安安
想请教一个有关于AD问题
目前我使用MM32F031V8T这个MCU
我目前我会用到两组AD通道
AD0以及AD1动作
我发现在切换过程中疑似有问题
于是我就分开独立进行
发现设定AD0通道动作读出来的数值不变维持在某值
可是设定AD1却是可以行得通
是我设定上哪里有问题吗?
以下附程式码(初始化及读值)
不好意思 要请教大家多多帮忙了><
void ADC_Init(void){
RCC->AHBENR |= 1<<17; //使能GPIOA时钟
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //使能ADC1时钟
GPIOA->CRL &= 0XFFFFFF00; //PA0 anolog输入
RCC->APB2RSTR |= RCC_APB2RSTR_ADC1RST; //ADC interface reset
RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST); //ADC interface reset close
ADC1->ADCFG |= ADCFG_ADCPRE_8|ADCFG_ADCPRE_10;//osc 8M*2/1 = 16M,16MHz/(7+1)/2 = 1Mhz =>period = 2us
ADC1->ADCR &= ~(ADCR_ADMD_PERIOD|ADCR_ADMD_CONtiNUE|ADCR_ALIGN_LEFT);//单次非周期模式,数据右对齐
ADC1->ADCR |= ADCR_ADMD_SINGLE;
ADC1->ADCFG |= ADCFG_ADEN; //ADC使能
ADC1->ADCR |= ADCR_ADST; //开始转换
}
uint16_t Func_GetADValue(void){
usADSTA = ADC1->ADSTA;
ADC1->ADCFG &= ~ADCFG_ADEN; //ADC Disable
ADC1->ADSTA = 0x00;
ADC1->ADCHS = ADCHS_CHEN0; //CH0=>ADCHS_CHEN0 ;CH0 =>ADCHS_CHEN1 (只改变这通道设定)
ADC1->ADCR |= ADCR_ADST; //开始转换
ADC1->ADCFG |= ADCFG_ADEN; //ADC enable
ADC1->ADCR |= ADCR_ADST;
do{
usADSTA = ADC1->ADCR;
usADSTA &= ADCR_ADST;
}while(usADSTA != 0);
usCH0Value = ADC1->ADDATA&0xfff;
return usCH0Value;
}
|