[STM32G0] stm32 RTC闹钟唤醒低功耗模式

[复制链接]
605|4
 楼主| 抹茶妹妹 发表于 2022-9-30 22:53 | 显示全部楼层 |阅读模式
stm32 RTC闹钟唤醒 低功耗模式 rtc初始化
  1. void MX_RTC_Init(void)
  2. {

  3.   RTC_TimeTypeDef sTime = {0};
  4.   RTC_DateTypeDef DateToUpdate = {0};

  5.   hrtc.Instance = RTC;
  6.   hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
  7.   hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;
  8.   if (HAL_RTC_Init(&hrtc) != HAL_OK)
  9.   {
  10.     Error_Handler();
  11.   }

  12.   /* USER CODE BEGIN Check_RTC_BKUP */

  13.         RTC_SET_Alarm(&sTime );
  14.        
  15.         if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!=0X1234)
  16.                 {
  17.                                 HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0X1234);

  18.                 }else return;
  19.   /* USER CODE END Check_RTC_BKUP */

  20.   /** Initialize RTC and set the Time and Date
  21.   */
  22.   sTime.Hours = 0x0;
  23.   sTime.Minutes = 0x0;
  24.   sTime.Seconds = 0x0;

  25.   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  26.   {
  27.     Error_Handler();
  28.   }
  29.   DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
  30.   DateToUpdate.Month = RTC_MONTH_JANUARY;
  31.   DateToUpdate.Date = 0x1;
  32.   DateToUpdate.Year = 0x0;

  33.   if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
  34.   {
  35.     Error_Handler();
  36.   }
  37. }

  38. void RTC_SET_Alarm(RTC_TimeTypeDef * sTime )
  39. {       
  40.     RTC_AlarmTypeDef alarm;
  41.     HAL_RTC_GetTime(&hrtc, sTime, RTC_FORMAT_BIN);

  42.     sTime->Seconds += ALARM_INTERVAL;
  43.     if(sTime->Seconds >=60)
  44.     {
  45.         sTime->Minutes += 1;
  46.         sTime->Seconds = sTime->Seconds-60;
  47.         if(sTime->Minutes >=60)
  48.         {
  49.             sTime->Hours += 1;
  50.             sTime->Minutes = 0;
  51.             if(sTime->Hours >=24)
  52.                 sTime->Hours = 0;
  53.         }
  54.     }else ;

  55.     alarm.AlarmTime.Hours   = sTime->Hours;
  56.     alarm.AlarmTime.Minutes = sTime->Minutes ;
  57.     alarm.AlarmTime.Seconds = sTime->Seconds ;
  58.     alarm.Alarm = RTC_ALARM_A;

  59.     if(HAL_RTC_SetAlarm_IT(&hrtc, &alarm, RTC_FORMAT_BIN)!= HAL_OK)
  60.      {
  61.         Error_Handler();
  62.      }

  63. }




 楼主| 抹茶妹妹 发表于 2022-9-30 22:55 | 显示全部楼层
主函数
  1. int main(void)
  2. {

  3.   HAL_Init();
  4.   SystemClock_Config();

  5.   MX_GPIO_Init();
  6.   MX_RTC_Init();
  7.   MX_USART1_UART_Init();
  8.   while (1)
  9.   {
  10.     /* USER CODE BEGIN 3 */
  11.    
  12.                 HAL_Delay(100);
  13.                 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);
  14.                 HAL_Delay(100);
  15.                 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);
  16.                
  17.                 HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
  18.                 /* Get the RTC current Date */
  19.                 HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);

  20.                 /* Display date Format : yy/mm/dd */
  21.                 printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);
  22.                 /* Display time Format : hh:mm:ss */
  23.                 printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);

  24.             printf("\r\n");

  25.                 HAL_SuspendTick();
  26.         HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI;

  27.                 SystemClock_Config();
  28.                 MX_RTC_Init();
  29.   }
  30.   /* USER CODE END 3 */
  31. }
 楼主| 抹茶妹妹 发表于 2022-9-30 22:55 | 显示全部楼层
 楼主| 抹茶妹妹 发表于 2022-9-30 23:01 | 显示全部楼层
5秒唤醒一次还是挺准的
asmine 发表于 2022-10-1 08:58 | 显示全部楼层
唤醒频率怎么修改
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

309

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部