STM32G474xx HAL 用户手册
stm32g4xx_ll_rtc.c
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_ll_rtc.c
00004   * @author  MCD Application Team
00005   * @brief   RTC LL 模块驱动。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2019 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * 本软件受可在本软件组件根目录中找到的 LICENSE 文件条款的约束。
00013   * 如果本软件未附带 LICENSE 文件,则按原样提供。
00014   *
00015   ******************************************************************************
00016   */
00017   */
00018 #if defined(USE_FULL_LL_DRIVER)
00019 
00020 /* 包含 ------------------------------------------------------------------*/
00021 #include "stm32g4xx_ll_rtc.h"
00022 #include "stm32g4xx_ll_cortex.h"
00023 #ifdef  USE_FULL_ASSERT
00024 #include "stm32_assert.h"
00025 #else  /* USE_FULL_ASSERT */
00026 #define assert_param(expr) ((void)0U)
00027 #endif /* USE_FULL_ASSERT */
00028 
00029 /** @addtogroup STM32G4xx_LL_Driver
00030   * @{
00031   */
00032 
00033 #if defined(RTC)
00034 
00035 /** @addtogroup RTC_LL
00036   * @{
00037   */
00038 
00039 /* 私有类型 -------------------------------------------------------------*/
00040 /* 私有变量 ---------------------------------------------------------*/
00041 /* 私有常量 ---------------------------------------------------------*/
00042 /** @addtogroup RTC_LL_Private_Constants
00043   * @{
00044   */
00045 /* 用于预分频器的默认值 */
00046 #define RTC_ASYNCH_PRESC_DEFAULT     ((uint32_t) 0x0000007FU)
00047 #define RTC_SYNCH_PRESC_DEFAULT      ((uint32_t) 0x000000FFU)
00048 
00049 /* 用于超时的值 */
00050 #define RTC_INITMODE_TIMEOUT         ((uint32_t) 1000U) /* 当 tick 设置为 1ms 时为 1s */
00051 #define RTC_SYNCHRO_TIMEOUT          ((uint32_t) 1000U) /* 当 tick 设置为 1ms 时为 1s */
00052 /**
00053   * @}
00054   */
00055 
00056 /* 私有宏 ------------------------------------------------------------*/
00057 /** @addtogroup RTC_LL_Private_Macros
00058   * @{
00059   */
00060 #define IS_LL_RTC_HOURFORMAT(__VALUE__) (((__VALUE__) == LL_RTC_HOURFORMAT_24HOUR) \
00061                                          || ((__VALUE__) == LL_RTC_HOURFORMAT_AMPM))
00062 
00063 #define IS_LL_RTC_ASYNCH_PREDIV(__VALUE__)   ((__VALUE__) <= 0x7FU)
00064 
00065 #define IS_LL_RTC_SYNCH_PREDIV(__VALUE__)    ((__VALUE__) <= 0x7FFFU)
00066 
00067 #define IS_LL_RTC_FORMAT(__VALUE__) (((__VALUE__) == LL_RTC_FORMAT_BIN) \
00068                                      || ((__VALUE__) == LL_RTC_FORMAT_BCD))
00069 
00070 #define IS_LL_RTC_TIME_FORMAT(__VALUE__) (((__VALUE__) == LL_RTC_TIME_FORMAT_AM_OR_24) \
00071                                           || ((__VALUE__) == LL_RTC_TIME_FORMAT_PM))
00072 
00073 #define IS_LL_RTC_HOUR12(__HOUR__)            (((__HOUR__) > 0U) && ((__HOUR__) <= 12U))
00074 #define IS_LL_RTC_HOUR24(__HOUR__)            ((__HOUR__) <= 23U)
00075 #define IS_LL_RTC_MINUTES(__MINUTES__)        ((__MINUTES__) <= 59U)
00076 #define IS_LL_RTC_SECONDS(__SECONDS__)        ((__SECONDS__) <= 59U)
00077 
00078 #define IS_LL_RTC_WEEKDAY(__VALUE__) (((__VALUE__) == LL_RTC_WEEKDAY_MONDAY) \
00079                                       || ((__VALUE__) == LL_RTC_WEEKDAY_TUESDAY) \
00080                                       || ((__VALUE__) == LL_RTC_WEEKDAY_WEDNESDAY) \
00081                                       || ((__VALUE__) == LL_RTC_WEEKDAY_THURSDAY) \
00082                                       || ((__VALUE__) == LL_RTC_WEEKDAY_FRIDAY) \
00083                                       || ((__VALUE__) == LL_RTC_WEEKDAY_SATURDAY) \
00084                                       || ((__VALUE__) == LL_RTC_WEEKDAY_SUNDAY))
00085 
00086 #define IS_LL_RTC_DAY(__DAY__)    (((__DAY__) >= (uint32_t)1U) && ((__DAY__) <= (uint32_t)31U))
00087 
00088 #define IS_LL_RTC_MONTH(__MONTH__) (((__MONTH__) >= 1U) && ((__MONTH__) <= 12U))
00089 
00090 #define IS_LL_RTC_YEAR(__YEAR__) ((__YEAR__) <= 99U)
00091 
00092 #define IS_LL_RTC_ALMA_MASK(__VALUE__) (((__VALUE__) == LL_RTC_ALMA_MASK_NONE) \
00093                                         || ((__VALUE__) == LL_RTC_ALMA_MASK_DATEWEEKDAY) \
00094                                         || ((__VALUE__) == LL_RTC_ALMA_MASK_HOURS) \
00095                                         || ((__VALUE__) == LL_RTC_ALMA_MASK_MINUTES) \
00096                                         || ((__VALUE__) == LL_RTC_ALMA_MASK_SECONDS) \
00097                                         || ((__VALUE__) == LL_RTC_ALMA_MASK_ALL))
00098 
00099 #define IS_LL_RTC_ALMB_MASK(__VALUE__) (((__VALUE__) == LL_RTC_ALMB_MASK_NONE) \
00100                                         || ((__VALUE__) == LL_RTC_ALMB_MASK_DATEWEEKDAY) \
00101                                         || ((__VALUE__) == LL_RTC_ALMB_MASK_HOURS) \
00102                                         || ((__VALUE__) == LL_RTC_ALMB_MASK_MINUTES) \
00103                                         || ((__VALUE__) == LL_RTC_ALMB_MASK_SECONDS) \
00104                                         || ((__VALUE__) == LL_RTC_ALMB_MASK_ALL))
00105 
00106 
00107 #define IS_LL_RTC_ALMA_DATE_WEEKDAY_SEL(__SEL__) (((__SEL__) == LL_RTC_ALMA_DATEWEEKDAYSEL_DATE) || \
00108                                                   ((__SEL__) == LL_RTC_ALMA_DATEWEEKDAYSEL_WEEKDAY))
00109 
00110 #define IS_LL_RTC_ALMB_DATE_WEEKDAY_SEL(__SEL__) (((__SEL__) == LL_RTC_ALMB_DATEWEEKDAYSEL_DATE) || \
00111                                                   ((__SEL__) == LL_RTC_ALMB_DATEWEEKDAYSEL_WEEKDAY))
00112 /**
00113   * @}
00114   */
00115 /* 私有函数原型 -----------------------------------------------*/
00116 /* 导出函数 --------------------------------------------------------*/
00117 /** @addtogroup RTC_LL_Exported_Functions
00118   * @{
00119   */
00120 
00121 /** @addtogroup RTC_LL_EF_Init
00122   * @{
00123   */
00124 
00125 /**
00126   * @brief  将 RTC 寄存器反初始化为其默认复位值。
00127   * @note   此函数不会复位 RTC 时钟源和 RTC 备份数据寄存器。
00128   * @param  RTCx RTC 实例
00129   * @retval 一个 ErrorStatus 枚举值:
00130   *          - SUCCESS: RTC 寄存器已反初始化
00131   *          - ERROR: RTC 寄存器未反初始化
00132   */
00133   */
00134 ErrorStatus LL_RTC_DeInit(RTC_TypeDef *RTCx)
00135 {
00136   ErrorStatus status = ERROR;
00137 
00138   /* 检查参数 */
00139   assert_param(IS_RTC_ALL_INSTANCE(RTCx));
00140   assert_param(IS_TAMP_ALL_INSTANCE(TAMP));
00141 
00142   /* 禁用 RTC 寄存器的写保护 */
00143   LL_RTC_DisableWriteProtection(RTCx);
00144 
00145   /* 设置初始化模式 */
00146   if (