STM32F103xB HAL User Manual
stm32f1xx_ll_rtc.c
Go to the documentation of this file.
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>&copy; 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****/