打印
[STM32G0]

stm32 RTC闹钟唤醒低功耗模式

[复制链接]
247|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32 RTC闹钟唤醒 低功耗模式 rtc初始化
void MX_RTC_Init(void)
{

  RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef DateToUpdate = {0};

  hrtc.Instance = RTC;
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    Error_Handler();
  }

  /* USER CODE BEGIN Check_RTC_BKUP */

        RTC_SET_Alarm(&sTime );
       
        if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!=0X1234)
                {
                                HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0X1234);

                }else return;
  /* USER CODE END Check_RTC_BKUP */

  /** Initialize RTC and set the Time and Date
  */
  sTime.Hours = 0x0;
  sTime.Minutes = 0x0;
  sTime.Seconds = 0x0;

  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
  DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
  DateToUpdate.Month = RTC_MONTH_JANUARY;
  DateToUpdate.Date = 0x1;
  DateToUpdate.Year = 0x0;

  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
}

void RTC_SET_Alarm(RTC_TimeTypeDef * sTime )
{       
    RTC_AlarmTypeDef alarm;
    HAL_RTC_GetTime(&hrtc, sTime, RTC_FORMAT_BIN);

    sTime->Seconds += ALARM_INTERVAL;
    if(sTime->Seconds >=60)
    {
        sTime->Minutes += 1;
        sTime->Seconds = sTime->Seconds-60;
        if(sTime->Minutes >=60)
        {
            sTime->Hours += 1;
            sTime->Minutes = 0;
            if(sTime->Hours >=24)
                sTime->Hours = 0;
        }
    }else ;

    alarm.AlarmTime.Hours   = sTime->Hours;
    alarm.AlarmTime.Minutes = sTime->Minutes ;
    alarm.AlarmTime.Seconds = sTime->Seconds ;
    alarm.Alarm = RTC_ALARM_A;

    if(HAL_RTC_SetAlarm_IT(&hrtc, &alarm, RTC_FORMAT_BIN)!= HAL_OK)
     {
        Error_Handler();
     }

}




使用特权

评论回复
沙发
抹茶妹妹|  楼主 | 2022-9-30 22:55 | 只看该作者
主函数
int main(void)
{

  HAL_Init();
  SystemClock_Config();

  MX_GPIO_Init();
  MX_RTC_Init();
  MX_USART1_UART_Init();
  while (1)
  {
    /* USER CODE BEGIN 3 */
   
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);
               
                HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
                /* Get the RTC current Date */
                HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);

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

            printf("\r\n");

                HAL_SuspendTick();
        HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI;

                SystemClock_Config();
                MX_RTC_Init();
  }
  /* USER CODE END 3 */
}

使用特权

评论回复
板凳
抹茶妹妹|  楼主 | 2022-9-30 22:55 | 只看该作者

使用特权

评论回复
地板
抹茶妹妹|  楼主 | 2022-9-30 23:01 | 只看该作者
5秒唤醒一次还是挺准的

使用特权

评论回复
5
asmine| | 2022-10-1 08:58 | 只看该作者
唤醒频率怎么修改

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

149

帖子

0

粉丝