32 RTC_TimeTypeDef sTime = {0U};
33 RTC_DateTypeDef sDate = {0U};
35 __HAL_RCC_RTC_ENABLE();
36 __HAL_RCC_PWR_CLK_ENABLE();
37 HAL_PWR_EnableBkUpAccess();
39 HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 4U, 0U);
40 HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
43 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
44 hrtc.Init.AsynchPrediv = 127U;
45 hrtc.Init.SynchPrediv = 249U;
46 hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
47 hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
48 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
49 hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
50 if(HAL_RTC_Init(&
hrtc) != HAL_OK)
58 sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
59 sTime.StoreOperation = RTC_STOREOPERATION_RESET;
60 if(HAL_RTC_SetTime(&
hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
65 sDate.WeekDay = RTC_WEEKDAY_WEDNESDAY;
66 sDate.Month = RTC_MONTH_FEBRUARY;
69 if(HAL_RTC_SetDate(&
hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
91 HAL_RTC_GetTime(&
hrtc, &time, RTC_FORMAT_BIN);
92 HAL_RTC_GetDate(&
hrtc, &date, RTC_FORMAT_BIN);
94 dateTime.tm_year = date.Year + 100U;
95 dateTime.tm_mon = date.Month - 1U;
96 dateTime.tm_mday = date.Date;
97 dateTime.tm_hour = time.Hours;
98 dateTime.tm_min = time.Minutes;
99 dateTime.tm_sec = time.Seconds;
100 dateTime.tm_isdst = 0U;
102 epoch = mktime(&dateTime);
104 return (uint32_t)epoch;
121 RTC_DateTypeDef* date,
122 RTC_TimeTypeDef* time)
124 assert_param(date != NULL);
125 assert_param(time != NULL);
127 time_t rawTime = (time_t)epoch;
128 struct tm dateTime = *localtime(&rawTime);
130 date->Year = dateTime.tm_year - 100U;
131 date->Month = dateTime.tm_mon + 1U;
132 date->Date = dateTime.tm_mday;
134 (dateTime.tm_wday == 0U) ? RTC_WEEKDAY_SUNDAY : dateTime.tm_wday;
136 time->Hours = dateTime.tm_hour;
137 time->Minutes = dateTime.tm_min;
138 time->Seconds = dateTime.tm_sec;
139 time->SubSeconds = 0U;
151 static RTC_DateTypeDef date = {0U};
152 static RTC_TimeTypeDef time = {0U};
153 static RTC_AlarmTypeDef sAlarm = {0U};
161 sAlarm.Alarm = RTC_ALARM_A;
162 sAlarm.AlarmDateWeekDay = date.Date;
163 sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
164 sAlarm.AlarmTime.Hours = time.Hours;
165 sAlarm.AlarmTime.Minutes = time.Minutes;
166 sAlarm.AlarmTime.Seconds = time.Seconds;
167 sAlarm.AlarmTime.SubSeconds = time.SubSeconds;
168 sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
169 sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
170 sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
171 sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
173 if(HAL_RTC_SetAlarm_IT(&
hrtc, &sAlarm, RTC_FORMAT_BIN) == HAL_OK)
191 HAL_RTC_DeactivateAlarm(&
hrtc, RTC_ALARM_A);
201 HAL_RTC_WaitForSynchro(&
hrtc);