Skip to main content
Visitor II
July 16, 2025
Question

stm32u073 wake from stop mode using RTC alarm

  • July 16, 2025
  • 3 replies
  • 325 views

Hi,

I'm trying to get a stm32u073 to wake up from stop mode using an RTC alarm. I previously did the same on a stm32f103 which seemed to work just fine. When trying the same on the stm32u073 the controller either doesn't wake up or wakes up every second depending on which mode is used for the RTC (BCD or binary).

In binary mode the controller wakes up every second not using the set time for the alarm, in bcd mode it doesn't wake up at all.

Is there something that has to be done differently when using the stm32u73? Or does anyone have a working example for waking up the stm32u073 from stop mode using an RTC alarm?

 

 

 

    This topic has been closed for replies.

    3 replies

    Super User
    July 16, 2025

    If it's waking up every second, you probably aren't setting the alarm mask bits correctly. Show your code.

    JochemAuthor
    Visitor II
    July 16, 2025
    static void MX_RTC_Init(void)
    {
    
     /* USER CODE BEGIN RTC_Init 0 */
    
     /* USER CODE END RTC_Init 0 */
    
     RTC_TimeTypeDef sTime = {0};
     RTC_DateTypeDef sDate = {0};
     RTC_AlarmTypeDef sAlarm = {0};
    
     /* USER CODE BEGIN RTC_Init 1 */
    
     /* USER CODE END RTC_Init 1 */
    
     /** Initialize RTC Only
     */
     hrtc.Instance = RTC;
     hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
     hrtc.Init.AsynchPrediv = 127;
     hrtc.Init.SynchPrediv = 255;
     hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
     hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
     hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
     hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
     hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
     hrtc.Init.BinMode = RTC_BINARY_NONE;
     if (HAL_RTC_Init(&hrtc) != HAL_OK)
     {
     Error_Handler();
     }
    
     /* USER CODE BEGIN Check_RTC_BKUP */
    
     /* USER CODE END Check_RTC_BKUP */
    
     /** Initialize RTC and set the Time and Date
     */
     sTime.Hours = 0x0;
     sTime.Minutes = 0x0;
     sTime.Seconds = 0x0;
     sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
     sTime.StoreOperation = RTC_STOREOPERATION_RESET;
     if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
     {
     Error_Handler();
     }
     sDate.WeekDay = RTC_WEEKDAY_MONDAY;
     sDate.Month = RTC_MONTH_JANUARY;
     sDate.Date = 0x1;
     sDate.Year = 0x0;
    
     if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
     {
     Error_Handler();
     }
    
     /** Enable the Alarm A
     */
     sAlarm.AlarmTime.Hours = 0x0;
     sAlarm.AlarmTime.Minutes = 0x0;
     sAlarm.AlarmTime.Seconds = 0x10;
     sAlarm.AlarmTime.SubSeconds = 0x0;
     sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
     sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
     sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
     sAlarm.AlarmDateWeekDay = 0x1;
     sAlarm.Alarm = RTC_ALARM_A;
     if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
     {
     Error_Handler();
     }
     /* USER CODE BEGIN RTC_Init 2 */
    
     /* USER CODE END RTC_Init 2 */
    
    }

    This is my init of the RTC

    JochemAuthor
    Visitor II
    July 16, 2025

    I fixed it it was a mismatch between RTC_FORMAT_BCD and RTC_FORMAT_BIN numbers