• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

请问MM32 AD读取问题,设定AD0通道动作读出来的数值不

王栋春 2018-07-27 浏览量:1454
各位安安
想请教一个有关于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 = 16M16MHz/(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;
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:2
  • 老兄开始搞单片机了,这个是国产的挺不错的额,用的寄存器操作,用库函数较多,选择好你的AD扫描模式

相关问题

问题达人换一批

请问MM32 AD读取问题,设定AD0通道动作读出来的数值不