cancel
Showing results for 
Search instead for 
Did you mean: 

STM32L151 did not wake up from stop mode RTC

Hoang Loc
Associate II

Hi Comunity. This is my code project code to enter to stop mode

NVIC_InitTypeDef  NVIC_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	  /* Enable PWR APB1 Clock */
	  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
 
	  /* Allow access to RTC */
	  PWR_RTCAccessCmd(ENABLE);
 
	  /* Reset RTC Domain */
	  RCC_RTCResetCmd(ENABLE);
	  RCC_RTCResetCmd(DISABLE);
	  /* Allow access to RTC */
	  PWR_RTCAccessCmd(ENABLE);
 
	  /*!< LSI Enable */
	  RCC_LSICmd(ENABLE);
 
	  /*!< Wait till LSI is ready */
	  while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
	  {}
 
	  /*!< RTC Clock Source Selection */
	  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
 
	  /* Enable the RTC Clock */
	  RCC_RTCCLKCmd(ENABLE);
 
	  /* Wait for RTC APB registers synchronisation */
	  RTC_WaitForSynchro();
 
	  /* Configure all GPIO as analog to reduce current consumption on non used IOs */
	  /* Enable GPIOs clock */
	  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOC, ENABLE);
 
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
	  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
	  GPIO_Init(GPIOC, &GPIO_InitStructure);
	  GPIO_Init(GPIOA, &GPIO_InitStructure);
	  /* Disable GPIOs clock */
	  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOC, DISABLE);
	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	  /* Enable the RTC Wakeup Interrupt */
	  NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
	  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	  NVIC_Init(&NVIC_InitStructure);
 
	  /* RTC Wakeup Interrupt Generation: Clock Source: RTCCLK_Div16, Wakeup Time Base: ~4s
	     RTC Clock Source LSI ~37KHz
	  */
	  RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
	  RTC_SetWakeUpCounter(0x2421);
 
	  /* Enable the Wakeup Interrupt */
	  RTC_ITConfig(RTC_IT_WUT, ENABLE);
 
	  /* Enable Ultra low power mode */
	  PWR_UltraLowPowerCmd(ENABLE);
 
	  /* Enable Wakeup Counter */
	  RTC_WakeUpCmd(ENABLE);
 
	  /* Enter Stop Mode */
	  PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

After so many find some information on the internet, I still find why MCU can't wake up to continue run after Enter to stop mode use RTC. I really need your help. Thank for reading.

1 REPLY 1

Check that it actually runs the LSI from the low power domain, might be expectation to use LSE, sorry not using L1 devices.

Should be some worked examples under the CubeL1 repository trees.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..