|
STM32G474xx HAL用户手册
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32g4xx_hal_rtc.c 00004 * @author MCD Application Team 00005 * @brief RTC HAL模块驱动程序。 00006 * 本文件提供固件功能以管理实时时钟(RTC)外设的以下功能: 00007 * + 初始化/反初始化函数 00008 * + 日历(时间和日期)配置 00009 * + 闹钟(闹钟A和闹钟B)配置 00010 * + 唤醒定时器配置 00011 * + 时间戳配置 00012 * + 篡改检测配置 00013 * + 备份数据寄存器配置 00014 * + RTC篡改和时间戳引脚选择 00015 * + 中断和标志管理 00016 * 00017 ****************************************************************************** 00018 * @attention 00019 * 00020 * Copyright (c) 2019 STMicroelectronics. 00021 * All rights reserved. 00022 * 00023 * This software is licensed under terms that can be found in the LICENSE file 00024 * in the root directory of this software component. 00025 * If no LICENSE file comes with this software, it is provided AS-IS. 00026 * 00027 ****************************************************************************** 00028 @verbatim 00029 =============================================================================== 00030 ##### RTC工作条件 ##### 00031 =============================================================================== 00032 [..] 实时时钟(RTC)和RTC备份寄存器可以在主VDD电源关闭时 00033 由VBAT电压供电。 00034 为了在VDD关闭时保留RTC备份寄存器的内容并为RTC供电, 00036 VBAT引脚可以连接到由电池或其他电源提供的可选 00037 备用电压。 00038 00039 ##### 备份域复位 ##### 00040 =============================================================================== 00041 [..] 备份域复位将所有RTC寄存器和RCC_BDCR寄存器 00042 设置为复位值。 00043 当以下任一事件发生时,会产生备份域复位: 00044 (#) 软件复位,通过设置RCC备份域控制寄存器(RCC_BDCR)中的BDRST位触发。 00045 (#) VDD或VBAT上电,如果两个电源之前都已断电。 00046 (#) 篡改检测事件复位所有数据备份寄存器。 00047 00048 ##### 备份域访问 ##### 00049 ================================================================== 00050 [..] 复位后,备份域(RTC寄存器和RTC备份数据寄存器) 00051 受保护以防止可能的意外写访问。 00052 [..] 要启用对RTC域和RTC寄存器的访问,请按以下步骤操作: 00053 (+) 使用__HAL_RCC_PWR_CLK_ENABLE()函数启用电源控制器(PWR)APB1接口时钟。 00054 (+) 使用HAL_PWR_EnableBkUpAccess()函数启用对RTC域的访问。 00055 (+) 使用__HAL_RCC_RTC_CONFIG()函数选择RTC时钟源。 00056 (+) 使用__HAL_RCC_RTC_ENABLE()函数启用RTC时钟。 00057 00058 [..] 要启用对RTC域和RTC寄存器的访问,请按以下步骤操作: 00059 (#) 调用HAL_RCCEx_PeriphCLKConfig函数,参数为RCC_PERIPHCLK_RTC, 00060 并选择RTCClockSelection(LSE、LSI或HSEdiv32) 00061 (#) 使用__HAL_RCC_RTC_ENABLE()宏启用RTC时钟。 00062 00063 ##### 如何使用RTC驱动程序 ##### 00065 =================================================================== 00066 [..] 00067 (+) 启用RTC域访问(请参阅上面的描述部分)。 00068 (+) 使用HAL_RTC_Init()函数配置RTC预分频器(异步和同步)和RTC小时格式。 00069 00070 *** 时间和日期配置 *** 00071 =================================== 00072 [..] 00073 (+) 要配置RTC日历(时间和日期),请使用HAL_RTC_SetTime() 00075 和HAL_RTC_SetDate()函数。 00076 (+) 要读取RTC日历,请使用HAL_RTC_GetTime()和HAL_RTC_GetDate()函数。 00078 00079 *** 闹钟配置 *** 00080 =========================== 00081 [..] 00082 (+) 要配置RTC闹钟,请使用HAL_RTC_SetAlarm()函数。 00083 您也可以使用HAL_RTC_SetAlarm_IT()函数配置RTC闹钟为中断模式。 00084 (+) 要读取RTC闹钟,请使用HAL_RTC_GetAlarm()函数。 00086 00087 ##### RTC和低功耗模式 ##### 00088 ================================================================== 00089 [..] MCU可以通过RTC备用功能从低功耗模式唤醒。 00090 [..] RTC备用功能包括RTC闹钟(闹钟A和闹钟B)、 00091 RTC唤醒、RTC篡改事件检测和RTC时间戳事件检测。 00092 这些RTC备用功能可以从停止和 00093 待机低功耗模式唤醒系统。 00094 [..] 系统也可以不依赖外部中断(自动唤醒模式)从低功耗模式唤醒, 00096 方式为使用RTC闹钟或RTC唤醒事件。 00097 [..] RTC提供了一个可编程的时间基,用于在 00098 停止或待机模式下按固定间隔唤醒。 00099 只有当RTC时钟源为LSE或LSI时,才能从停止和待机模式唤醒。 00100 00101 *** 回调函数注册 *** 00103 ============================================= 00104 当编译定义USE_HAL_RTC_REGISTER_CALLBACKS设置为0或 00106 未定义时,回调注册功能不可用,所有回调 00107 都设置为对应的弱函数。这是推荐的配置 00108 以优化内存/代码消耗/性能。 00109 00110 [..] 00111 编译定义USE_RTC_REGISTER_CALLBACKS设置为1时, 00112 允许用户动态配置驱动程序回调。 00113 使用函数HAL_RTC_RegisterCallback()注册中断回调。 00114 00115 [..] 00116 函数HAL_RTC_RegisterCallback()允许注册以下回调: 00117 (+) AlarmAEventCallback : RTC闹钟A事件回调。 00118 (+) AlarmBEventCallback : RTC闹钟B事件回调。 00119 (+) TimeStampEventCallback : RTC时间戳事件回调。 00120 (+) WakeUpTimerEventCallback : RTC唤醒定时器事件回调。 00121 (+) Tamper1EventCallback : RTC篡改1事件回调。 00122 (+) Tamper2EventCallback : RTC篡改2事件回调。 00123 (+) Tamper3EventCallback : RTC篡改3事件回调。 00124 (+) Tamper4EventCallback : RTC篡改4事件回调。 00125 (+) Tamper5EventCallback : RTC篡改5事件回调。 00126 (+) Tamper6EventCallback : RTC篡改6事件回调。 00127 (+) Tamper7EventCallback : RTC篡改7事件回调。 00128 (+) Tamper8EventCallback : RTC篡改8事件回调。 00129 (+) InternalTamper1EventCallback : RTC内部篡改1事件回调。 00130 (+) InternalTamper2EventCallback : RTC内部篡改2事件回调。 00131 (+) InternalTamper3EventCallback : RTC内部篡改3事件回调。 00132 (+) InternalTamper5EventCallback : RTC内部篡改5事件回调。 00133 (+) InternalTamper8EventCallback : RTC内部篡改8事件回调。 00134 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 00135 (+) AlarmAEventCallback_S : RTC闹钟A事件回调_S 00136 (+) AlarmBEventCallback_S : RTC闹钟B事件回调_S。 00137 (+) TimeStampEventCallback_S : RTC时间戳事件回调_S。 00138 (+) WakeUpTimerEventCallback_S : RTC唤醒定时器事件回调_S。 00139 (+) Tamper1EventCallback_S : RTC篡改1事件回调_S。 00140 (+) Tamper2EventCallback_S : RTC篡改2事件回调_S。 00141 (+) Tamper3EventCallback_S : RTC篡改3事件回调_S。 00142 (+) Tamper4EventCallback_S : RTC篡改4事件回调_S。 00143 (+) Tamper5EventCallback_S : RTC篡改5事件回调_S。 00144 (+) Tamper6EventCallback_S : RTC篡改6事件回调_S。 00145 (+) Tamper7EventCallback_S : RTC篡改7事件回调_S。 00146 (+) Tamper8EventCallback_S : RTC篡改8事件回调_S。 00147 (+) InternalTamper1EventCallback_S : RTC内部篡改1事件回调_S。 00148 (+) InternalTamper2EventCallback_S : RTC内部篡改2事件回调_S。 00149 (+) InternalTamper3EventCallback_S : RTC内部篡改3事件回调_S。 00150 (+) InternalTamper5EventCallback_S : RTC内部篡改5事件回调_S。 00151 (+) InternalTamper8EventCallback_S : RTC内部篡改8事件回调_S。 00152 #endif 00153 (+) MspInitCallback : RTC MspInit回调。 00155 (+) MspDeInitCallback : RTC MspDeInit回调。 00156 [..] 00157 此函数需要HAL外设句柄、回调ID 00158 以及指向用户回调函数的指针作为参数。 00159 00160 [..] 00161 使用函数HAL_RTC_UnRegisterCallback()将回调重置为默认 00163 弱函数。 00164 HAL_RTC_UnRegisterCallback()需要HAL外设句柄、 00165 和回调ID作为参数。 00166 此函数允许重置以下回调: 00167 (+) AlarmAEventCallback : RTC闹钟A事件回调。 00168 (+) AlarmBEventCallback : RTC闹钟B事件回调。 00169 (+) TimeStampEventCallback : RTC时间戳事件回调。 00171 (+) WakeUpTimerEventCallback : RTC唤醒定时器事件回调。 00173 (+) Tamper1EventCallback : RTC篡改1事件回调。 00175 (+) Tamper2EventCallback : RTC篡改2事件回调。 00176 (+) Tamper3EventCallback : RTC篡改3事件回调。 00177 (+) Tamper4EventCallback : RTC篡改4事件回调。 00179 (+) Tamper5EventCallback : RTC篡改5事件回调。 00180 (+) Tamper6EventCallback : RTC篡改6事件回调。 00181 (+) Tamper7EventCallback : RTC篡改7事件回调。 00183 (+) Tamper8EventCallback : RTC篡改8事件回调。 00185 (+) InternalTamper1EventCallback : RTC内部篡改1事件回调。 00186 (+) InternalTamper2EventCallback : RTC内部篡改2事件回调。 00187 (+) InternalTamper3EventCallback : RTC内部篡改3事件回调。 00188 (+) InternalTamper4EventCallback : RTC内部篡改4事件回调。 00189 (+) InternalTamper5EventCallback : RTC内部篡改5事件回调。 00190 (+) InternalTamper6EventCallback : RTC内部篡改6事件回调。 00191 (+) InternalTamper8EventCallback : RTC内部篡改8事件回调。 00192 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 00193 (+) AlarmAEventCallback_S : RTC闹钟A事件回调安全版本。 00194 (+) AlarmBEventCallback_S : RTC闹钟B事件回调安全版本。 00195 (+) TimeStampEventCallback_S : RTC时间戳事件回调安全版本。 00196 (+) WakeUpTimerEventCallback_S : RTC唤醒定时器事件回调安全版本。 00197 (+) Tamper1EventCallback_S : RTC篡改1事件回调安全版本。 00198 (+) Tamper2EventCallback_S : RTC篡改2事件回调安全版本。 00199 (+) Tamper3EventCallback_S : RTC篡改3事件回调安全版本。 00200 (+) Tamper4EventCallback_S : RTC篡改4事件回调安全版本。 00201 (+) Tamper5EventCallback_S : RTC篡改5事件回调安全版本。 00202 (+) Tamper6EventCallback_S : RTC篡改6事件回调安全版本。 00203 (+) Tamper7EventCallback_S : RTC篡改7事件回调安全版本。 00204 (+) Tamper8EventCallback_S : RTC篡改8事件回调安全版本。 00205 (+) InternalTamper1EventCallback_S : RTC内部篡改1事件回调安全版本。 00206 (+) InternalTamper2EventCallback_S : RTC内部篡改2事件回调安全版本。 00207 (+) InternalTamper3EventCallback_S : RTC内部篡改3事件回调安全版本。 00208 (+) InternalTamper4EventCallback_S : RTC内部篡改4事件回调安全版本。 00209 (+) InternalTamper5EventCallback_S : RTC内部篡改5事件回调安全版本。 00210 (+) InternalTamper6EventCallback_S : RTC内部篡改6事件回调安全版本。 00211 (+) InternalTamper8EventCallback_S : RTC内部篡改8事件回调安全版本。 00212 #endif 00213 (+) MspInitCallback : RTC MspInit回调。 00215 (+) MspDeInitCallback : RTC MspDeInit回调。 00216 00217 [..] 00218 默认情况下,在HAL_RTC_Init()之后且当状态为HAL_RTC_STATE_RESET时, 00219 所有回调都设置为对应的弱函数: 00220 例如AlarmAEventCallback()、TimeStampEventCallback()。 00221 例外情况是MspInit和MspDeInit回调,这些回调仅在这些回调为null时 00223 (即之前未注册)在HAL_RTC_Init()/HAL_RTC_DeInit()中重置为旧的弱函数。 00224 否则,如果MspInit或MspDeInit不为null,HAL_RTC_Init()/HAL_RTC_DeInit() 00225 将保留并使用用户注册的MspInit/MspDeInit回调 00226 (之前已注册) 00227 00228 [..] 00229 回调只能在HAL_RTC_STATE_READY状态下注册/注销。 00230 例外情况是MspInit/MspDeInit可以在 00231 HAL_RTC_STATE_READY或HAL_RTC_STATE_RESET状态下注册/注销, 00232 因此注册的(用户)MspInit/DeInit回调可以在Init/DeInit期间使用。 00233 在这种情况下,首先使用HAL_RTC_RegisterCallback()注册MspInit/MspDeInit用户回调, 00234 然后再调用HAL_RTC_DeInit() 00235 或HAL_RTC_Init()函数。 00236 00237 [..] 00239 当编译定义USE_HAL_RTC_REGISTER_CALLBACKS设置为0或 00241 未定义时,回调注册功能不可用