RTC_SLEEP.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. //
  2. // Created by EDZ on 25-9-16.
  3. //
  4. #include "../Inc/RTC_SLEEP.h"
  5. void RTC_Sleep_Enter_Fun() {
  6. /* 设置初始时间 */
  7. RTC_TimeTypeDef sTime = {0};
  8. RTC_DateTypeDef sDate = {0};
  9. sTime.Hours = 0x12;
  10. sTime.Minutes = 0x00;
  11. sTime.Seconds = 0x00;
  12. HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD);
  13. sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  14. sDate.Month = RTC_MONTH_SEPTEMBER;
  15. sDate.Date = 0x16;
  16. sDate.Year = 0x25;
  17. HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD);
  18. /* 设置闹钟:20 秒后触发 */
  19. RTC_AlarmTypeDef sAlarm = {0};
  20. sAlarm.AlarmTime.Hours = sTime.Hours;
  21. sAlarm.AlarmTime.Minutes = sTime.Minutes;
  22. sAlarm.AlarmTime.Seconds = (sTime.Seconds + 50) % 60;
  23. sAlarm.Alarm = RTC_ALARM_A;
  24. HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD);
  25. /* 进入 STANDBY 模式 */
  26. __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); // 清除唤醒标志
  27. HAL_PWR_EnterSTANDBYMode(); // MCU 进入 STANDBY
  28. // MCU 唤醒后会从 main() 重新开始运行
  29. }