STM32L151 使用cube配置RTC 睡眠唤醒闹钟-闹钟方式

1、cube配置

STM32L151 使用cube配置RTC 睡眠唤醒闹钟-闹钟方式

 

STM32L151 使用cube配置RTC 睡眠唤醒闹钟-闹钟方式

 

2、睡眠唤醒闹钟程序:注意闹钟必须和时间对应一样否则无法产生中断,小编在这入坑,希望帮到其他人;

void RTC_PowerLow(void)
{
    //rtc struct init
    RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef sDate = {0};
  RTC_AlarmTypeDef sAlarm = {0};

    
 /** Initialize RTC and set the Time and Date : 06:00:00
  */
  sTime.Hours =     0x6;
  sTime.Minutes = 0x00;
  sTime.Seconds = 0x00;
  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 = 0x19;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
  /** Enable the Alarm A    : 06:00:05
  */
  sAlarm.AlarmTime.Hours = 0x06;
  sAlarm.AlarmTime.Minutes = 0x00;
  sAlarm.AlarmTime.Seconds = 0x05;
  sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
  sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
  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();
  }
    

}

 

3、进入低功耗程序

              RTC_PowerLow();    
                
                __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();    //clear flag
                __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);                //clear Power wakeup flag
                
                HAL_PWREx_EnableUltraLowPower();
                HAL_PWREx_EnableFastWakeUp();
                
                HAL_SuspendTick();
                HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);    //all interrupt 
                HAL_ResumeTick();                
                
                LowPowerResumeConfig();
                
                __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT();    //disable wakeup timer
                __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();    //clear flag
                __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);                //clear Power wakeup flag