|
STM32G474xx HAL 用户手册
|
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 (