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();
}
}