Question
How to configure ADC after wake up from STOP (low power mode)
I am using LPTIM for periodic ADC reading (every ~250ms) and periodic IWDG refresh. CPU should go to Stop mode when the ADC value is under certain value. If the ADC value is over certain value then CPU should reset end continue in Run mode. ADC is clocked from HSE.
The problem is when in Stop mode IWDG doesnt get refreshed.
this is LTPIM callback
void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim){
if(systemData.inSleepMode){
// start HSE and PLL if in sleep mode
SYSCLKConfig_afterSTOP();
}
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 10);
systemData.gd3.batteryADC = HAL_ADC_GetValue(&hadc1);
HAL_IWDG_Refresh(&hiwdg1);
}entry to the low power mode is in the IDLE_hook:
void vApplicationIdleHook( void )
{
if(systemData.gd3.goToSleep){
HAL_LTDC_DeInit(&hltdc);
HAL_DMA2D_DeInit(&hdma2d);
BSP_I2C2_DeInit();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
HAL_PWREx_EnableFlashPowerDown();
HAL_PWREx_ControlStopModeVoltageScaling(PWR_REGULATOR_SVOS_SCALE5);
HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFE);
// //HAL_ResumeTick();
//SYSCLKConfig_afterSTOP();
}
if((systemData.gd3.batteryADC < 400) && !systemData.gd3.goToSleep){
systemData.gd3.goToSleep = true;
HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_2);
HAL_GPIO_WritePin(NET_S_ON_GPIO_Port, NET_S_ON_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(CAN_EN_GPIO_Port, CAN_EN_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LCD_EN_GPIO_Port, LCD_EN_Pin, GPIO_PIN_SET);
}
if(systemData.gd3.batteryADC > 900 && systemData.gd3.goToSleep){
HAL_NVIC_SystemReset();
}
vTaskSetApplicationTaskTag(NULL, IdleTaskHook);
}