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這個函數

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