STM32F103xB HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32f1xx_ll_rtc.c 00004 * @author MCD Application Team 00005 * @brief RTC LL module driver. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * <h2><center>© Copyright (c) 2016 STMicroelectronics. 00010 * All rights reserved.</center></h2> 00011 * 00012 * This software component is licensed by ST under BSD 3-Clause license, 00013 * the "License"; You may not use this file except in compliance with the 00014 * License. You may obtain a copy of the License at: 00015 * opensource.org/licenses/BSD-3-Clause 00016 * 00017 ****************************************************************************** 00018 */ 00019 00020 #if defined(USE_FULL_LL_DRIVER) 00021 00022 /* Includes ------------------------------------------------------------------*/ 00023 #include "stm32f1xx_ll_rtc.h" 00024 #include "stm32f1xx_ll_cortex.h" 00025 #ifdef USE_FULL_ASSERT 00026 #include "stm32_assert.h" 00027 #else 00028 #define assert_param(expr) ((void)0U) 00029 #endif 00030 00031 /** @addtogroup STM32F1xx_LL_Driver 00032 * @{ 00033 */ 00034 00035 #if defined(RTC) 00036 00037 /** @addtogroup RTC_LL 00038 * @{ 00039 */ 00040 00041 /* Private types -------------------------------------------------------------*/ 00042 /* Private variables ---------------------------------------------------------*/ 00043 /* Private constants ---------------------------------------------------------*/ 00044 /** @addtogroup RTC_LL_Private_Constants 00045 * @{ 00046 */ 00047 /* Default values used for prescaler */ 00048 #define RTC_ASYNCH_PRESC_DEFAULT 0x00007FFFU 00049 00050 /* Values used for timeout */ 00051 #define RTC_INITMODE_TIMEOUT 1000U /* 1s when tick set to 1ms */ 00052 #define RTC_SYNCHRO_TIMEOUT 1000U /* 1s when tick set to 1ms */ 00053 /** 00054 * @} 00055 */ 00056 00057 /* Private macros ------------------------------------------------------------*/ 00058 /** @addtogroup RTC_LL_Private_Macros 00059 * @{ 00060 */ 00061 00062 #define IS_LL_RTC_ASYNCH_PREDIV(__VALUE__) ((__VALUE__) <= 0xFFFFFU) 00063 00064 #define IS_LL_RTC_FORMAT(__VALUE__) (((__VALUE__) == LL_RTC_FORMAT_BIN) \ 00065 || ((__VALUE__) == LL_RTC_FORMAT_BCD)) 00066 00067 #define IS_LL_RTC_HOUR24(__HOUR__) ((__HOUR__) <= 23U) 00068 #define IS_LL_RTC_MINUTES(__MINUTES__) ((__MINUTES__) <= 59U) 00069 #define IS_LL_RTC_SECONDS(__SECONDS__) ((__SECONDS__) <= 59U) 00070 #define IS_LL_RTC_CALIB_OUTPUT(__OUTPUT__) (((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_NONE) || \ 00071 ((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_RTCCLOCK) || \ 00072 ((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_ALARM) || \ 00073 ((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_SECOND)) 00074 /** 00075 * @} 00076 */ 00077 /* Private function prototypes -----------------------------------------------*/ 00078 /* Exported functions --------------------------------------------------------*/ 00079 /** @addtogroup RTC_LL_Exported_Functions 00080 * @{ 00081 */ 00082 00083 /** @addtogroup RTC_LL_EF_Init 00084 * @{ 00085 */ 00086 00087 /** 00088 * @brief De-Initializes the RTC registers to their default reset values. 00089 * @note This function doesn't reset the RTC Clock source and RTC Backup Data 00090 * registers. 00091 * @param RTCx RTC Instance 00092 * @retval An ErrorStatus enumeration value: 00093 * - SUCCESS: RTC registers are de-initialized 00094 * - ERROR: RTC registers are not de-initialized 00095 */ 00096 ErrorStatus LL_RTC_DeInit(RTC_TypeDef *RTCx) 00097 { 00098 ErrorStatus status = ERROR; 00099 00100 /* Check the parameter */ 00101 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00102 00103 /* Disable the write protection for RTC registers */ 00104 LL_RTC_DisableWriteProtection(RTCx); 00105 00106 /* Set Initialization mode */ 00107 if (LL_RTC_EnterInitMode(RTCx) != ERROR) 00108 { 00109 LL_RTC_WriteReg(RTCx, CNTL, 0x0000); 00110 LL_RTC_WriteReg(RTCx, CNTH, 0x0000); 00111 LL_RTC_WriteReg(RTCx, PRLH, 0x0000); 00112 LL_RTC_WriteReg(RTCx, PRLL, 0x8000); 00113 LL_RTC_WriteReg(RTCx, CRH, 0x0000); 00114 LL_RTC_WriteReg(RTCx, CRL, 0x0020); 00115 00116 /* Reset Tamper and alternate functions configuration register */ 00117 LL_RTC_WriteReg(BKP, RTCCR, 0x00000000U); 00118 LL_RTC_WriteReg(BKP, CR, 0x00000000U); 00119 LL_RTC_WriteReg(BKP, CSR, 0x00000000U); 00120 00121 /* Exit Initialization Mode */ 00122 if (LL_RTC_ExitInitMode(RTCx) != ERROR) 00123 { 00124 /* Wait till the RTC RSF flag is set */ 00125 status = LL_RTC_WaitForSynchro(RTCx); 00126 00127 /* Clear RSF Flag */ 00128 LL_RTC_ClearFlag_RS(RTCx); 00129 00130 /* Enable the write protection for RTC registers */ 00131 LL_RTC_EnableWriteProtection(RTCx); 00132 } 00133 } 00134 else 00135 { 00136 /* Enable the write protection for RTC registers */ 00137 LL_RTC_EnableWriteProtection(RTCx); 00138 } 00139 00140 return status; 00141 } 00142 00143 /** 00144 * @brief Initializes the RTC registers according to the specified parameters 00145 * in RTC_InitStruct. 00146 * @param RTCx RTC Instance 00147 * @param RTC_InitStruct pointer to a @ref LL_RTC_InitTypeDef structure that contains 00148 * the configuration information for the RTC peripheral. 00149 * @note The RTC Prescaler register is write protected and can be written in 00150 * initialization mode only. 00151 * @note the user should call LL_RTC_StructInit() or the structure of Prescaler 00152 * need to be initialized before RTC init() 00153 * @retval An ErrorStatus enumeration value: 00154 * - SUCCESS: RTC registers are initialized 00155 * - ERROR: RTC registers are not initialized 00156 */ 00157 ErrorStatus LL_RTC_Init(RTC_TypeDef *RTCx, LL_RTC_InitTypeDef *RTC_InitStruct) 00158 { 00159 ErrorStatus status = ERROR; 00160 00161 /* Check the parameters */ 00162 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00163 assert_param(IS_LL_RTC_ASYNCH_PREDIV(RTC_InitStruct->AsynchPrescaler)); 00164 assert_param(IS_LL_RTC_CALIB_OUTPUT(RTC_InitStruct->OutPutSource)); 00165 /* Waiting for synchro */ 00166 if (LL_RTC_WaitForSynchro(RTCx) != ERROR) 00167 { 00168 /* Set Initialization mode */ 00169 if (LL_RTC_EnterInitMode(RTCx) != ERROR) 00170 { 00171 /* Clear Flag Bits */ 00172 LL_RTC_ClearFlag_ALR(RTCx); 00173 LL_RTC_ClearFlag_OW(RTCx); 00174 LL_RTC_ClearFlag_SEC(RTCx); 00175 00176 if (RTC_InitStruct->OutPutSource != LL_RTC_CALIB_OUTPUT_NONE) 00177 { 00178 /* Disable the selected Tamper Pin */ 00179 LL_RTC_TAMPER_Disable(BKP); 00180 } 00181 /* Set the signal which will be routed to RTC Tamper Pin */ 00182 LL_RTC_SetOutputSource(BKP, RTC_InitStruct->OutPutSource); 00183 00184 /* Configure Synchronous and Asynchronous prescaler factor */ 00185 LL_RTC_SetAsynchPrescaler(RTCx, RTC_InitStruct->AsynchPrescaler); 00186 00187 /* Exit Initialization Mode */ 00188 LL_RTC_ExitInitMode(RTCx); 00189 00190 status = SUCCESS; 00191 } 00192 } 00193 return status; 00194 } 00195 00196 /** 00197 * @brief Set each @ref LL_RTC_InitTypeDef field to default value. 00198 * @param RTC_InitStruct pointer to a @ref LL_RTC_InitTypeDef structure which will be initialized. 00199 * @retval None 00200 */ 00201 void LL_RTC_StructInit(LL_RTC_InitTypeDef *RTC_InitStruct) 00202 { 00203 /* Set RTC_InitStruct fields to default values */ 00204 RTC_InitStruct->AsynchPrescaler = RTC_ASYNCH_PRESC_DEFAULT; 00205 RTC_InitStruct->OutPutSource = LL_RTC_CALIB_OUTPUT_NONE; 00206 } 00207 00208 /** 00209 * @brief Set the RTC current time. 00210 * @param RTCx RTC Instance 00211 * @param RTC_Format This parameter can be one of the following values: 00212 * @arg @ref LL_RTC_FORMAT_BIN 00213 * @arg @ref LL_RTC_FORMAT_BCD 00214 * @param RTC_TimeStruct pointer to a RTC_TimeTypeDef structure that contains 00215 * the time configuration information for the RTC. 00216 * @note The user should call LL_RTC_TIME_StructInit() or the structure 00217 * of time need to be initialized before time init() 00218 * @retval An ErrorStatus enumeration value: 00219 * - SUCCESS: RTC Time register is configured 00220 * - ERROR: RTC Time register is not configured 00221 */ 00222 ErrorStatus LL_RTC_TIME_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_TimeTypeDef *RTC_TimeStruct) 00223 { 00224 ErrorStatus status = ERROR; 00225 uint32_t counter_time = 0U; 00226 00227 /* Check the parameters */ 00228 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00229 assert_param(IS_LL_RTC_FORMAT(RTC_Format)); 00230 00231 if (RTC_Format == LL_RTC_FORMAT_BIN) 00232 { 00233 assert_param(IS_LL_RTC_HOUR24(RTC_TimeStruct->Hours)); 00234 assert_param(IS_LL_RTC_MINUTES(RTC_TimeStruct->Minutes)); 00235 assert_param(IS_LL_RTC_SECONDS(RTC_TimeStruct->Seconds)); 00236 } 00237 else 00238 { 00239 assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours))); 00240 assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Minutes))); 00241 assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Seconds))); 00242 } 00243 00244 /* Enter Initialization mode */ 00245 if (LL_RTC_EnterInitMode(RTCx) != ERROR) 00246 { 00247 /* Check the input parameters format */ 00248 if (RTC_Format == LL_RTC_FORMAT_BIN) 00249 { 00250 counter_time = (uint32_t)(((uint32_t)RTC_TimeStruct->Hours * 3600U) + \ 00251 ((uint32_t)RTC_TimeStruct->Minutes * 60U) + \ 00252 ((uint32_t)RTC_TimeStruct->Seconds)); 00253 LL_RTC_TIME_Set(RTCx, counter_time); 00254 } 00255 else 00256 { 00257 counter_time = (((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours)) * 3600U) + \ 00258 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Minutes)) * 60U) + \ 00259 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Seconds)))); 00260 LL_RTC_TIME_Set(RTCx, counter_time); 00261 } 00262 status = SUCCESS; 00263 } 00264 /* Exit Initialization mode */ 00265 LL_RTC_ExitInitMode(RTCx); 00266 00267 return status; 00268 } 00269 00270 /** 00271 * @brief Set each @ref LL_RTC_TimeTypeDef field to default value (Time = 00h:00min:00sec). 00272 * @param RTC_TimeStruct pointer to a @ref LL_RTC_TimeTypeDef structure which will be initialized. 00273 * @retval None 00274 */ 00275 void LL_RTC_TIME_StructInit(LL_RTC_TimeTypeDef *RTC_TimeStruct) 00276 { 00277 /* Time = 00h:00min:00sec */ 00278 RTC_TimeStruct->Hours = 0U; 00279 RTC_TimeStruct->Minutes = 0U; 00280 RTC_TimeStruct->Seconds = 0U; 00281 } 00282 00283 /** 00284 * @brief Set the RTC Alarm. 00285 * @param RTCx RTC Instance 00286 * @param RTC_Format This parameter can be one of the following values: 00287 * @arg @ref LL_RTC_FORMAT_BIN 00288 * @arg @ref LL_RTC_FORMAT_BCD 00289 * @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure that 00290 * contains the alarm configuration parameters. 00291 * @note the user should call LL_RTC_ALARM_StructInit() or the structure 00292 * of Alarm need to be initialized before Alarm init() 00293 * @retval An ErrorStatus enumeration value: 00294 * - SUCCESS: ALARM registers are configured 00295 * - ERROR: ALARM registers are not configured 00296 */ 00297 ErrorStatus LL_RTC_ALARM_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct) 00298 { 00299 ErrorStatus status = ERROR; 00300 uint32_t counter_alarm = 0U; 00301 /* Check the parameters */ 00302 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00303 assert_param(IS_LL_RTC_FORMAT(RTC_Format)); 00304 00305 if (RTC_Format == LL_RTC_FORMAT_BIN) 00306 { 00307 assert_param(IS_LL_RTC_HOUR24(RTC_AlarmStruct->AlarmTime.Hours)); 00308 assert_param(IS_LL_RTC_MINUTES(RTC_AlarmStruct->AlarmTime.Minutes)); 00309 assert_param(IS_LL_RTC_SECONDS(RTC_AlarmStruct->AlarmTime.Seconds)); 00310 } 00311 else 00312 { 00313 assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours))); 00314 assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes))); 00315 assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds))); 00316 } 00317 00318 /* Enter Initialization mode */ 00319 if (LL_RTC_EnterInitMode(RTCx) != ERROR) 00320 { 00321 /* Check the input parameters format */ 00322 if (RTC_Format == LL_RTC_FORMAT_BIN) 00323 { 00324 counter_alarm = (uint32_t)(((uint32_t)RTC_AlarmStruct->AlarmTime.Hours * 3600U) + \ 00325 ((uint32_t)RTC_AlarmStruct->AlarmTime.Minutes * 60U) + \ 00326 ((uint32_t)RTC_AlarmStruct->AlarmTime.Seconds)); 00327 LL_RTC_ALARM_Set(RTCx, counter_alarm); 00328 } 00329 else 00330 { 00331 counter_alarm = (((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)) * 3600U) + \ 00332 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes)) * 60U) + \ 00333 ((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds)))); 00334 LL_RTC_ALARM_Set(RTCx, counter_alarm); 00335 } 00336 status = SUCCESS; 00337 } 00338 /* Exit Initialization mode */ 00339 LL_RTC_ExitInitMode(RTCx); 00340 00341 return status; 00342 } 00343 00344 /** 00345 * @brief Set each @ref LL_RTC_AlarmTypeDef of ALARM field to default value (Time = 00h:00mn:00sec / 00346 * Day = 1st day of the month/Mask = all fields are masked). 00347 * @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure which will be initialized. 00348 * @retval None 00349 */ 00350 void LL_RTC_ALARM_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct) 00351 { 00352 /* Alarm Time Settings : Time = 00h:00mn:00sec */ 00353 RTC_AlarmStruct->AlarmTime.Hours = 0U; 00354 RTC_AlarmStruct->AlarmTime.Minutes = 0U; 00355 RTC_AlarmStruct->AlarmTime.Seconds = 0U; 00356 } 00357 00358 /** 00359 * @brief Enters the RTC Initialization mode. 00360 * @param RTCx RTC Instance 00361 * @retval An ErrorStatus enumeration value: 00362 * - SUCCESS: RTC is in Init mode 00363 * - ERROR: RTC is not in Init mode 00364 */ 00365 ErrorStatus LL_RTC_EnterInitMode(RTC_TypeDef *RTCx) 00366 { 00367 __IO uint32_t timeout = RTC_INITMODE_TIMEOUT; 00368 ErrorStatus status = SUCCESS; 00369 uint32_t tmp = 0U; 00370 00371 /* Check the parameter */ 00372 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00373 00374 /* Wait till RTC is in INIT state and if Time out is reached exit */ 00375 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx); 00376 while ((timeout != 0U) && (tmp != 1U)) 00377 { 00378 if (LL_SYSTICK_IsActiveCounterFlag() == 1U) 00379 { 00380 timeout --; 00381 } 00382 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx); 00383 if (timeout == 0U) 00384 { 00385 status = ERROR; 00386 } 00387 } 00388 00389 /* Disable the write protection for RTC registers */ 00390 LL_RTC_DisableWriteProtection(RTCx); 00391 00392 return status; 00393 } 00394 00395 /** 00396 * @brief Exit the RTC Initialization mode. 00397 * @note When the initialization sequence is complete, the calendar restarts 00398 * counting after 4 RTCCLK cycles. 00399 * @param RTCx RTC Instance 00400 * @retval An ErrorStatus enumeration value: 00401 * - SUCCESS: RTC exited from in Init mode 00402 * - ERROR: Not applicable 00403 */ 00404 ErrorStatus LL_RTC_ExitInitMode(RTC_TypeDef *RTCx) 00405 { 00406 __IO uint32_t timeout = RTC_INITMODE_TIMEOUT; 00407 ErrorStatus status = SUCCESS; 00408 uint32_t tmp = 0U; 00409 00410 /* Check the parameter */ 00411 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00412 00413 /* Disable initialization mode */ 00414 LL_RTC_EnableWriteProtection(RTCx); 00415 00416 /* Wait till RTC is in INIT state and if Time out is reached exit */ 00417 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx); 00418 while ((timeout != 0U) && (tmp != 1U)) 00419 { 00420 if (LL_SYSTICK_IsActiveCounterFlag() == 1U) 00421 { 00422 timeout --; 00423 } 00424 tmp = LL_RTC_IsActiveFlag_RTOF(RTCx); 00425 if (timeout == 0U) 00426 { 00427 status = ERROR; 00428 } 00429 } 00430 return status; 00431 } 00432 00433 /** 00434 * @brief Set the Time Counter 00435 * @param RTCx RTC Instance 00436 * @param TimeCounter this value can be from 0 to 0xFFFFFFFF 00437 * @retval An ErrorStatus enumeration value: 00438 * - SUCCESS: RTC Counter register configured 00439 * - ERROR: Not applicable 00440 */ 00441 ErrorStatus LL_RTC_TIME_SetCounter(RTC_TypeDef *RTCx, uint32_t TimeCounter) 00442 { 00443 ErrorStatus status = ERROR; 00444 /* Check the parameter */ 00445 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00446 00447 /* Enter Initialization mode */ 00448 if (LL_RTC_EnterInitMode(RTCx) != ERROR) 00449 { 00450 LL_RTC_TIME_Set(RTCx, TimeCounter); 00451 status = SUCCESS; 00452 } 00453 /* Exit Initialization mode */ 00454 LL_RTC_ExitInitMode(RTCx); 00455 00456 return status; 00457 } 00458 00459 /** 00460 * @brief Set Alarm Counter. 00461 * @param RTCx RTC Instance 00462 * @param AlarmCounter this value can be from 0 to 0xFFFFFFFF 00463 * @retval An ErrorStatus enumeration value: 00464 * - SUCCESS: RTC exited from in Init mode 00465 * - ERROR: Not applicable 00466 */ 00467 ErrorStatus LL_RTC_ALARM_SetCounter(RTC_TypeDef *RTCx, uint32_t AlarmCounter) 00468 { 00469 ErrorStatus status = ERROR; 00470 /* Check the parameter */ 00471 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00472 00473 /* Enter Initialization mode */ 00474 if (LL_RTC_EnterInitMode(RTCx) != ERROR) 00475 { 00476 LL_RTC_ALARM_Set(RTCx, AlarmCounter); 00477 status = SUCCESS; 00478 } 00479 /* Exit Initialization mode */ 00480 LL_RTC_ExitInitMode(RTCx); 00481 00482 return status; 00483 } 00484 00485 /** 00486 * @brief Waits until the RTC registers are synchronized with RTC APB clock. 00487 * @note The RTC Resynchronization mode is write protected, use the 00488 * @ref LL_RTC_DisableWriteProtection before calling this function. 00489 * @param RTCx RTC Instance 00490 * @retval An ErrorStatus enumeration value: 00491 * - SUCCESS: RTC registers are synchronised 00492 * - ERROR: RTC registers are not synchronised 00493 */ 00494 ErrorStatus LL_RTC_WaitForSynchro(RTC_TypeDef *RTCx) 00495 { 00496 __IO uint32_t timeout = RTC_SYNCHRO_TIMEOUT; 00497 ErrorStatus status = SUCCESS; 00498 uint32_t tmp = 0U; 00499 00500 /* Check the parameter */ 00501 assert_param(IS_RTC_ALL_INSTANCE(RTCx)); 00502 00503 /* Clear RSF flag */ 00504 LL_RTC_ClearFlag_RS(RTCx); 00505 00506 /* Wait the registers to be synchronised */ 00507 tmp = LL_RTC_IsActiveFlag_RS(RTCx); 00508 while ((timeout != 0U) && (tmp != 0U)) 00509 { 00510 if (LL_SYSTICK_IsActiveCounterFlag() == 1U) 00511 { 00512 timeout--; 00513 } 00514 tmp = LL_RTC_IsActiveFlag_RS(RTCx); 00515 if (timeout == 0U) 00516 { 00517 status = ERROR; 00518 } 00519 } 00520 00521 return (status); 00522 } 00523 00524 /** 00525 * @} 00526 */ 00527 00528 /** 00529 * @} 00530 */ 00531 00532 /** 00533 * @} 00534 */ 00535 00536 #endif /* defined(RTC) */ 00537 00538 /** 00539 * @} 00540 */ 00541 00542 #endif /* USE_FULL_LL_DRIVER */ 00543 00544 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/