STM32F4 Cubemx闹钟的设置

目的:每天定时闹钟
直接上过程:
步骤一、配置
在这里插入图片描述
日历设置,我这里是20-03-06 9:00:00 星期五。那天都无所谓,有函数可以修改。
在这里插入图片描述

闹钟设置:09:01:00秒的闹钟
注意:Alarm mask hours等这些设置,我英语不太好,但是我知道mask是什么意思。它是屏蔽的意思。我这里是每天09:01:00。如果全部不屏蔽,则,RTC时间与闹钟时间完全一致才会触发。mask是用来屏蔽触发条件的。
比如说:我工作日屏蔽,秒屏蔽。那么这样的话,每天9:01分都会进入闹钟中断函数,而且会进去60次,09:01:00-09:01:59期间,每S都会触发一次。
在这里插入图片描述
使能中断
在这里插入图片描述
再帖几个函数上来

// Alarm A callback. AL_RTC_AlarmAEventCallback(hrtc);
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
//	portBASE_TYPE xHigherPriorityTaskWoken;
	 /* Clear the AlarmA interrupt pending bit */
  __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF);
}
//Sets the specified RTC Alarm with Interrupt 
HAL_StatusTypeDef RTC_Set_Alarm_IT(uint8_t hour,uint8_t min,uint8_t sec)
{
	
  RTC_AlarmTypeDef salarmstructure;
  salarmstructure.Alarm = RTC_ALARM_A;
  salarmstructure.AlarmTime.Hours = hour;
  salarmstructure.AlarmTime.Minutes = min;
  salarmstructure.AlarmTime.Seconds = sec;
	
  salarmstructure.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  salarmstructure.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
//  salarmstructure.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS
//                              |RTC_ALARMMASK_SECONDS;
  salarmstructure.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
  salarmstructure.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  salarmstructure.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  salarmstructure.AlarmDateWeekDay = 1;
	
	if(HAL_RTC_SetAlarm_IT(&hrtc, &salarmstructure, RTC_FORMAT_BIN)) return HAL_ERROR;
	return HAL_OK;
}
//Sets RTC current date. 优化的不是很好,强迫症者可自行修改
HAL_StatusTypeDef RTC_Set_Date_Time(uint8_t year,uint8_t month,uint8_t date,uint8_t week,uint8_t hour,uint8_t min,uint8_t sec,uint8_t ampm)
{
	RTC_DateTypeDef RTC_DateStructure;
	RTC_TimeTypeDef RTC_TimeStructure;

	RTC_DateStructure.Date=date;
	RTC_DateStructure.Month=month;
	RTC_DateStructure.WeekDay=week;
	RTC_DateStructure.Year=year;
	if(HAL_RTC_SetDate(&hrtc,&RTC_DateStructure,RTC_FORMAT_BIN))    return HAL_ERROR;
    
	RTC_TimeStructure.Hours=hour;
	RTC_TimeStructure.Minutes=min;
	RTC_TimeStructure.Seconds=sec;
	RTC_TimeStructure.TimeFormat=ampm;
	RTC_TimeStructure.DayLightSaving=RTC_DAYLIGHTSAVING_NONE;
  RTC_TimeStructure.StoreOperation=RTC_STOREOPERATION_RESET;
	if(HAL_RTC_SetTime(&hrtc,&RTC_TimeStructure,RTC_FORMAT_BIN))     return HAL_ERROR;

    return HAL_OK;
}
HAL_StatusTypeDef RTC_GetAlarm(void)
{
	if(HAL_RTC_GetAlarm(&hrtc, &RTC_GetAlarmStruct, RTC_ALARM_A, RTC_FORMAT_BIN))return HAL_ERROR;
	return HAL_OK;
}

要用到的代码都贴上来了,其实还是挺简单的。留意RTC_Set_Alarm_IT这个函数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章