// // Created by EDZ on 25-9-16. // #include "../Inc/RTC_SLEEP.h" void RTC_Sleep_Enter_Fun() { /* 设置初始时间 */ RTC_TimeTypeDef sTime = {0}; RTC_DateTypeDef sDate = {0}; sTime.Hours = 0x12; sTime.Minutes = 0x00; sTime.Seconds = 0x00; HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD); sDate.WeekDay = RTC_WEEKDAY_MONDAY; sDate.Month = RTC_MONTH_SEPTEMBER; sDate.Date = 0x16; sDate.Year = 0x25; HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD); /* 设置闹钟:20 秒后触发 */ RTC_AlarmTypeDef sAlarm = {0}; sAlarm.AlarmTime.Hours = sTime.Hours; sAlarm.AlarmTime.Minutes = sTime.Minutes; sAlarm.AlarmTime.Seconds = (sTime.Seconds + 50) % 60; sAlarm.Alarm = RTC_ALARM_A; HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD); /* 进入 STANDBY 模式 */ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); // 清除唤醒标志 HAL_PWR_EnterSTANDBYMode(); // MCU 进入 STANDBY // MCU 唤醒后会从 main() 重新开始运行 }