STM32 HAL库 CubeMX 低功耗STOP模式,RTC定时5分钟发送一次数据然后进入休眠,实测待机电流5.6uA(二)

STM32 HAL库 CubeMX 低功耗STOP模式,RTC定时5分钟发送一次数据然后进入休眠,实测待机电流5.6uA(二)_第1张图片
HAL_Init();//如果不初始化HAL,会导致概率性读取日期、时间失败,从而导致下次闹钟设置失败,进而导致第二天这个时间才能唤醒。切记!

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
	HAL_Init();//如果不初始化会导致概率性读取日期、时间失败
	//置位数据发送标志
    Sendlag = 1;
	//printf("HAL_RTC_AlarmAEventCallback\n");
	//必须要读取时间和日期,才能获得准确的时间和日期,还需要先读时间后读日期
	RTC_TimeTypeDef Time;
	RTC_DateTypeDef Date;

    HAL_RTC_GetTime(hrtc, &Time, RTC_FORMAT_BIN);
    HAL_RTC_GetDate(hrtc, &Date, RTC_FORMAT_BIN);
    sAlarm.AlarmTime.Hours = Time.Hours + CLOCKHOURS;
    sAlarm.AlarmTime.Minutes = Time.Minutes + CLOCKMINUTES;
    sAlarm.AlarmTime.Seconds = Time.Seconds + 0;
    sAlarm.AlarmTime.SubSeconds = Time.SubSeconds + 0;

	if (sAlarm.AlarmTime.Seconds > 59)
	{
	   sAlarm.AlarmTime.Seconds -= 60;
	   sAlarm.AlarmTime.Minutes += 1;
	}

	if ( sAlarm.AlarmTime.Minutes >59)
	{
	   sAlarm.AlarmTime.Minutes -= 60;
	   sAlarm.AlarmTime.Hours += 1;
	}
	if (sAlarm.AlarmTime.Hours > 23)
	{
	   sAlarm.AlarmTime.Hours -= 24;
	}
    
  
    if (HAL_RTC_SetAlarm_IT(hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK)//使能闹钟中断
    {
      Error_Handler();
    }
}

你可能感兴趣的:(STM32 HAL库 CubeMX 低功耗STOP模式,RTC定时5分钟发送一次数据然后进入休眠,实测待机电流5.6uA(二))