近期一个项目,用到STM32L071RBT6的ADC 变换采样外部电源电压,开机后一切正常,但是一旦系统进入STOP模式,唤醒之后ADC 变换数据异常,非常不靠谱,从0到最大值漫天乱飞,不知什么原因。
唤醒后我用SystemClock_Config() 初始化时钟了,时钟应该没问题。另外我也试了ADC deinit & init, 都不管用。
用遇到过类似问题的同学吗?
/***********************************************************************
* trigger MCU enter stop mode
*/
void powerSaving(void){
//config GPIO to analog mode (zero consumption for every analog GPIO)
lightLed(LED_GREEN, false);
//HAL_ADC_DeInit(&hadc);
//clear wakeup flag
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
//call power function to enter "STOP" mode
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//after stop, program continue run from here
//config RCC
SystemClock_Config();
//sysclkConfig_after_stop();
//adc init
HAL_ADC_DeInit(&hadc);
MX_ADC_Init();
HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED);
//config GPIO
}
唤醒后,配置时钟后,要确认下时钟是否配置正确。还有就是配置完时钟,加个延时看看