Question
STM32WB55 Low Power Mode wakeup using BLE stack
Hi,
I can enter STOP Mode 2 while not using the ST Sequence (UTIL_SEQ). I disable interruptions, clear the pending ones and just let the RTC to wake me up.
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xFFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV8);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
UTIL_LPM_EnterLowPower( );
HAL_ResumeTick();
SYSCLKConfig_STOP(); //restore clocks and so on...But when I do the same in void UTIL_SEQ_Idle( void ) I get wake up inmediatly...
I tried to disable every single interrupt (I'm using GPIOS interrupts, RTC, Alarms, UART, Timer2 and the BLE stack for P2P_Server). Who is waking me up from sleep?
void UTIL_SEQ_Idle( void )
{
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
UTIL_LPM_SetStopMode(1U << CFG_LPM_APP, UTIL_LPM_ENABLE);
UTIL_LPM_SetStopMode(1U << CFG_LPM_APP_BLE, UTIL_LPM_ENABLE);
EXTI->PR1 = 0xFFFFFFFF;
EXTI->PR2 = 0xFFFFFFFF;
RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
HAL_SuspendTick();
HAL_NVIC_DisableIRQ(WWDG_IRQn);
HAL_NVIC_DisableIRQ(EXTI0_IRQn);
HAL_NVIC_DisableIRQ(EXTI1_IRQn);
HAL_NVIC_DisableIRQ(EXTI2_IRQn);
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);
HAL_NVIC_DisableIRQ(DMA1_Channel2_IRQn);
HAL_NVIC_DisableIRQ(TIM2_IRQn);
HAL_NVIC_DisableIRQ(EXTI15_10_IRQn);
HAL_NVIC_DisableIRQ(RTC_Alarm_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_DisableIRQ(HSEM_IRQn);
HAL_NVIC_DisableIRQ(USART1_IRQn);
HAL_NVIC_DisableIRQ(TIM1_UP_TIM16_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_DisableIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_ClearPendingIRQ(WWDG_IRQn);
HAL_NVIC_ClearPendingIRQ(RTC_WKUP_IRQn);
HAL_NVIC_ClearPendingIRQ(EXTI0_IRQn);
HAL_NVIC_ClearPendingIRQ(EXTI1_IRQn);
HAL_NVIC_ClearPendingIRQ(EXTI2_IRQn);
HAL_NVIC_ClearPendingIRQ(DMA1_Channel1_IRQn);
HAL_NVIC_ClearPendingIRQ(DMA1_Channel2_IRQn);
HAL_NVIC_ClearPendingIRQ(TIM2_IRQn);
HAL_NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
HAL_NVIC_ClearPendingIRQ(RTC_Alarm_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_ClearPendingIRQ(HSEM_IRQn);
HAL_NVIC_ClearPendingIRQ(USART1_IRQn);
HAL_NVIC_ClearPendingIRQ(TIM1_UP_TIM16_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_TX_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_RX_IRQn);
HAL_NVIC_ClearPendingIRQ(IPCC_C1_TX_IRQn);
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xFFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV8);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
UTIL_LPM_EnterLowPower( );
HAL_ResumeTick();
SYSCLKConfig_STOP();
}