2024-02-16 10:23 AM - edited 2024-02-17 08:46 AM
Hi all,
I'm struggling for days why my RTC wakeup doesn't work.
The program is running FreeRTOS, but I want the uC in Lowpower Sleep for 3 minutes.
So I set RTC on 1Hz, counter 180 and internal wakeup.
Activated the EXTI RTC interrupt.
But it immediately exit SLEEP after 1 sec or so.
I found this topic, but haven't luck so far:
https://community.st.com/t5/stm32-mcus-embedded-software/clearing-the-rtc-wutf-saving-your-sanity-by-sharing-my-hard/m-p/200677
void goToSleep(void)
{
__disable_irq();
__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF);
vTaskDelay(pdMS_TO_TICKS(1000));
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
HAL_SuspendTick();
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x500B, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
//__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
//__enable_irq();
HAL_NVIC_ClearPendingIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
HAL_NVIC_ClearPendingIRQ(RCC_IRQn);
HAL_NVIC_ClearPendingIRQ(PIR_EXTI_IRQn);
HAL_NVIC_ClearPendingIRQ(ROTARY1_EXTI_IRQn);
HAL_NVIC_ClearPendingIRQ(ROTARY2_EXTI_IRQn);
HAL_NVIC_ClearPendingIRQ(EXTI4_15_IRQn);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUFI);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF);
/* Enter sleep mode */
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUFI);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF);
__disable_irq();
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
SystemClock_Config();
__enable_irq();
HAL_ResumeTick();
}
I'm really out of options atm.
Timer in code above was sit on 10s for testing purpose
UPDATE:
With STOP mode I got the behavior I wanted, but that is too much current.
Sleep modes basically behave like one __NOP()
HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI); //skips sleep
//HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); //skips sleep
//HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); //291uA
//HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI); //362uA
2024-02-19 03:24 AM
Hello @WSpar.1 ,
Not sure it would answer directly to your problem, but please note also there is an Application Note dedicated to RTC and tamper management: Using the hardware real-time clock (RTC) and the tamper management unit (TAMP) with STM32 microcontrollers - Application note , if it can help.
Also, would there be another interrupt source in your application that could activate and bring the STM32G0 out of sleep ?
Best Regards,
2024-02-19 05:15 AM
Maybe FreeRTOS SysTick is still running although I've selected TIM1 as SYS Timebase?
2024-02-27 03:15 AM
Hi @WSpar.1 ,
Sorry, your question is too deep technical knowledge for me, and I cannot answer by myself.
I hope you found any clue/solution since you posted this topic ?
If not the case, I hope someoneelse could help you on this subject.
Best Regards,