20 #if defined(USE_FULL_LL_DRIVER)
25 #ifdef USE_FULL_ASSERT
28 #define assert_param(expr) ((void)0U)
48 #define RTC_ASYNCH_PRESC_DEFAULT 0x00007FFFU
51 #define RTC_INITMODE_TIMEOUT 1000U
52 #define RTC_SYNCHRO_TIMEOUT 1000U
62 #define IS_LL_RTC_ASYNCH_PREDIV(__VALUE__) ((__VALUE__) <= 0xFFFFFU)
64 #define IS_LL_RTC_FORMAT(__VALUE__) (((__VALUE__) == LL_RTC_FORMAT_BIN) \
65 || ((__VALUE__) == LL_RTC_FORMAT_BCD))
67 #define IS_LL_RTC_HOUR24(__HOUR__) ((__HOUR__) <= 23U)
68 #define IS_LL_RTC_MINUTES(__MINUTES__) ((__MINUTES__) <= 59U)
69 #define IS_LL_RTC_SECONDS(__SECONDS__) ((__SECONDS__) <= 59U)
70 #define IS_LL_RTC_CALIB_OUTPUT(__OUTPUT__) (((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_NONE) || \
71 ((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_RTCCLOCK) || \
72 ((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_ALARM) || \
73 ((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_SECOND))
104 LL_RTC_DisableWriteProtection(RTCx);
107 if (LL_RTC_EnterInitMode(RTCx) !=
ERROR)
109 LL_RTC_WriteReg(RTCx, CNTL, 0x0000);
110 LL_RTC_WriteReg(RTCx, CNTH, 0x0000);
111 LL_RTC_WriteReg(RTCx, PRLH, 0x0000);
112 LL_RTC_WriteReg(RTCx, PRLL, 0x8000);
113 LL_RTC_WriteReg(RTCx, CRH, 0x0000);
114 LL_RTC_WriteReg(RTCx, CRL, 0x0020);
117 LL_RTC_WriteReg(
BKP, RTCCR, 0x00000000U);
118 LL_RTC_WriteReg(
BKP, CR, 0x00000000U);
119 LL_RTC_WriteReg(
BKP, CSR, 0x00000000U);
122 if (LL_RTC_ExitInitMode(RTCx) !=
ERROR)
125 status = LL_RTC_WaitForSynchro(RTCx);
128 LL_RTC_ClearFlag_RS(RTCx);
131 LL_RTC_EnableWriteProtection(RTCx);
137 LL_RTC_EnableWriteProtection(RTCx);
163 assert_param(IS_LL_RTC_ASYNCH_PREDIV(RTC_InitStruct->AsynchPrescaler));
164 assert_param(IS_LL_RTC_CALIB_OUTPUT(RTC_InitStruct->OutPutSource));
166 if (LL_RTC_WaitForSynchro(RTCx) !=
ERROR)
169 if (LL_RTC_EnterInitMode(RTCx) !=
ERROR)
172 LL_RTC_ClearFlag_ALR(RTCx);
173 LL_RTC_ClearFlag_OW(RTCx);
174 LL_RTC_ClearFlag_SEC(RTCx);
176 if (RTC_InitStruct->OutPutSource != LL_RTC_CALIB_OUTPUT_NONE)
179 LL_RTC_TAMPER_Disable(
BKP);
182 LL_RTC_SetOutputSource(
BKP, RTC_InitStruct->OutPutSource);
185 LL_RTC_SetAsynchPrescaler(RTCx, RTC_InitStruct->AsynchPrescaler);
188 LL_RTC_ExitInitMode(RTCx);
201 void LL_RTC_StructInit(LL_RTC_InitTypeDef *RTC_InitStruct)
204 RTC_InitStruct->AsynchPrescaler = RTC_ASYNCH_PRESC_DEFAULT;
205 RTC_InitStruct->OutPutSource = LL_RTC_CALIB_OUTPUT_NONE;
225 uint32_t counter_time = 0U;
231 if (RTC_Format == LL_RTC_FORMAT_BIN)
234 assert_param(IS_LL_RTC_MINUTES(RTC_TimeStruct->Minutes));
235 assert_param(IS_LL_RTC_SECONDS(RTC_TimeStruct->Seconds));
239 assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours)));
240 assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Minutes)));
241 assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Seconds)));
245 if (LL_RTC_EnterInitMode(RTCx) !=
ERROR)
248 if (RTC_Format != LL_RTC_FORMAT_BIN)
250 counter_time = (uint32_t)(((uint32_t)RTC_TimeStruct->Hours * 3600U) + \
251 ((uint32_t)RTC_TimeStruct->Minutes * 60U) + \
252 ((uint32_t)RTC_TimeStruct->Seconds));
253 LL_RTC_TIME_Set(RTCx, counter_time);
257 counter_time = (((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours)) * 3600U) + \
258 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Minutes)) * 60U) + \
259 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Seconds))));
260 LL_RTC_TIME_Set(RTCx, counter_time);
265 LL_RTC_ExitInitMode(RTCx);
275 void LL_RTC_TIME_StructInit(LL_RTC_TimeTypeDef *RTC_TimeStruct)
278 RTC_TimeStruct->Hours = 0U;
279 RTC_TimeStruct->Minutes = 0U;
280 RTC_TimeStruct->Seconds = 0U;
297 ErrorStatus LL_RTC_ALARM_Init(
RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
300 uint32_t counter_alarm = 0U;
305 if (RTC_Format == LL_RTC_FORMAT_BIN)
307 assert_param(IS_LL_RTC_HOUR24(RTC_AlarmStruct->AlarmTime.Hours));
308 assert_param(IS_LL_RTC_MINUTES(RTC_AlarmStruct->AlarmTime.Minutes));
309 assert_param(IS_LL_RTC_SECONDS(RTC_AlarmStruct->AlarmTime.Seconds));
313 assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)));
314 assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes)));
315 assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds)));
319 if (LL_RTC_EnterInitMode(RTCx) !=
ERROR)
322 if (RTC_Format != LL_RTC_FORMAT_BIN)
324 counter_alarm = (uint32_t)(((uint32_t)RTC_AlarmStruct->AlarmTime.Hours * 3600U) + \
325 ((uint32_t)RTC_AlarmStruct->AlarmTime.Minutes * 60U) + \
326 ((uint32_t)RTC_AlarmStruct->AlarmTime.Seconds));
327 LL_RTC_ALARM_Set(RTCx, counter_alarm);
331 counter_alarm = (((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)) * 3600U) + \
332 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes)) * 60U) + \
333 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds))));
334 LL_RTC_ALARM_Set(RTCx, counter_alarm);
339 LL_RTC_ExitInitMode(RTCx);
350 void LL_RTC_ALARM_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
353 RTC_AlarmStruct->AlarmTime.Hours = 0U;
354 RTC_AlarmStruct->AlarmTime.Minutes = 0U;
355 RTC_AlarmStruct->AlarmTime.Seconds = 0U;
367 __IO uint32_t timeout = RTC_INITMODE_TIMEOUT;
375 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
376 while ((timeout != 0U) && (tmp != 1U))
382 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
390 LL_RTC_DisableWriteProtection(RTCx);
406 __IO uint32_t timeout = RTC_INITMODE_TIMEOUT;
414 LL_RTC_EnableWriteProtection(RTCx);
417 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
418 while ((timeout != 0U) && (tmp != 1U))
424 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
448 if (LL_RTC_EnterInitMode(RTCx) !=
ERROR)
450 LL_RTC_TIME_Set(RTCx, TimeCounter);
454 LL_RTC_ExitInitMode(RTCx);
474 if (LL_RTC_EnterInitMode(RTCx) !=
ERROR)
476 LL_RTC_ALARM_Set(RTCx, AlarmCounter);
480 LL_RTC_ExitInitMode(RTCx);
496 __IO uint32_t timeout = RTC_SYNCHRO_TIMEOUT;
504 LL_RTC_ClearFlag_RS(RTCx);
507 tmp = LL_RTC_IsActiveFlag_RS(RTCx);
508 while ((timeout != 0U) && (tmp != 0U))
514 tmp = LL_RTC_IsActiveFlag_RS(RTCx);