[MM32软件] 请问MM32 AD读取问题,设定AD0通道动作读出来的数值不变维持在某值是设定上哪里有问题?

[复制链接]
1604|11
 楼主| duo点 发表于 2024-3-11 10:00 | 显示全部楼层 |阅读模式
各位安安
想请教一个有关于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;
}

610u 发表于 2024-3-20 15:52 | 显示全部楼层
在ADC初始化函数中,您需要确保配置ADC的时钟、分频系数、工作模式等参数正确。请检查ADCFG和ADCR寄存器的配置是否符合您的需求。
610u 发表于 2024-3-20 15:54 | 显示全部楼层
也可以通过打印调试信息或者使用调试工具来进一步排查问题所在。
610u 发表于 2024-3-20 16:45 | 显示全部楼层
在读取AD值之前,您通过配置ADCHS寄存器来选择AD通道,但在读取之后,您没有恢复ADCHS寄存器的值。这可能导致后续的AD转换仍然使用了AD1通道而不是AD0通道。建议在读取完成后,将ADCHS寄存器的值恢复为需要的通道。
610u 发表于 2024-3-20 17:05 | 显示全部楼层
在读取AD值之前,启动了一次AD转换,然后等待转换完成。但在这段等待的过程中,您并未检查转换是否完成。建议使用ADSTA寄存器中的标志位来判断AD转换是否完成,而不是简单地等待一段固定的时间。这样可以确保在转换完成之后再去读取AD值。
610u 发表于 2024-3-20 18:25 | 显示全部楼层
在读取AD值后,您直接返回了AD值。建议在返回之前,先将ADCFG寄存器中的ADEN位清除,再进行返回操作。这样可以在下一次读取AD值之前,确保ADC被禁用。
jcky001 发表于 2024-3-26 17:08 | 显示全部楼层
ADC初始化配置问题
两只袜子 发表于 2024-3-26 17:59 | 显示全部楼层
检查AD0通道所连接的模拟输入信号。如果该信号是一个固定值或者没有变化,ADC的读取结果自然会保持不变。
cr315 发表于 2024-3-26 19:30 | 显示全部楼层
检查ADC的供电电压和参考电压是否稳定且正确
laocuo1142 发表于 2024-3-26 20:10 | 显示全部楼层
件读取逻辑问题
powerantone 发表于 2024-3-26 21:46 | 显示全部楼层
可能是ADC模块本身存在故障
flycamelaaa 发表于 2024-3-26 22:00 | 显示全部楼层
检查ADC通道与模拟输入信号之间的硬件连接。确保没有短路、断路或接触不良等问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

546

主题

2387

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部