SPKT

Dependents:   WAV

Committer:
phungductung
Date:
Tue Jun 04 21:51:46 2019 +0000
Revision:
0:e87aa4c49e95
libray

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phungductung 0:e87aa4c49e95 1 /**
phungductung 0:e87aa4c49e95 2 ******************************************************************************
phungductung 0:e87aa4c49e95 3 * @file stm32f7xx_hal_rtc_ex.c
phungductung 0:e87aa4c49e95 4 * @author MCD Application Team
phungductung 0:e87aa4c49e95 5 * @version V1.0.4
phungductung 0:e87aa4c49e95 6 * @date 09-December-2015
phungductung 0:e87aa4c49e95 7 * @brief RTC HAL module driver.
phungductung 0:e87aa4c49e95 8 * This file provides firmware functions to manage the following
phungductung 0:e87aa4c49e95 9 * functionalities of the Real Time Clock (RTC) Extension peripheral:
phungductung 0:e87aa4c49e95 10 * + RTC Time Stamp functions
phungductung 0:e87aa4c49e95 11 * + RTC Tamper functions
phungductung 0:e87aa4c49e95 12 * + RTC Wake-up functions
phungductung 0:e87aa4c49e95 13 * + Extension Control functions
phungductung 0:e87aa4c49e95 14 * + Extension RTC features functions
phungductung 0:e87aa4c49e95 15 *
phungductung 0:e87aa4c49e95 16 @verbatim
phungductung 0:e87aa4c49e95 17 ==============================================================================
phungductung 0:e87aa4c49e95 18 ##### How to use this driver #####
phungductung 0:e87aa4c49e95 19 ==============================================================================
phungductung 0:e87aa4c49e95 20 [..]
phungductung 0:e87aa4c49e95 21 (+) Enable the RTC domain access.
phungductung 0:e87aa4c49e95 22 (+) Configure the RTC Prescaler (Asynchronous and Synchronous) and RTC hour
phungductung 0:e87aa4c49e95 23 format using the HAL_RTC_Init() function.
phungductung 0:e87aa4c49e95 24
phungductung 0:e87aa4c49e95 25 *** RTC Wakeup configuration ***
phungductung 0:e87aa4c49e95 26 ================================
phungductung 0:e87aa4c49e95 27 [..]
phungductung 0:e87aa4c49e95 28 (+) To configure the RTC Wakeup Clock source and Counter use the HAL_RTC_SetWakeUpTimer()
phungductung 0:e87aa4c49e95 29 function. You can also configure the RTC Wakeup timer in interrupt mode
phungductung 0:e87aa4c49e95 30 using the HAL_RTC_SetWakeUpTimer_IT() function.
phungductung 0:e87aa4c49e95 31 (+) To read the RTC WakeUp Counter register, use the HAL_RTC_GetWakeUpTimer()
phungductung 0:e87aa4c49e95 32 function.
phungductung 0:e87aa4c49e95 33
phungductung 0:e87aa4c49e95 34 *** TimeStamp configuration ***
phungductung 0:e87aa4c49e95 35 ===============================
phungductung 0:e87aa4c49e95 36 [..]
phungductung 0:e87aa4c49e95 37 (+) Enables the RTC TimeStamp using the HAL_RTC_SetTimeStamp() function.
phungductung 0:e87aa4c49e95 38 You can also configure the RTC TimeStamp with interrupt mode using the
phungductung 0:e87aa4c49e95 39 HAL_RTC_SetTimeStamp_IT() function.
phungductung 0:e87aa4c49e95 40 (+) To read the RTC TimeStamp Time and Date register, use the HAL_RTC_GetTimeStamp()
phungductung 0:e87aa4c49e95 41 function.
phungductung 0:e87aa4c49e95 42
phungductung 0:e87aa4c49e95 43 *** Internal TimeStamp configuration ***
phungductung 0:e87aa4c49e95 44 ===============================
phungductung 0:e87aa4c49e95 45 [..]
phungductung 0:e87aa4c49e95 46 (+) Enables the RTC internal TimeStamp using the HAL_RTC_SetInternalTimeStamp() function.
phungductung 0:e87aa4c49e95 47 (+) To read the RTC TimeStamp Time and Date register, use the HAL_RTC_GetTimeStamp()
phungductung 0:e87aa4c49e95 48 function.
phungductung 0:e87aa4c49e95 49
phungductung 0:e87aa4c49e95 50 *** Tamper configuration ***
phungductung 0:e87aa4c49e95 51 ============================
phungductung 0:e87aa4c49e95 52 [..]
phungductung 0:e87aa4c49e95 53 (+) Enable the RTC Tamper and Configure the Tamper filter count, trigger Edge
phungductung 0:e87aa4c49e95 54 or Level according to the Tamper filter (if equal to 0 Edge else Level)
phungductung 0:e87aa4c49e95 55 value, sampling frequency, NoErase, MaskFlag, precharge or discharge and
phungductung 0:e87aa4c49e95 56 Pull-UP using the HAL_RTC_SetTamper() function. You can configure RTC Tamper
phungductung 0:e87aa4c49e95 57 with interrupt mode using HAL_RTC_SetTamper_IT() function.
phungductung 0:e87aa4c49e95 58 (+) The default configuration of the Tamper erases the backup registers. To avoid
phungductung 0:e87aa4c49e95 59 erase, enable the NoErase field on the RTC_TAMPCR register.
phungductung 0:e87aa4c49e95 60
phungductung 0:e87aa4c49e95 61 *** Backup Data Registers configuration ***
phungductung 0:e87aa4c49e95 62 ===========================================
phungductung 0:e87aa4c49e95 63 [..]
phungductung 0:e87aa4c49e95 64 (+) To write to the RTC Backup Data registers, use the HAL_RTC_BKUPWrite()
phungductung 0:e87aa4c49e95 65 function.
phungductung 0:e87aa4c49e95 66 (+) To read the RTC Backup Data registers, use the HAL_RTC_BKUPRead()
phungductung 0:e87aa4c49e95 67 function.
phungductung 0:e87aa4c49e95 68
phungductung 0:e87aa4c49e95 69 @endverbatim
phungductung 0:e87aa4c49e95 70 ******************************************************************************
phungductung 0:e87aa4c49e95 71 * @attention
phungductung 0:e87aa4c49e95 72 *
phungductung 0:e87aa4c49e95 73 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
phungductung 0:e87aa4c49e95 74 *
phungductung 0:e87aa4c49e95 75 * Redistribution and use in source and binary forms, with or without modification,
phungductung 0:e87aa4c49e95 76 * are permitted provided that the following conditions are met:
phungductung 0:e87aa4c49e95 77 * 1. Redistributions of source code must retain the above copyright notice,
phungductung 0:e87aa4c49e95 78 * this list of conditions and the following disclaimer.
phungductung 0:e87aa4c49e95 79 * 2. Redistributions in binary form must reproduce the above copyright notice,
phungductung 0:e87aa4c49e95 80 * this list of conditions and the following disclaimer in the documentation
phungductung 0:e87aa4c49e95 81 * and/or other materials provided with the distribution.
phungductung 0:e87aa4c49e95 82 * 3. Neither the name of STMicroelectronics nor the names of its contributors
phungductung 0:e87aa4c49e95 83 * may be used to endorse or promote products derived from this software
phungductung 0:e87aa4c49e95 84 * without specific prior written permission.
phungductung 0:e87aa4c49e95 85 *
phungductung 0:e87aa4c49e95 86 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
phungductung 0:e87aa4c49e95 87 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
phungductung 0:e87aa4c49e95 88 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
phungductung 0:e87aa4c49e95 89 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
phungductung 0:e87aa4c49e95 90 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
phungductung 0:e87aa4c49e95 91 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
phungductung 0:e87aa4c49e95 92 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
phungductung 0:e87aa4c49e95 93 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
phungductung 0:e87aa4c49e95 94 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
phungductung 0:e87aa4c49e95 95 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
phungductung 0:e87aa4c49e95 96 *
phungductung 0:e87aa4c49e95 97 ******************************************************************************
phungductung 0:e87aa4c49e95 98 */
phungductung 0:e87aa4c49e95 99
phungductung 0:e87aa4c49e95 100 /* Includes ------------------------------------------------------------------*/
phungductung 0:e87aa4c49e95 101 #include "stm32f7xx_hal.h"
phungductung 0:e87aa4c49e95 102
phungductung 0:e87aa4c49e95 103 /** @addtogroup STM32F7xx_HAL_Driver
phungductung 0:e87aa4c49e95 104 * @{
phungductung 0:e87aa4c49e95 105 */
phungductung 0:e87aa4c49e95 106
phungductung 0:e87aa4c49e95 107 /** @defgroup RTCEx RTCEx
phungductung 0:e87aa4c49e95 108 * @brief RTC Extended HAL module driver
phungductung 0:e87aa4c49e95 109 * @{
phungductung 0:e87aa4c49e95 110 */
phungductung 0:e87aa4c49e95 111
phungductung 0:e87aa4c49e95 112 #ifdef HAL_RTC_MODULE_ENABLED
phungductung 0:e87aa4c49e95 113
phungductung 0:e87aa4c49e95 114 /* Private typedef -----------------------------------------------------------*/
phungductung 0:e87aa4c49e95 115 /* Private define ------------------------------------------------------------*/
phungductung 0:e87aa4c49e95 116 /* Private macro -------------------------------------------------------------*/
phungductung 0:e87aa4c49e95 117 /* Private variables ---------------------------------------------------------*/
phungductung 0:e87aa4c49e95 118 /* Private function prototypes -----------------------------------------------*/
phungductung 0:e87aa4c49e95 119 /* Private functions ---------------------------------------------------------*/
phungductung 0:e87aa4c49e95 120
phungductung 0:e87aa4c49e95 121 /** @defgroup RTCEx_Exported_Functions RTCEx Exported Functions
phungductung 0:e87aa4c49e95 122 * @{
phungductung 0:e87aa4c49e95 123 */
phungductung 0:e87aa4c49e95 124
phungductung 0:e87aa4c49e95 125
phungductung 0:e87aa4c49e95 126 /** @defgroup RTCEx_Group1 RTC TimeStamp and Tamper functions
phungductung 0:e87aa4c49e95 127 * @brief RTC TimeStamp and Tamper functions
phungductung 0:e87aa4c49e95 128 *
phungductung 0:e87aa4c49e95 129 @verbatim
phungductung 0:e87aa4c49e95 130 ===============================================================================
phungductung 0:e87aa4c49e95 131 ##### RTC TimeStamp and Tamper functions #####
phungductung 0:e87aa4c49e95 132 ===============================================================================
phungductung 0:e87aa4c49e95 133
phungductung 0:e87aa4c49e95 134 [..] This section provides functions allowing to configure TimeStamp feature
phungductung 0:e87aa4c49e95 135
phungductung 0:e87aa4c49e95 136 @endverbatim
phungductung 0:e87aa4c49e95 137 * @{
phungductung 0:e87aa4c49e95 138 */
phungductung 0:e87aa4c49e95 139
phungductung 0:e87aa4c49e95 140 /**
phungductung 0:e87aa4c49e95 141 * @brief Sets TimeStamp.
phungductung 0:e87aa4c49e95 142 * @note This API must be called before enabling the TimeStamp feature.
phungductung 0:e87aa4c49e95 143 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 144 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 145 * @param TimeStampEdge: Specifies the pin edge on which the TimeStamp is
phungductung 0:e87aa4c49e95 146 * activated.
phungductung 0:e87aa4c49e95 147 * This parameter can be one of the following values:
phungductung 0:e87aa4c49e95 148 * @arg RTC_TIMESTAMPEDGE_RISING: the Time stamp event occurs on the
phungductung 0:e87aa4c49e95 149 * rising edge of the related pin.
phungductung 0:e87aa4c49e95 150 * @arg RTC_TIMESTAMPEDGE_FALLING: the Time stamp event occurs on the
phungductung 0:e87aa4c49e95 151 * falling edge of the related pin.
phungductung 0:e87aa4c49e95 152 * @param RTC_TimeStampPin: specifies the RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 153 * This parameter can be one of the following values:
phungductung 0:e87aa4c49e95 154 * @arg RTC_TIMESTAMPPIN_PC13: PC13 is selected as RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 155 * @arg RTC_TIMESTAMPPIN_PI8: PI8 is selected as RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 156 * @arg RTC_TIMESTAMPPIN_PC1: PC1 is selected as RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 157 * @retval HAL status
phungductung 0:e87aa4c49e95 158 */
phungductung 0:e87aa4c49e95 159 HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin)
phungductung 0:e87aa4c49e95 160 {
phungductung 0:e87aa4c49e95 161 uint32_t tmpreg = 0;
phungductung 0:e87aa4c49e95 162
phungductung 0:e87aa4c49e95 163 /* Check the parameters */
phungductung 0:e87aa4c49e95 164 assert_param(IS_TIMESTAMP_EDGE(TimeStampEdge));
phungductung 0:e87aa4c49e95 165 assert_param(IS_RTC_TIMESTAMP_PIN(RTC_TimeStampPin));
phungductung 0:e87aa4c49e95 166
phungductung 0:e87aa4c49e95 167 /* Process Locked */
phungductung 0:e87aa4c49e95 168 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 169
phungductung 0:e87aa4c49e95 170 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 171
phungductung 0:e87aa4c49e95 172 /* Get the RTC_CR register and clear the bits to be configured */
phungductung 0:e87aa4c49e95 173 tmpreg = (uint32_t)(hrtc->Instance->CR & (uint32_t)~(RTC_CR_TSEDGE | RTC_CR_TSE));
phungductung 0:e87aa4c49e95 174
phungductung 0:e87aa4c49e95 175 tmpreg|= TimeStampEdge;
phungductung 0:e87aa4c49e95 176
phungductung 0:e87aa4c49e95 177 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 178 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 179
phungductung 0:e87aa4c49e95 180 hrtc->Instance->OR &= (uint32_t)~RTC_OR_TSINSEL;
phungductung 0:e87aa4c49e95 181 hrtc->Instance->OR |= (uint32_t)(RTC_TimeStampPin);
phungductung 0:e87aa4c49e95 182
phungductung 0:e87aa4c49e95 183 /* Configure the Time Stamp TSEDGE and Enable bits */
phungductung 0:e87aa4c49e95 184 hrtc->Instance->CR = (uint32_t)tmpreg;
phungductung 0:e87aa4c49e95 185
phungductung 0:e87aa4c49e95 186 __HAL_RTC_TIMESTAMP_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 187
phungductung 0:e87aa4c49e95 188 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 189 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 190
phungductung 0:e87aa4c49e95 191 /* Change RTC state */
phungductung 0:e87aa4c49e95 192 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 193
phungductung 0:e87aa4c49e95 194 /* Process Unlocked */
phungductung 0:e87aa4c49e95 195 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 196
phungductung 0:e87aa4c49e95 197 return HAL_OK;
phungductung 0:e87aa4c49e95 198 }
phungductung 0:e87aa4c49e95 199
phungductung 0:e87aa4c49e95 200 /**
phungductung 0:e87aa4c49e95 201 * @brief Sets TimeStamp with Interrupt.
phungductung 0:e87aa4c49e95 202 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 203 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 204 * @note This API must be called before enabling the TimeStamp feature.
phungductung 0:e87aa4c49e95 205 * @param TimeStampEdge: Specifies the pin edge on which the TimeStamp is
phungductung 0:e87aa4c49e95 206 * activated.
phungductung 0:e87aa4c49e95 207 * This parameter can be one of the following values:
phungductung 0:e87aa4c49e95 208 * @arg RTC_TIMESTAMPEDGE_RISING: the Time stamp event occurs on the
phungductung 0:e87aa4c49e95 209 * rising edge of the related pin.
phungductung 0:e87aa4c49e95 210 * @arg RTC_TIMESTAMPEDGE_FALLING: the Time stamp event occurs on the
phungductung 0:e87aa4c49e95 211 * falling edge of the related pin.
phungductung 0:e87aa4c49e95 212 * @param RTC_TimeStampPin: Specifies the RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 213 * This parameter can be one of the following values:
phungductung 0:e87aa4c49e95 214 * @arg RTC_TIMESTAMPPIN_PC13: PC13 is selected as RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 215 * @arg RTC_TIMESTAMPPIN_PI8: PI8 is selected as RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 216 * @arg RTC_TIMESTAMPPIN_PC1: PC1 is selected as RTC TimeStamp Pin.
phungductung 0:e87aa4c49e95 217 * @retval HAL status
phungductung 0:e87aa4c49e95 218 */
phungductung 0:e87aa4c49e95 219 HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp_IT(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin)
phungductung 0:e87aa4c49e95 220 {
phungductung 0:e87aa4c49e95 221 uint32_t tmpreg = 0;
phungductung 0:e87aa4c49e95 222
phungductung 0:e87aa4c49e95 223 /* Check the parameters */
phungductung 0:e87aa4c49e95 224 assert_param(IS_TIMESTAMP_EDGE(TimeStampEdge));
phungductung 0:e87aa4c49e95 225 assert_param(IS_RTC_TIMESTAMP_PIN(RTC_TimeStampPin));
phungductung 0:e87aa4c49e95 226
phungductung 0:e87aa4c49e95 227 /* Process Locked */
phungductung 0:e87aa4c49e95 228 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 229
phungductung 0:e87aa4c49e95 230 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 231
phungductung 0:e87aa4c49e95 232 /* Get the RTC_CR register and clear the bits to be configured */
phungductung 0:e87aa4c49e95 233 tmpreg = (uint32_t)(hrtc->Instance->CR & (uint32_t)~(RTC_CR_TSEDGE | RTC_CR_TSE));
phungductung 0:e87aa4c49e95 234
phungductung 0:e87aa4c49e95 235 tmpreg |= TimeStampEdge;
phungductung 0:e87aa4c49e95 236
phungductung 0:e87aa4c49e95 237 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 238 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 239
phungductung 0:e87aa4c49e95 240 /* Configure the Time Stamp TSEDGE and Enable bits */
phungductung 0:e87aa4c49e95 241 hrtc->Instance->CR = (uint32_t)tmpreg;
phungductung 0:e87aa4c49e95 242
phungductung 0:e87aa4c49e95 243 hrtc->Instance->OR &= (uint32_t)~RTC_OR_TSINSEL;
phungductung 0:e87aa4c49e95 244 hrtc->Instance->OR |= (uint32_t)(RTC_TimeStampPin);
phungductung 0:e87aa4c49e95 245
phungductung 0:e87aa4c49e95 246 __HAL_RTC_TIMESTAMP_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 247
phungductung 0:e87aa4c49e95 248 /* Enable IT timestamp */
phungductung 0:e87aa4c49e95 249 __HAL_RTC_TIMESTAMP_ENABLE_IT(hrtc,RTC_IT_TS);
phungductung 0:e87aa4c49e95 250
phungductung 0:e87aa4c49e95 251 /* RTC timestamp Interrupt Configuration: EXTI configuration */
phungductung 0:e87aa4c49e95 252 __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT();
phungductung 0:e87aa4c49e95 253
phungductung 0:e87aa4c49e95 254 EXTI->RTSR |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT;
phungductung 0:e87aa4c49e95 255
phungductung 0:e87aa4c49e95 256 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 257 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 258
phungductung 0:e87aa4c49e95 259 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 260
phungductung 0:e87aa4c49e95 261 /* Process Unlocked */
phungductung 0:e87aa4c49e95 262 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 263
phungductung 0:e87aa4c49e95 264 return HAL_OK;
phungductung 0:e87aa4c49e95 265 }
phungductung 0:e87aa4c49e95 266
phungductung 0:e87aa4c49e95 267 /**
phungductung 0:e87aa4c49e95 268 * @brief Deactivates TimeStamp.
phungductung 0:e87aa4c49e95 269 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 270 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 271 * @retval HAL status
phungductung 0:e87aa4c49e95 272 */
phungductung 0:e87aa4c49e95 273 HAL_StatusTypeDef HAL_RTCEx_DeactivateTimeStamp(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 274 {
phungductung 0:e87aa4c49e95 275 uint32_t tmpreg = 0;
phungductung 0:e87aa4c49e95 276
phungductung 0:e87aa4c49e95 277 /* Process Locked */
phungductung 0:e87aa4c49e95 278 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 279
phungductung 0:e87aa4c49e95 280 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 281
phungductung 0:e87aa4c49e95 282 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 283 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 284
phungductung 0:e87aa4c49e95 285 /* In case of interrupt mode is used, the interrupt source must disabled */
phungductung 0:e87aa4c49e95 286 __HAL_RTC_TIMESTAMP_DISABLE_IT(hrtc, RTC_IT_TS);
phungductung 0:e87aa4c49e95 287
phungductung 0:e87aa4c49e95 288 /* Get the RTC_CR register and clear the bits to be configured */
phungductung 0:e87aa4c49e95 289 tmpreg = (uint32_t)(hrtc->Instance->CR & (uint32_t)~(RTC_CR_TSEDGE | RTC_CR_TSE));
phungductung 0:e87aa4c49e95 290
phungductung 0:e87aa4c49e95 291 /* Configure the Time Stamp TSEDGE and Enable bits */
phungductung 0:e87aa4c49e95 292 hrtc->Instance->CR = (uint32_t)tmpreg;
phungductung 0:e87aa4c49e95 293
phungductung 0:e87aa4c49e95 294 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 295 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 296
phungductung 0:e87aa4c49e95 297 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 298
phungductung 0:e87aa4c49e95 299 /* Process Unlocked */
phungductung 0:e87aa4c49e95 300 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 301
phungductung 0:e87aa4c49e95 302 return HAL_OK;
phungductung 0:e87aa4c49e95 303 }
phungductung 0:e87aa4c49e95 304
phungductung 0:e87aa4c49e95 305 /**
phungductung 0:e87aa4c49e95 306 * @brief Sets Internal TimeStamp.
phungductung 0:e87aa4c49e95 307 * @note This API must be called before enabling the internal TimeStamp feature.
phungductung 0:e87aa4c49e95 308 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 309 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 310 * @retval HAL status
phungductung 0:e87aa4c49e95 311 */
phungductung 0:e87aa4c49e95 312 HAL_StatusTypeDef HAL_RTCEx_SetInternalTimeStamp(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 313 {
phungductung 0:e87aa4c49e95 314 /* Process Locked */
phungductung 0:e87aa4c49e95 315 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 316
phungductung 0:e87aa4c49e95 317 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 318
phungductung 0:e87aa4c49e95 319 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 320 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 321
phungductung 0:e87aa4c49e95 322 /* Configure the internal Time Stamp Enable bits */
phungductung 0:e87aa4c49e95 323 __HAL_RTC_INTERNAL_TIMESTAMP_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 324
phungductung 0:e87aa4c49e95 325 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 326 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 327
phungductung 0:e87aa4c49e95 328 /* Change RTC state */
phungductung 0:e87aa4c49e95 329 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 330
phungductung 0:e87aa4c49e95 331 /* Process Unlocked */
phungductung 0:e87aa4c49e95 332 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 333
phungductung 0:e87aa4c49e95 334 return HAL_OK;
phungductung 0:e87aa4c49e95 335 }
phungductung 0:e87aa4c49e95 336
phungductung 0:e87aa4c49e95 337 /**
phungductung 0:e87aa4c49e95 338 * @brief Deactivates internal TimeStamp.
phungductung 0:e87aa4c49e95 339 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 340 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 341 * @retval HAL status
phungductung 0:e87aa4c49e95 342 */
phungductung 0:e87aa4c49e95 343 HAL_StatusTypeDef HAL_RTCEx_DeactivateInternalTimeStamp(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 344 {
phungductung 0:e87aa4c49e95 345 /* Process Locked */
phungductung 0:e87aa4c49e95 346 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 347
phungductung 0:e87aa4c49e95 348 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 349
phungductung 0:e87aa4c49e95 350 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 351 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 352
phungductung 0:e87aa4c49e95 353 /* Configure the internal Time Stamp Enable bits */
phungductung 0:e87aa4c49e95 354 __HAL_RTC_INTERNAL_TIMESTAMP_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 355
phungductung 0:e87aa4c49e95 356 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 357 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 358
phungductung 0:e87aa4c49e95 359 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 360
phungductung 0:e87aa4c49e95 361 /* Process Unlocked */
phungductung 0:e87aa4c49e95 362 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 363
phungductung 0:e87aa4c49e95 364 return HAL_OK;
phungductung 0:e87aa4c49e95 365 }
phungductung 0:e87aa4c49e95 366
phungductung 0:e87aa4c49e95 367 /**
phungductung 0:e87aa4c49e95 368 * @brief Gets the RTC TimeStamp value.
phungductung 0:e87aa4c49e95 369 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 370 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 371 * @param sTimeStamp: Pointer to Time structure
phungductung 0:e87aa4c49e95 372 * @param sTimeStampDate: Pointer to Date structure
phungductung 0:e87aa4c49e95 373 * @param Format: specifies the format of the entered parameters.
phungductung 0:e87aa4c49e95 374 * This parameter can be one of the following values:
phungductung 0:e87aa4c49e95 375 * FORMAT_BIN: Binary data format
phungductung 0:e87aa4c49e95 376 * FORMAT_BCD: BCD data format
phungductung 0:e87aa4c49e95 377 * @retval HAL status
phungductung 0:e87aa4c49e95 378 */
phungductung 0:e87aa4c49e95 379 HAL_StatusTypeDef HAL_RTCEx_GetTimeStamp(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef* sTimeStamp, RTC_DateTypeDef* sTimeStampDate, uint32_t Format)
phungductung 0:e87aa4c49e95 380 {
phungductung 0:e87aa4c49e95 381 uint32_t tmptime = 0, tmpdate = 0;
phungductung 0:e87aa4c49e95 382
phungductung 0:e87aa4c49e95 383 /* Check the parameters */
phungductung 0:e87aa4c49e95 384 assert_param(IS_RTC_FORMAT(Format));
phungductung 0:e87aa4c49e95 385
phungductung 0:e87aa4c49e95 386 /* Get the TimeStamp time and date registers values */
phungductung 0:e87aa4c49e95 387 tmptime = (uint32_t)(hrtc->Instance->TSTR & RTC_TR_RESERVED_MASK);
phungductung 0:e87aa4c49e95 388 tmpdate = (uint32_t)(hrtc->Instance->TSDR & RTC_DR_RESERVED_MASK);
phungductung 0:e87aa4c49e95 389
phungductung 0:e87aa4c49e95 390 /* Fill the Time structure fields with the read parameters */
phungductung 0:e87aa4c49e95 391 sTimeStamp->Hours = (uint8_t)((tmptime & (RTC_TR_HT | RTC_TR_HU)) >> 16);
phungductung 0:e87aa4c49e95 392 sTimeStamp->Minutes = (uint8_t)((tmptime & (RTC_TR_MNT | RTC_TR_MNU)) >> 8);
phungductung 0:e87aa4c49e95 393 sTimeStamp->Seconds = (uint8_t)(tmptime & (RTC_TR_ST | RTC_TR_SU));
phungductung 0:e87aa4c49e95 394 sTimeStamp->TimeFormat = (uint8_t)((tmptime & (RTC_TR_PM)) >> 16);
phungductung 0:e87aa4c49e95 395 sTimeStamp->SubSeconds = (uint32_t) hrtc->Instance->TSSSR;
phungductung 0:e87aa4c49e95 396
phungductung 0:e87aa4c49e95 397 /* Fill the Date structure fields with the read parameters */
phungductung 0:e87aa4c49e95 398 sTimeStampDate->Year = 0;
phungductung 0:e87aa4c49e95 399 sTimeStampDate->Month = (uint8_t)((tmpdate & (RTC_DR_MT | RTC_DR_MU)) >> 8);
phungductung 0:e87aa4c49e95 400 sTimeStampDate->Date = (uint8_t)(tmpdate & (RTC_DR_DT | RTC_DR_DU));
phungductung 0:e87aa4c49e95 401 sTimeStampDate->WeekDay = (uint8_t)((tmpdate & (RTC_DR_WDU)) >> 13);
phungductung 0:e87aa4c49e95 402
phungductung 0:e87aa4c49e95 403 /* Check the input parameters format */
phungductung 0:e87aa4c49e95 404 if(Format == RTC_FORMAT_BIN)
phungductung 0:e87aa4c49e95 405 {
phungductung 0:e87aa4c49e95 406 /* Convert the TimeStamp structure parameters to Binary format */
phungductung 0:e87aa4c49e95 407 sTimeStamp->Hours = (uint8_t)RTC_Bcd2ToByte(sTimeStamp->Hours);
phungductung 0:e87aa4c49e95 408 sTimeStamp->Minutes = (uint8_t)RTC_Bcd2ToByte(sTimeStamp->Minutes);
phungductung 0:e87aa4c49e95 409 sTimeStamp->Seconds = (uint8_t)RTC_Bcd2ToByte(sTimeStamp->Seconds);
phungductung 0:e87aa4c49e95 410
phungductung 0:e87aa4c49e95 411 /* Convert the DateTimeStamp structure parameters to Binary format */
phungductung 0:e87aa4c49e95 412 sTimeStampDate->Month = (uint8_t)RTC_Bcd2ToByte(sTimeStampDate->Month);
phungductung 0:e87aa4c49e95 413 sTimeStampDate->Date = (uint8_t)RTC_Bcd2ToByte(sTimeStampDate->Date);
phungductung 0:e87aa4c49e95 414 sTimeStampDate->WeekDay = (uint8_t)RTC_Bcd2ToByte(sTimeStampDate->WeekDay);
phungductung 0:e87aa4c49e95 415 }
phungductung 0:e87aa4c49e95 416
phungductung 0:e87aa4c49e95 417 /* Clear the TIMESTAMP Flag */
phungductung 0:e87aa4c49e95 418 __HAL_RTC_TIMESTAMP_CLEAR_FLAG(hrtc, RTC_FLAG_TSF);
phungductung 0:e87aa4c49e95 419
phungductung 0:e87aa4c49e95 420 return HAL_OK;
phungductung 0:e87aa4c49e95 421 }
phungductung 0:e87aa4c49e95 422
phungductung 0:e87aa4c49e95 423 /**
phungductung 0:e87aa4c49e95 424 * @brief Sets Tamper
phungductung 0:e87aa4c49e95 425 * @note By calling this API we disable the tamper interrupt for all tampers.
phungductung 0:e87aa4c49e95 426 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 427 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 428 * @param sTamper: Pointer to Tamper Structure.
phungductung 0:e87aa4c49e95 429 * @retval HAL status
phungductung 0:e87aa4c49e95 430 */
phungductung 0:e87aa4c49e95 431 HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef* sTamper)
phungductung 0:e87aa4c49e95 432 {
phungductung 0:e87aa4c49e95 433 uint32_t tmpreg = 0;
phungductung 0:e87aa4c49e95 434
phungductung 0:e87aa4c49e95 435 /* Check the parameters */
phungductung 0:e87aa4c49e95 436 assert_param(IS_RTC_TAMPER(sTamper->Tamper));
phungductung 0:e87aa4c49e95 437 assert_param(IS_RTC_TAMPER_TRIGGER(sTamper->Trigger));
phungductung 0:e87aa4c49e95 438 assert_param(IS_RTC_TAMPER_ERASE_MODE(sTamper->NoErase));
phungductung 0:e87aa4c49e95 439 assert_param(IS_RTC_TAMPER_MASKFLAG_STATE(sTamper->MaskFlag));
phungductung 0:e87aa4c49e95 440 assert_param(IS_RTC_TAMPER_FILTER(sTamper->Filter));
phungductung 0:e87aa4c49e95 441 assert_param(IS_RTC_TAMPER_SAMPLING_FREQ(sTamper->SamplingFrequency));
phungductung 0:e87aa4c49e95 442 assert_param(IS_RTC_TAMPER_PRECHARGE_DURATION(sTamper->PrechargeDuration));
phungductung 0:e87aa4c49e95 443 assert_param(IS_RTC_TAMPER_PULLUP_STATE(sTamper->TamperPullUp));
phungductung 0:e87aa4c49e95 444 assert_param(IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION(sTamper->TimeStampOnTamperDetection));
phungductung 0:e87aa4c49e95 445
phungductung 0:e87aa4c49e95 446 /* Process Locked */
phungductung 0:e87aa4c49e95 447 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 448
phungductung 0:e87aa4c49e95 449 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 450
phungductung 0:e87aa4c49e95 451 if(sTamper->Trigger != RTC_TAMPERTRIGGER_RISINGEDGE)
phungductung 0:e87aa4c49e95 452 {
phungductung 0:e87aa4c49e95 453 sTamper->Trigger = (uint32_t)(sTamper->Tamper << 1);
phungductung 0:e87aa4c49e95 454 }
phungductung 0:e87aa4c49e95 455
phungductung 0:e87aa4c49e95 456 if(sTamper->NoErase != RTC_TAMPER_ERASE_BACKUP_ENABLE)
phungductung 0:e87aa4c49e95 457 {
phungductung 0:e87aa4c49e95 458 sTamper->NoErase = 0;
phungductung 0:e87aa4c49e95 459 if((sTamper->Tamper & RTC_TAMPER_1) != 0)
phungductung 0:e87aa4c49e95 460 {
phungductung 0:e87aa4c49e95 461 sTamper->NoErase |= RTC_TAMPCR_TAMP1NOERASE;
phungductung 0:e87aa4c49e95 462 }
phungductung 0:e87aa4c49e95 463 if((sTamper->Tamper & RTC_TAMPER_2) != 0)
phungductung 0:e87aa4c49e95 464 {
phungductung 0:e87aa4c49e95 465 sTamper->NoErase |= RTC_TAMPCR_TAMP2NOERASE;
phungductung 0:e87aa4c49e95 466 }
phungductung 0:e87aa4c49e95 467 if((sTamper->Tamper & RTC_TAMPER_3) != 0)
phungductung 0:e87aa4c49e95 468 {
phungductung 0:e87aa4c49e95 469 sTamper->NoErase |= RTC_TAMPCR_TAMP3NOERASE;
phungductung 0:e87aa4c49e95 470 }
phungductung 0:e87aa4c49e95 471 }
phungductung 0:e87aa4c49e95 472
phungductung 0:e87aa4c49e95 473 if(sTamper->MaskFlag != RTC_TAMPERMASK_FLAG_DISABLE)
phungductung 0:e87aa4c49e95 474 {
phungductung 0:e87aa4c49e95 475 sTamper->MaskFlag = 0;
phungductung 0:e87aa4c49e95 476 if((sTamper->Tamper & RTC_TAMPER_1) != 0)
phungductung 0:e87aa4c49e95 477 {
phungductung 0:e87aa4c49e95 478 sTamper->MaskFlag |= RTC_TAMPCR_TAMP1MF;
phungductung 0:e87aa4c49e95 479 }
phungductung 0:e87aa4c49e95 480 if((sTamper->Tamper & RTC_TAMPER_2) != 0)
phungductung 0:e87aa4c49e95 481 {
phungductung 0:e87aa4c49e95 482 sTamper->MaskFlag |= RTC_TAMPCR_TAMP2MF;
phungductung 0:e87aa4c49e95 483 }
phungductung 0:e87aa4c49e95 484 if((sTamper->Tamper & RTC_TAMPER_3) != 0)
phungductung 0:e87aa4c49e95 485 {
phungductung 0:e87aa4c49e95 486 sTamper->MaskFlag |= RTC_TAMPCR_TAMP3MF;
phungductung 0:e87aa4c49e95 487 }
phungductung 0:e87aa4c49e95 488 }
phungductung 0:e87aa4c49e95 489
phungductung 0:e87aa4c49e95 490 tmpreg = ((uint32_t)sTamper->Tamper | (uint32_t)sTamper->Trigger | (uint32_t)sTamper->NoErase |\
phungductung 0:e87aa4c49e95 491 (uint32_t)sTamper->MaskFlag | (uint32_t)sTamper->Filter | (uint32_t)sTamper->SamplingFrequency |\
phungductung 0:e87aa4c49e95 492 (uint32_t)sTamper->PrechargeDuration | (uint32_t)sTamper->TamperPullUp | sTamper->TimeStampOnTamperDetection);
phungductung 0:e87aa4c49e95 493
phungductung 0:e87aa4c49e95 494 hrtc->Instance->TAMPCR &= (uint32_t)~((uint32_t)sTamper->Tamper | (uint32_t)(sTamper->Tamper << 1) | (uint32_t)RTC_TAMPCR_TAMPTS |\
phungductung 0:e87aa4c49e95 495 (uint32_t)RTC_TAMPCR_TAMPFREQ | (uint32_t)RTC_TAMPCR_TAMPFLT | (uint32_t)RTC_TAMPCR_TAMPPRCH |\
phungductung 0:e87aa4c49e95 496 (uint32_t)RTC_TAMPCR_TAMPPUDIS | (uint32_t)RTC_TAMPCR_TAMPIE | (uint32_t)RTC_TAMPCR_TAMP1IE |\
phungductung 0:e87aa4c49e95 497 (uint32_t)RTC_TAMPCR_TAMP2IE | (uint32_t)RTC_TAMPCR_TAMP3IE | (uint32_t)RTC_TAMPCR_TAMP1NOERASE |\
phungductung 0:e87aa4c49e95 498 (uint32_t)RTC_TAMPCR_TAMP2NOERASE | (uint32_t)RTC_TAMPCR_TAMP3NOERASE | (uint32_t)RTC_TAMPCR_TAMP1MF |\
phungductung 0:e87aa4c49e95 499 (uint32_t)RTC_TAMPCR_TAMP2MF | (uint32_t)RTC_TAMPCR_TAMP3MF);
phungductung 0:e87aa4c49e95 500
phungductung 0:e87aa4c49e95 501 hrtc->Instance->TAMPCR |= tmpreg;
phungductung 0:e87aa4c49e95 502
phungductung 0:e87aa4c49e95 503 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 504
phungductung 0:e87aa4c49e95 505 /* Process Unlocked */
phungductung 0:e87aa4c49e95 506 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 507
phungductung 0:e87aa4c49e95 508 return HAL_OK;
phungductung 0:e87aa4c49e95 509 }
phungductung 0:e87aa4c49e95 510
phungductung 0:e87aa4c49e95 511 /**
phungductung 0:e87aa4c49e95 512 * @brief Sets Tamper with interrupt.
phungductung 0:e87aa4c49e95 513 * @note By calling this API we force the tamper interrupt for all tampers.
phungductung 0:e87aa4c49e95 514 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 515 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 516 * @param sTamper: Pointer to RTC Tamper.
phungductung 0:e87aa4c49e95 517 * @retval HAL status
phungductung 0:e87aa4c49e95 518 */
phungductung 0:e87aa4c49e95 519 HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef* sTamper)
phungductung 0:e87aa4c49e95 520 {
phungductung 0:e87aa4c49e95 521 uint32_t tmpreg = 0;
phungductung 0:e87aa4c49e95 522
phungductung 0:e87aa4c49e95 523 /* Check the parameters */
phungductung 0:e87aa4c49e95 524 assert_param(IS_RTC_TAMPER(sTamper->Tamper));
phungductung 0:e87aa4c49e95 525 assert_param(IS_RTC_TAMPER_INTERRUPT(sTamper->Interrupt));
phungductung 0:e87aa4c49e95 526 assert_param(IS_RTC_TAMPER_TRIGGER(sTamper->Trigger));
phungductung 0:e87aa4c49e95 527 assert_param(IS_RTC_TAMPER_ERASE_MODE(sTamper->NoErase));
phungductung 0:e87aa4c49e95 528 assert_param(IS_RTC_TAMPER_MASKFLAG_STATE(sTamper->MaskFlag));
phungductung 0:e87aa4c49e95 529 assert_param(IS_RTC_TAMPER_FILTER(sTamper->Filter));
phungductung 0:e87aa4c49e95 530 assert_param(IS_RTC_TAMPER_SAMPLING_FREQ(sTamper->SamplingFrequency));
phungductung 0:e87aa4c49e95 531 assert_param(IS_RTC_TAMPER_PRECHARGE_DURATION(sTamper->PrechargeDuration));
phungductung 0:e87aa4c49e95 532 assert_param(IS_RTC_TAMPER_PULLUP_STATE(sTamper->TamperPullUp));
phungductung 0:e87aa4c49e95 533 assert_param(IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION(sTamper->TimeStampOnTamperDetection));
phungductung 0:e87aa4c49e95 534
phungductung 0:e87aa4c49e95 535 /* Process Locked */
phungductung 0:e87aa4c49e95 536 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 537
phungductung 0:e87aa4c49e95 538 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 539
phungductung 0:e87aa4c49e95 540 /* Configure the tamper trigger */
phungductung 0:e87aa4c49e95 541 if(sTamper->Trigger != RTC_TAMPERTRIGGER_RISINGEDGE)
phungductung 0:e87aa4c49e95 542 {
phungductung 0:e87aa4c49e95 543 sTamper->Trigger = (uint32_t)(sTamper->Tamper << 1);
phungductung 0:e87aa4c49e95 544 }
phungductung 0:e87aa4c49e95 545
phungductung 0:e87aa4c49e95 546 if(sTamper->NoErase != RTC_TAMPER_ERASE_BACKUP_ENABLE)
phungductung 0:e87aa4c49e95 547 {
phungductung 0:e87aa4c49e95 548 sTamper->NoErase = 0;
phungductung 0:e87aa4c49e95 549 if((sTamper->Tamper & RTC_TAMPER_1) != 0)
phungductung 0:e87aa4c49e95 550 {
phungductung 0:e87aa4c49e95 551 sTamper->NoErase |= RTC_TAMPCR_TAMP1NOERASE;
phungductung 0:e87aa4c49e95 552 }
phungductung 0:e87aa4c49e95 553 if((sTamper->Tamper & RTC_TAMPER_2) != 0)
phungductung 0:e87aa4c49e95 554 {
phungductung 0:e87aa4c49e95 555 sTamper->NoErase |= RTC_TAMPCR_TAMP2NOERASE;
phungductung 0:e87aa4c49e95 556 }
phungductung 0:e87aa4c49e95 557 if((sTamper->Tamper & RTC_TAMPER_3) != 0)
phungductung 0:e87aa4c49e95 558 {
phungductung 0:e87aa4c49e95 559 sTamper->NoErase |= RTC_TAMPCR_TAMP3NOERASE;
phungductung 0:e87aa4c49e95 560 }
phungductung 0:e87aa4c49e95 561 }
phungductung 0:e87aa4c49e95 562
phungductung 0:e87aa4c49e95 563 if(sTamper->MaskFlag != RTC_TAMPERMASK_FLAG_DISABLE)
phungductung 0:e87aa4c49e95 564 {
phungductung 0:e87aa4c49e95 565 sTamper->MaskFlag = 0;
phungductung 0:e87aa4c49e95 566 if((sTamper->Tamper & RTC_TAMPER_1) != 0)
phungductung 0:e87aa4c49e95 567 {
phungductung 0:e87aa4c49e95 568 sTamper->MaskFlag |= RTC_TAMPCR_TAMP1MF;
phungductung 0:e87aa4c49e95 569 }
phungductung 0:e87aa4c49e95 570 if((sTamper->Tamper & RTC_TAMPER_2) != 0)
phungductung 0:e87aa4c49e95 571 {
phungductung 0:e87aa4c49e95 572 sTamper->MaskFlag |= RTC_TAMPCR_TAMP2MF;
phungductung 0:e87aa4c49e95 573 }
phungductung 0:e87aa4c49e95 574 if((sTamper->Tamper & RTC_TAMPER_3) != 0)
phungductung 0:e87aa4c49e95 575 {
phungductung 0:e87aa4c49e95 576 sTamper->MaskFlag |= RTC_TAMPCR_TAMP3MF;
phungductung 0:e87aa4c49e95 577 }
phungductung 0:e87aa4c49e95 578 }
phungductung 0:e87aa4c49e95 579
phungductung 0:e87aa4c49e95 580 tmpreg = ((uint32_t)sTamper->Tamper | (uint32_t)sTamper->Interrupt | (uint32_t)sTamper->Trigger | (uint32_t)sTamper->NoErase |\
phungductung 0:e87aa4c49e95 581 (uint32_t)sTamper->MaskFlag | (uint32_t)sTamper->Filter | (uint32_t)sTamper->SamplingFrequency |\
phungductung 0:e87aa4c49e95 582 (uint32_t)sTamper->PrechargeDuration | (uint32_t)sTamper->TamperPullUp | sTamper->TimeStampOnTamperDetection);
phungductung 0:e87aa4c49e95 583
phungductung 0:e87aa4c49e95 584 hrtc->Instance->TAMPCR &= (uint32_t)~((uint32_t)sTamper->Tamper | (uint32_t)(sTamper->Tamper << 1) | (uint32_t)RTC_TAMPCR_TAMPTS |\
phungductung 0:e87aa4c49e95 585 (uint32_t)RTC_TAMPCR_TAMPFREQ | (uint32_t)RTC_TAMPCR_TAMPFLT | (uint32_t)RTC_TAMPCR_TAMPPRCH |\
phungductung 0:e87aa4c49e95 586 (uint32_t)RTC_TAMPCR_TAMPPUDIS | (uint32_t)RTC_TAMPCR_TAMPIE | (uint32_t)RTC_TAMPCR_TAMP1IE |\
phungductung 0:e87aa4c49e95 587 (uint32_t)RTC_TAMPCR_TAMP2IE | (uint32_t)RTC_TAMPCR_TAMP3IE | (uint32_t)RTC_TAMPCR_TAMP1NOERASE |\
phungductung 0:e87aa4c49e95 588 (uint32_t)RTC_TAMPCR_TAMP2NOERASE | (uint32_t)RTC_TAMPCR_TAMP3NOERASE | (uint32_t)RTC_TAMPCR_TAMP1MF |\
phungductung 0:e87aa4c49e95 589 (uint32_t)RTC_TAMPCR_TAMP2MF | (uint32_t)RTC_TAMPCR_TAMP3MF);
phungductung 0:e87aa4c49e95 590
phungductung 0:e87aa4c49e95 591 hrtc->Instance->TAMPCR |= tmpreg;
phungductung 0:e87aa4c49e95 592
phungductung 0:e87aa4c49e95 593 /* RTC Tamper Interrupt Configuration: EXTI configuration */
phungductung 0:e87aa4c49e95 594 __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT();
phungductung 0:e87aa4c49e95 595
phungductung 0:e87aa4c49e95 596 EXTI->RTSR |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT;
phungductung 0:e87aa4c49e95 597
phungductung 0:e87aa4c49e95 598 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 599
phungductung 0:e87aa4c49e95 600 /* Process Unlocked */
phungductung 0:e87aa4c49e95 601 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 602
phungductung 0:e87aa4c49e95 603 return HAL_OK;
phungductung 0:e87aa4c49e95 604 }
phungductung 0:e87aa4c49e95 605
phungductung 0:e87aa4c49e95 606 /**
phungductung 0:e87aa4c49e95 607 * @brief Deactivates Tamper.
phungductung 0:e87aa4c49e95 608 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 609 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 610 * @param Tamper: Selected tamper pin.
phungductung 0:e87aa4c49e95 611 * This parameter can be RTC_Tamper_1 and/or RTC_TAMPER_2.
phungductung 0:e87aa4c49e95 612 * @retval HAL status
phungductung 0:e87aa4c49e95 613 */
phungductung 0:e87aa4c49e95 614 HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper)
phungductung 0:e87aa4c49e95 615 {
phungductung 0:e87aa4c49e95 616 assert_param(IS_RTC_TAMPER(Tamper));
phungductung 0:e87aa4c49e95 617
phungductung 0:e87aa4c49e95 618 /* Process Locked */
phungductung 0:e87aa4c49e95 619 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 620
phungductung 0:e87aa4c49e95 621 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 622
phungductung 0:e87aa4c49e95 623 /* Disable the selected Tamper pin */
phungductung 0:e87aa4c49e95 624 hrtc->Instance->TAMPCR &= (uint32_t)~Tamper;
phungductung 0:e87aa4c49e95 625
phungductung 0:e87aa4c49e95 626 if ((Tamper & RTC_TAMPER_1) != 0)
phungductung 0:e87aa4c49e95 627 {
phungductung 0:e87aa4c49e95 628 /* Disable the Tamper1 interrupt */
phungductung 0:e87aa4c49e95 629 hrtc->Instance->TAMPCR &= (uint32_t)~(RTC_IT_TAMP | RTC_IT_TAMP1);
phungductung 0:e87aa4c49e95 630 }
phungductung 0:e87aa4c49e95 631 if ((Tamper & RTC_TAMPER_2) != 0)
phungductung 0:e87aa4c49e95 632 {
phungductung 0:e87aa4c49e95 633 /* Disable the Tamper2 interrupt */
phungductung 0:e87aa4c49e95 634 hrtc->Instance->TAMPCR &= (uint32_t)~(RTC_IT_TAMP | RTC_IT_TAMP2);
phungductung 0:e87aa4c49e95 635 }
phungductung 0:e87aa4c49e95 636 if ((Tamper & RTC_TAMPER_3) != 0)
phungductung 0:e87aa4c49e95 637 {
phungductung 0:e87aa4c49e95 638 /* Disable the Tamper2 interrupt */
phungductung 0:e87aa4c49e95 639 hrtc->Instance->TAMPCR &= (uint32_t)~(RTC_IT_TAMP | RTC_IT_TAMP3);
phungductung 0:e87aa4c49e95 640 }
phungductung 0:e87aa4c49e95 641
phungductung 0:e87aa4c49e95 642 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 643
phungductung 0:e87aa4c49e95 644 /* Process Unlocked */
phungductung 0:e87aa4c49e95 645 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 646
phungductung 0:e87aa4c49e95 647 return HAL_OK;
phungductung 0:e87aa4c49e95 648 }
phungductung 0:e87aa4c49e95 649
phungductung 0:e87aa4c49e95 650 /**
phungductung 0:e87aa4c49e95 651 * @brief This function handles TimeStamp interrupt request.
phungductung 0:e87aa4c49e95 652 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 653 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 654 * @retval None
phungductung 0:e87aa4c49e95 655 */
phungductung 0:e87aa4c49e95 656 void HAL_RTCEx_TamperTimeStampIRQHandler(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 657 {
phungductung 0:e87aa4c49e95 658 if(__HAL_RTC_TIMESTAMP_GET_IT(hrtc, RTC_IT_TS))
phungductung 0:e87aa4c49e95 659 {
phungductung 0:e87aa4c49e95 660 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 661 if((uint32_t)(hrtc->Instance->CR & RTC_IT_TS) != (uint32_t)RESET)
phungductung 0:e87aa4c49e95 662 {
phungductung 0:e87aa4c49e95 663 /* TIMESTAMP callback */
phungductung 0:e87aa4c49e95 664 HAL_RTCEx_TimeStampEventCallback(hrtc);
phungductung 0:e87aa4c49e95 665
phungductung 0:e87aa4c49e95 666 /* Clear the TIMESTAMP interrupt pending bit */
phungductung 0:e87aa4c49e95 667 __HAL_RTC_TIMESTAMP_CLEAR_FLAG(hrtc,RTC_FLAG_TSF);
phungductung 0:e87aa4c49e95 668 }
phungductung 0:e87aa4c49e95 669 }
phungductung 0:e87aa4c49e95 670
phungductung 0:e87aa4c49e95 671 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 672 if(__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP1F)== SET)
phungductung 0:e87aa4c49e95 673 {
phungductung 0:e87aa4c49e95 674 /* Get the TAMPER Interrupt enable bit and pending bit */
phungductung 0:e87aa4c49e95 675 if((((hrtc->Instance->TAMPCR & RTC_TAMPCR_TAMPIE)) != (uint32_t)RESET) || \
phungductung 0:e87aa4c49e95 676 (((hrtc->Instance->TAMPCR & RTC_TAMPCR_TAMP1IE)) != (uint32_t)RESET))
phungductung 0:e87aa4c49e95 677 {
phungductung 0:e87aa4c49e95 678 /* Tamper callback */
phungductung 0:e87aa4c49e95 679 HAL_RTCEx_Tamper1EventCallback(hrtc);
phungductung 0:e87aa4c49e95 680
phungductung 0:e87aa4c49e95 681 /* Clear the Tamper interrupt pending bit */
phungductung 0:e87aa4c49e95 682 __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc,RTC_FLAG_TAMP1F);
phungductung 0:e87aa4c49e95 683 }
phungductung 0:e87aa4c49e95 684 }
phungductung 0:e87aa4c49e95 685
phungductung 0:e87aa4c49e95 686 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 687 if(__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP2F)== SET)
phungductung 0:e87aa4c49e95 688 {
phungductung 0:e87aa4c49e95 689 /* Get the TAMPER Interrupt enable bit and pending bit */
phungductung 0:e87aa4c49e95 690 if((((hrtc->Instance->TAMPCR & RTC_TAMPCR_TAMPIE)) != (uint32_t)RESET) || \
phungductung 0:e87aa4c49e95 691 (((hrtc->Instance->TAMPCR & RTC_TAMPCR_TAMP2IE)) != (uint32_t)RESET))
phungductung 0:e87aa4c49e95 692 {
phungductung 0:e87aa4c49e95 693 /* Tamper callback */
phungductung 0:e87aa4c49e95 694 HAL_RTCEx_Tamper2EventCallback(hrtc);
phungductung 0:e87aa4c49e95 695
phungductung 0:e87aa4c49e95 696 /* Clear the Tamper interrupt pending bit */
phungductung 0:e87aa4c49e95 697 __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP2F);
phungductung 0:e87aa4c49e95 698 }
phungductung 0:e87aa4c49e95 699 }
phungductung 0:e87aa4c49e95 700
phungductung 0:e87aa4c49e95 701 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 702 if(__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP3F)== SET)
phungductung 0:e87aa4c49e95 703 {
phungductung 0:e87aa4c49e95 704 /* Get the TAMPER Interrupt enable bit and pending bit */
phungductung 0:e87aa4c49e95 705 if((((hrtc->Instance->TAMPCR & RTC_TAMPCR_TAMPIE)) != (uint32_t)RESET) || \
phungductung 0:e87aa4c49e95 706 (((hrtc->Instance->TAMPCR & RTC_TAMPCR_TAMP3IE)) != (uint32_t)RESET))
phungductung 0:e87aa4c49e95 707 {
phungductung 0:e87aa4c49e95 708 /* Tamper callback */
phungductung 0:e87aa4c49e95 709 HAL_RTCEx_Tamper3EventCallback(hrtc);
phungductung 0:e87aa4c49e95 710
phungductung 0:e87aa4c49e95 711 /* Clear the Tamper interrupt pending bit */
phungductung 0:e87aa4c49e95 712 __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP3F);
phungductung 0:e87aa4c49e95 713 }
phungductung 0:e87aa4c49e95 714 }
phungductung 0:e87aa4c49e95 715
phungductung 0:e87aa4c49e95 716 /* Clear the EXTI's Flag for RTC TimeStamp and Tamper */
phungductung 0:e87aa4c49e95 717 __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG();
phungductung 0:e87aa4c49e95 718
phungductung 0:e87aa4c49e95 719 /* Change RTC state */
phungductung 0:e87aa4c49e95 720 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 721 }
phungductung 0:e87aa4c49e95 722
phungductung 0:e87aa4c49e95 723 /**
phungductung 0:e87aa4c49e95 724 * @brief TimeStamp callback.
phungductung 0:e87aa4c49e95 725 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 726 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 727 * @retval None
phungductung 0:e87aa4c49e95 728 */
phungductung 0:e87aa4c49e95 729 __weak void HAL_RTCEx_TimeStampEventCallback(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 730 {
phungductung 0:e87aa4c49e95 731 /* Prevent unused argument(s) compilation warning */
phungductung 0:e87aa4c49e95 732 UNUSED(hrtc);
phungductung 0:e87aa4c49e95 733
phungductung 0:e87aa4c49e95 734 /* NOTE : This function Should not be modified, when the callback is needed,
phungductung 0:e87aa4c49e95 735 the HAL_RTC_TimeStampEventCallback could be implemented in the user file
phungductung 0:e87aa4c49e95 736 */
phungductung 0:e87aa4c49e95 737 }
phungductung 0:e87aa4c49e95 738
phungductung 0:e87aa4c49e95 739 /**
phungductung 0:e87aa4c49e95 740 * @brief Tamper 1 callback.
phungductung 0:e87aa4c49e95 741 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 742 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 743 * @retval None
phungductung 0:e87aa4c49e95 744 */
phungductung 0:e87aa4c49e95 745 __weak void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 746 {
phungductung 0:e87aa4c49e95 747 /* Prevent unused argument(s) compilation warning */
phungductung 0:e87aa4c49e95 748 UNUSED(hrtc);
phungductung 0:e87aa4c49e95 749
phungductung 0:e87aa4c49e95 750 /* NOTE : This function Should not be modified, when the callback is needed,
phungductung 0:e87aa4c49e95 751 the HAL_RTC_Tamper1EventCallback could be implemented in the user file
phungductung 0:e87aa4c49e95 752 */
phungductung 0:e87aa4c49e95 753 }
phungductung 0:e87aa4c49e95 754
phungductung 0:e87aa4c49e95 755 /**
phungductung 0:e87aa4c49e95 756 * @brief Tamper 2 callback.
phungductung 0:e87aa4c49e95 757 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 758 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 759 * @retval None
phungductung 0:e87aa4c49e95 760 */
phungductung 0:e87aa4c49e95 761 __weak void HAL_RTCEx_Tamper2EventCallback(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 762 {
phungductung 0:e87aa4c49e95 763 /* Prevent unused argument(s) compilation warning */
phungductung 0:e87aa4c49e95 764 UNUSED(hrtc);
phungductung 0:e87aa4c49e95 765
phungductung 0:e87aa4c49e95 766 /* NOTE : This function Should not be modified, when the callback is needed,
phungductung 0:e87aa4c49e95 767 the HAL_RTC_Tamper2EventCallback could be implemented in the user file
phungductung 0:e87aa4c49e95 768 */
phungductung 0:e87aa4c49e95 769 }
phungductung 0:e87aa4c49e95 770
phungductung 0:e87aa4c49e95 771 /**
phungductung 0:e87aa4c49e95 772 * @brief Tamper 3 callback.
phungductung 0:e87aa4c49e95 773 * @param hrtc: RTC handle
phungductung 0:e87aa4c49e95 774 * @retval None
phungductung 0:e87aa4c49e95 775 */
phungductung 0:e87aa4c49e95 776 __weak void HAL_RTCEx_Tamper3EventCallback(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 777 {
phungductung 0:e87aa4c49e95 778 /* Prevent unused argument(s) compilation warning */
phungductung 0:e87aa4c49e95 779 UNUSED(hrtc);
phungductung 0:e87aa4c49e95 780
phungductung 0:e87aa4c49e95 781 /* NOTE : This function Should not be modified, when the callback is needed,
phungductung 0:e87aa4c49e95 782 the HAL_RTCEx_Tamper3EventCallback could be implemented in the user file
phungductung 0:e87aa4c49e95 783 */
phungductung 0:e87aa4c49e95 784 }
phungductung 0:e87aa4c49e95 785
phungductung 0:e87aa4c49e95 786 /**
phungductung 0:e87aa4c49e95 787 * @brief This function handles TimeStamp polling request.
phungductung 0:e87aa4c49e95 788 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 789 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 790 * @param Timeout: Timeout duration
phungductung 0:e87aa4c49e95 791 * @retval HAL status
phungductung 0:e87aa4c49e95 792 */
phungductung 0:e87aa4c49e95 793 HAL_StatusTypeDef HAL_RTCEx_PollForTimeStampEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
phungductung 0:e87aa4c49e95 794 {
phungductung 0:e87aa4c49e95 795 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 796
phungductung 0:e87aa4c49e95 797 /* Get tick */
phungductung 0:e87aa4c49e95 798 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 799
phungductung 0:e87aa4c49e95 800 while(__HAL_RTC_TIMESTAMP_GET_FLAG(hrtc, RTC_FLAG_TSF) == RESET)
phungductung 0:e87aa4c49e95 801 {
phungductung 0:e87aa4c49e95 802 if(Timeout != HAL_MAX_DELAY)
phungductung 0:e87aa4c49e95 803 {
phungductung 0:e87aa4c49e95 804 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
phungductung 0:e87aa4c49e95 805 {
phungductung 0:e87aa4c49e95 806 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 807 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 808 }
phungductung 0:e87aa4c49e95 809 }
phungductung 0:e87aa4c49e95 810 }
phungductung 0:e87aa4c49e95 811
phungductung 0:e87aa4c49e95 812 if(__HAL_RTC_TIMESTAMP_GET_FLAG(hrtc, RTC_FLAG_TSOVF) != RESET)
phungductung 0:e87aa4c49e95 813 {
phungductung 0:e87aa4c49e95 814 /* Clear the TIMESTAMP OverRun Flag */
phungductung 0:e87aa4c49e95 815 __HAL_RTC_TIMESTAMP_CLEAR_FLAG(hrtc, RTC_FLAG_TSOVF);
phungductung 0:e87aa4c49e95 816
phungductung 0:e87aa4c49e95 817 /* Change TIMESTAMP state */
phungductung 0:e87aa4c49e95 818 hrtc->State = HAL_RTC_STATE_ERROR;
phungductung 0:e87aa4c49e95 819
phungductung 0:e87aa4c49e95 820 return HAL_ERROR;
phungductung 0:e87aa4c49e95 821 }
phungductung 0:e87aa4c49e95 822
phungductung 0:e87aa4c49e95 823 /* Change RTC state */
phungductung 0:e87aa4c49e95 824 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 825
phungductung 0:e87aa4c49e95 826 return HAL_OK;
phungductung 0:e87aa4c49e95 827 }
phungductung 0:e87aa4c49e95 828
phungductung 0:e87aa4c49e95 829 /**
phungductung 0:e87aa4c49e95 830 * @brief This function handles Tamper1 Polling.
phungductung 0:e87aa4c49e95 831 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 832 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 833 * @param Timeout: Timeout duration
phungductung 0:e87aa4c49e95 834 * @retval HAL status
phungductung 0:e87aa4c49e95 835 */
phungductung 0:e87aa4c49e95 836 HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
phungductung 0:e87aa4c49e95 837 {
phungductung 0:e87aa4c49e95 838 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 839
phungductung 0:e87aa4c49e95 840 /* Get tick */
phungductung 0:e87aa4c49e95 841 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 842
phungductung 0:e87aa4c49e95 843 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 844 while(__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP1F)== RESET)
phungductung 0:e87aa4c49e95 845 {
phungductung 0:e87aa4c49e95 846 if(Timeout != HAL_MAX_DELAY)
phungductung 0:e87aa4c49e95 847 {
phungductung 0:e87aa4c49e95 848 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
phungductung 0:e87aa4c49e95 849 {
phungductung 0:e87aa4c49e95 850 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 851 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 852 }
phungductung 0:e87aa4c49e95 853 }
phungductung 0:e87aa4c49e95 854 }
phungductung 0:e87aa4c49e95 855
phungductung 0:e87aa4c49e95 856 /* Clear the Tamper Flag */
phungductung 0:e87aa4c49e95 857 __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc,RTC_FLAG_TAMP1F);
phungductung 0:e87aa4c49e95 858
phungductung 0:e87aa4c49e95 859 /* Change RTC state */
phungductung 0:e87aa4c49e95 860 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 861
phungductung 0:e87aa4c49e95 862 return HAL_OK;
phungductung 0:e87aa4c49e95 863 }
phungductung 0:e87aa4c49e95 864
phungductung 0:e87aa4c49e95 865 /**
phungductung 0:e87aa4c49e95 866 * @brief This function handles Tamper2 Polling.
phungductung 0:e87aa4c49e95 867 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 868 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 869 * @param Timeout: Timeout duration
phungductung 0:e87aa4c49e95 870 * @retval HAL status
phungductung 0:e87aa4c49e95 871 */
phungductung 0:e87aa4c49e95 872 HAL_StatusTypeDef HAL_RTCEx_PollForTamper2Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
phungductung 0:e87aa4c49e95 873 {
phungductung 0:e87aa4c49e95 874 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 875
phungductung 0:e87aa4c49e95 876 /* Get tick */
phungductung 0:e87aa4c49e95 877 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 878
phungductung 0:e87aa4c49e95 879 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 880 while(__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP2F) == RESET)
phungductung 0:e87aa4c49e95 881 {
phungductung 0:e87aa4c49e95 882 if(Timeout != HAL_MAX_DELAY)
phungductung 0:e87aa4c49e95 883 {
phungductung 0:e87aa4c49e95 884 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
phungductung 0:e87aa4c49e95 885 {
phungductung 0:e87aa4c49e95 886 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 887 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 888 }
phungductung 0:e87aa4c49e95 889 }
phungductung 0:e87aa4c49e95 890 }
phungductung 0:e87aa4c49e95 891
phungductung 0:e87aa4c49e95 892 /* Clear the Tamper Flag */
phungductung 0:e87aa4c49e95 893 __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc,RTC_FLAG_TAMP2F);
phungductung 0:e87aa4c49e95 894
phungductung 0:e87aa4c49e95 895 /* Change RTC state */
phungductung 0:e87aa4c49e95 896 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 897
phungductung 0:e87aa4c49e95 898 return HAL_OK;
phungductung 0:e87aa4c49e95 899 }
phungductung 0:e87aa4c49e95 900
phungductung 0:e87aa4c49e95 901 /**
phungductung 0:e87aa4c49e95 902 * @brief This function handles Tamper3 Polling.
phungductung 0:e87aa4c49e95 903 * @param hrtc: RTC handle
phungductung 0:e87aa4c49e95 904 * @param Timeout: Timeout duration
phungductung 0:e87aa4c49e95 905 * @retval HAL status
phungductung 0:e87aa4c49e95 906 */
phungductung 0:e87aa4c49e95 907 HAL_StatusTypeDef HAL_RTCEx_PollForTamper3Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
phungductung 0:e87aa4c49e95 908 {
phungductung 0:e87aa4c49e95 909 uint32_t tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 910
phungductung 0:e87aa4c49e95 911 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 912 while(__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP3F) == RESET)
phungductung 0:e87aa4c49e95 913 {
phungductung 0:e87aa4c49e95 914 if(Timeout != HAL_MAX_DELAY)
phungductung 0:e87aa4c49e95 915 {
phungductung 0:e87aa4c49e95 916 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
phungductung 0:e87aa4c49e95 917 {
phungductung 0:e87aa4c49e95 918 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 919 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 920 }
phungductung 0:e87aa4c49e95 921 }
phungductung 0:e87aa4c49e95 922 }
phungductung 0:e87aa4c49e95 923
phungductung 0:e87aa4c49e95 924 /* Clear the Tamper Flag */
phungductung 0:e87aa4c49e95 925 __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc,RTC_FLAG_TAMP3F);
phungductung 0:e87aa4c49e95 926
phungductung 0:e87aa4c49e95 927 /* Change RTC state */
phungductung 0:e87aa4c49e95 928 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 929
phungductung 0:e87aa4c49e95 930 return HAL_OK;
phungductung 0:e87aa4c49e95 931 }
phungductung 0:e87aa4c49e95 932
phungductung 0:e87aa4c49e95 933 /**
phungductung 0:e87aa4c49e95 934 * @}
phungductung 0:e87aa4c49e95 935 */
phungductung 0:e87aa4c49e95 936
phungductung 0:e87aa4c49e95 937 /** @defgroup RTCEx_Group2 RTC Wake-up functions
phungductung 0:e87aa4c49e95 938 * @brief RTC Wake-up functions
phungductung 0:e87aa4c49e95 939 *
phungductung 0:e87aa4c49e95 940 @verbatim
phungductung 0:e87aa4c49e95 941 ===============================================================================
phungductung 0:e87aa4c49e95 942 ##### RTC Wake-up functions #####
phungductung 0:e87aa4c49e95 943 ===============================================================================
phungductung 0:e87aa4c49e95 944
phungductung 0:e87aa4c49e95 945 [..] This section provides functions allowing to configure Wake-up feature
phungductung 0:e87aa4c49e95 946
phungductung 0:e87aa4c49e95 947 @endverbatim
phungductung 0:e87aa4c49e95 948 * @{
phungductung 0:e87aa4c49e95 949 */
phungductung 0:e87aa4c49e95 950
phungductung 0:e87aa4c49e95 951 /**
phungductung 0:e87aa4c49e95 952 * @brief Sets wake up timer.
phungductung 0:e87aa4c49e95 953 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 954 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 955 * @param WakeUpCounter: Wake up counter
phungductung 0:e87aa4c49e95 956 * @param WakeUpClock: Wake up clock
phungductung 0:e87aa4c49e95 957 * @retval HAL status
phungductung 0:e87aa4c49e95 958 */
phungductung 0:e87aa4c49e95 959 HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
phungductung 0:e87aa4c49e95 960 {
phungductung 0:e87aa4c49e95 961 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 962
phungductung 0:e87aa4c49e95 963 /* Check the parameters */
phungductung 0:e87aa4c49e95 964 assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock));
phungductung 0:e87aa4c49e95 965 assert_param(IS_RTC_WAKEUP_COUNTER(WakeUpCounter));
phungductung 0:e87aa4c49e95 966
phungductung 0:e87aa4c49e95 967 /* Process Locked */
phungductung 0:e87aa4c49e95 968 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 969
phungductung 0:e87aa4c49e95 970 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 971
phungductung 0:e87aa4c49e95 972 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 973 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 974
phungductung 0:e87aa4c49e95 975 __HAL_RTC_WAKEUPTIMER_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 976
phungductung 0:e87aa4c49e95 977 /* Get tick */
phungductung 0:e87aa4c49e95 978 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 979
phungductung 0:e87aa4c49e95 980 /*Check RTC WUTWF flag is reset only when wake up timer enabled*/
phungductung 0:e87aa4c49e95 981 if((hrtc->Instance->CR & RTC_CR_WUTE) != RESET)
phungductung 0:e87aa4c49e95 982 {
phungductung 0:e87aa4c49e95 983 /* Wait till RTC WUTWF flag is set and if Time out is reached exit */
phungductung 0:e87aa4c49e95 984 while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTWF) == RESET)
phungductung 0:e87aa4c49e95 985 {
phungductung 0:e87aa4c49e95 986 if((HAL_GetTick() - tickstart ) > RTC_TIMEOUT_VALUE)
phungductung 0:e87aa4c49e95 987 {
phungductung 0:e87aa4c49e95 988 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 989 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 990
phungductung 0:e87aa4c49e95 991 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 992
phungductung 0:e87aa4c49e95 993 /* Process Unlocked */
phungductung 0:e87aa4c49e95 994 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 995
phungductung 0:e87aa4c49e95 996 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 997 }
phungductung 0:e87aa4c49e95 998 }
phungductung 0:e87aa4c49e95 999 }
phungductung 0:e87aa4c49e95 1000
phungductung 0:e87aa4c49e95 1001 /* Clear the Wakeup Timer clock source bits in CR register */
phungductung 0:e87aa4c49e95 1002 hrtc->Instance->CR &= (uint32_t)~RTC_CR_WUCKSEL;
phungductung 0:e87aa4c49e95 1003
phungductung 0:e87aa4c49e95 1004 /* Configure the clock source */
phungductung 0:e87aa4c49e95 1005 hrtc->Instance->CR |= (uint32_t)WakeUpClock;
phungductung 0:e87aa4c49e95 1006
phungductung 0:e87aa4c49e95 1007 /* Configure the Wakeup Timer counter */
phungductung 0:e87aa4c49e95 1008 hrtc->Instance->WUTR = (uint32_t)WakeUpCounter;
phungductung 0:e87aa4c49e95 1009
phungductung 0:e87aa4c49e95 1010 /* Enable the Wakeup Timer */
phungductung 0:e87aa4c49e95 1011 __HAL_RTC_WAKEUPTIMER_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1012
phungductung 0:e87aa4c49e95 1013 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1014 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1015
phungductung 0:e87aa4c49e95 1016 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1017
phungductung 0:e87aa4c49e95 1018 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1019 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1020
phungductung 0:e87aa4c49e95 1021 return HAL_OK;
phungductung 0:e87aa4c49e95 1022 }
phungductung 0:e87aa4c49e95 1023
phungductung 0:e87aa4c49e95 1024 /**
phungductung 0:e87aa4c49e95 1025 * @brief Sets wake up timer with interrupt
phungductung 0:e87aa4c49e95 1026 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1027 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1028 * @param WakeUpCounter: Wake up counter
phungductung 0:e87aa4c49e95 1029 * @param WakeUpClock: Wake up clock
phungductung 0:e87aa4c49e95 1030 * @retval HAL status
phungductung 0:e87aa4c49e95 1031 */
phungductung 0:e87aa4c49e95 1032 HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
phungductung 0:e87aa4c49e95 1033 {
phungductung 0:e87aa4c49e95 1034 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 1035
phungductung 0:e87aa4c49e95 1036 /* Check the parameters */
phungductung 0:e87aa4c49e95 1037 assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock));
phungductung 0:e87aa4c49e95 1038 assert_param(IS_RTC_WAKEUP_COUNTER(WakeUpCounter));
phungductung 0:e87aa4c49e95 1039
phungductung 0:e87aa4c49e95 1040 /* Process Locked */
phungductung 0:e87aa4c49e95 1041 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1042
phungductung 0:e87aa4c49e95 1043 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1044
phungductung 0:e87aa4c49e95 1045 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1046 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1047
phungductung 0:e87aa4c49e95 1048 __HAL_RTC_WAKEUPTIMER_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1049
phungductung 0:e87aa4c49e95 1050 /* Get tick */
phungductung 0:e87aa4c49e95 1051 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 1052
phungductung 0:e87aa4c49e95 1053 /*Check RTC WUTWF flag is reset only when wake up timer enabled*/
phungductung 0:e87aa4c49e95 1054 if((hrtc->Instance->CR & RTC_CR_WUTE) != RESET)
phungductung 0:e87aa4c49e95 1055 {
phungductung 0:e87aa4c49e95 1056 /* Wait till RTC WUTWF flag is set and if Time out is reached exit */
phungductung 0:e87aa4c49e95 1057 while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTWF) == RESET)
phungductung 0:e87aa4c49e95 1058 {
phungductung 0:e87aa4c49e95 1059 if((HAL_GetTick() - tickstart ) > RTC_TIMEOUT_VALUE)
phungductung 0:e87aa4c49e95 1060 {
phungductung 0:e87aa4c49e95 1061 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1062 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1063
phungductung 0:e87aa4c49e95 1064 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 1065
phungductung 0:e87aa4c49e95 1066 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1067 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1068
phungductung 0:e87aa4c49e95 1069 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 1070 }
phungductung 0:e87aa4c49e95 1071 }
phungductung 0:e87aa4c49e95 1072 }
phungductung 0:e87aa4c49e95 1073
phungductung 0:e87aa4c49e95 1074 /* Configure the Wakeup Timer counter */
phungductung 0:e87aa4c49e95 1075 hrtc->Instance->WUTR = (uint32_t)WakeUpCounter;
phungductung 0:e87aa4c49e95 1076
phungductung 0:e87aa4c49e95 1077 /* Clear the Wakeup Timer clock source bits in CR register */
phungductung 0:e87aa4c49e95 1078 hrtc->Instance->CR &= (uint32_t)~RTC_CR_WUCKSEL;
phungductung 0:e87aa4c49e95 1079
phungductung 0:e87aa4c49e95 1080 /* Configure the clock source */
phungductung 0:e87aa4c49e95 1081 hrtc->Instance->CR |= (uint32_t)WakeUpClock;
phungductung 0:e87aa4c49e95 1082
phungductung 0:e87aa4c49e95 1083 /* RTC WakeUpTimer Interrupt Configuration: EXTI configuration */
phungductung 0:e87aa4c49e95 1084 __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT();
phungductung 0:e87aa4c49e95 1085
phungductung 0:e87aa4c49e95 1086 EXTI->RTSR |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT;
phungductung 0:e87aa4c49e95 1087
phungductung 0:e87aa4c49e95 1088 /* Configure the Interrupt in the RTC_CR register */
phungductung 0:e87aa4c49e95 1089 __HAL_RTC_WAKEUPTIMER_ENABLE_IT(hrtc,RTC_IT_WUT);
phungductung 0:e87aa4c49e95 1090
phungductung 0:e87aa4c49e95 1091 /* Enable the Wakeup Timer */
phungductung 0:e87aa4c49e95 1092 __HAL_RTC_WAKEUPTIMER_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1093
phungductung 0:e87aa4c49e95 1094 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1095 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1096
phungductung 0:e87aa4c49e95 1097 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1098
phungductung 0:e87aa4c49e95 1099 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1100 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1101
phungductung 0:e87aa4c49e95 1102 return HAL_OK;
phungductung 0:e87aa4c49e95 1103 }
phungductung 0:e87aa4c49e95 1104
phungductung 0:e87aa4c49e95 1105 /**
phungductung 0:e87aa4c49e95 1106 * @brief Deactivates wake up timer counter.
phungductung 0:e87aa4c49e95 1107 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1108 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1109 * @retval HAL status
phungductung 0:e87aa4c49e95 1110 */
phungductung 0:e87aa4c49e95 1111 uint32_t HAL_RTCEx_DeactivateWakeUpTimer(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 1112 {
phungductung 0:e87aa4c49e95 1113 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 1114
phungductung 0:e87aa4c49e95 1115 /* Process Locked */
phungductung 0:e87aa4c49e95 1116 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1117
phungductung 0:e87aa4c49e95 1118 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1119
phungductung 0:e87aa4c49e95 1120 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1121 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1122
phungductung 0:e87aa4c49e95 1123 /* Disable the Wakeup Timer */
phungductung 0:e87aa4c49e95 1124 __HAL_RTC_WAKEUPTIMER_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1125
phungductung 0:e87aa4c49e95 1126 /* In case of interrupt mode is used, the interrupt source must disabled */
phungductung 0:e87aa4c49e95 1127 __HAL_RTC_WAKEUPTIMER_DISABLE_IT(hrtc,RTC_IT_WUT);
phungductung 0:e87aa4c49e95 1128
phungductung 0:e87aa4c49e95 1129 /* Get tick */
phungductung 0:e87aa4c49e95 1130 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 1131
phungductung 0:e87aa4c49e95 1132 /* Wait till RTC WUTWF flag is set and if Time out is reached exit */
phungductung 0:e87aa4c49e95 1133 while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTWF) == RESET)
phungductung 0:e87aa4c49e95 1134 {
phungductung 0:e87aa4c49e95 1135 if((HAL_GetTick() - tickstart ) > RTC_TIMEOUT_VALUE)
phungductung 0:e87aa4c49e95 1136 {
phungductung 0:e87aa4c49e95 1137 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1138 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1139
phungductung 0:e87aa4c49e95 1140 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 1141
phungductung 0:e87aa4c49e95 1142 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1143 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1144
phungductung 0:e87aa4c49e95 1145 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 1146 }
phungductung 0:e87aa4c49e95 1147 }
phungductung 0:e87aa4c49e95 1148
phungductung 0:e87aa4c49e95 1149 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1150 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1151
phungductung 0:e87aa4c49e95 1152 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1153
phungductung 0:e87aa4c49e95 1154 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1155 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1156
phungductung 0:e87aa4c49e95 1157 return HAL_OK;
phungductung 0:e87aa4c49e95 1158 }
phungductung 0:e87aa4c49e95 1159
phungductung 0:e87aa4c49e95 1160 /**
phungductung 0:e87aa4c49e95 1161 * @brief Gets wake up timer counter.
phungductung 0:e87aa4c49e95 1162 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1163 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1164 * @retval Counter value
phungductung 0:e87aa4c49e95 1165 */
phungductung 0:e87aa4c49e95 1166 uint32_t HAL_RTCEx_GetWakeUpTimer(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 1167 {
phungductung 0:e87aa4c49e95 1168 /* Get the counter value */
phungductung 0:e87aa4c49e95 1169 return ((uint32_t)(hrtc->Instance->WUTR & RTC_WUTR_WUT));
phungductung 0:e87aa4c49e95 1170 }
phungductung 0:e87aa4c49e95 1171
phungductung 0:e87aa4c49e95 1172 /**
phungductung 0:e87aa4c49e95 1173 * @brief This function handles Wake Up Timer interrupt request.
phungductung 0:e87aa4c49e95 1174 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1175 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1176 * @retval None
phungductung 0:e87aa4c49e95 1177 */
phungductung 0:e87aa4c49e95 1178 void HAL_RTCEx_WakeUpTimerIRQHandler(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 1179 {
phungductung 0:e87aa4c49e95 1180 if(__HAL_RTC_WAKEUPTIMER_GET_IT(hrtc, RTC_IT_WUT))
phungductung 0:e87aa4c49e95 1181 {
phungductung 0:e87aa4c49e95 1182 /* Get the status of the Interrupt */
phungductung 0:e87aa4c49e95 1183 if((uint32_t)(hrtc->Instance->CR & RTC_IT_WUT) != (uint32_t)RESET)
phungductung 0:e87aa4c49e95 1184 {
phungductung 0:e87aa4c49e95 1185 /* WAKEUPTIMER callback */
phungductung 0:e87aa4c49e95 1186 HAL_RTCEx_WakeUpTimerEventCallback(hrtc);
phungductung 0:e87aa4c49e95 1187
phungductung 0:e87aa4c49e95 1188 /* Clear the WAKEUPTIMER interrupt pending bit */
phungductung 0:e87aa4c49e95 1189 __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(hrtc, RTC_FLAG_WUTF);
phungductung 0:e87aa4c49e95 1190 }
phungductung 0:e87aa4c49e95 1191 }
phungductung 0:e87aa4c49e95 1192
phungductung 0:e87aa4c49e95 1193 /* Clear the EXTI's line Flag for RTC WakeUpTimer */
phungductung 0:e87aa4c49e95 1194 __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();
phungductung 0:e87aa4c49e95 1195
phungductung 0:e87aa4c49e95 1196 /* Change RTC state */
phungductung 0:e87aa4c49e95 1197 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1198 }
phungductung 0:e87aa4c49e95 1199
phungductung 0:e87aa4c49e95 1200 /**
phungductung 0:e87aa4c49e95 1201 * @brief Wake Up Timer callback.
phungductung 0:e87aa4c49e95 1202 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1203 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1204 * @retval None
phungductung 0:e87aa4c49e95 1205 */
phungductung 0:e87aa4c49e95 1206 __weak void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 1207 {
phungductung 0:e87aa4c49e95 1208 /* Prevent unused argument(s) compilation warning */
phungductung 0:e87aa4c49e95 1209 UNUSED(hrtc);
phungductung 0:e87aa4c49e95 1210
phungductung 0:e87aa4c49e95 1211 /* NOTE : This function Should not be modified, when the callback is needed,
phungductung 0:e87aa4c49e95 1212 the HAL_RTC_WakeUpTimerEventCallback could be implemented in the user file
phungductung 0:e87aa4c49e95 1213 */
phungductung 0:e87aa4c49e95 1214 }
phungductung 0:e87aa4c49e95 1215
phungductung 0:e87aa4c49e95 1216 /**
phungductung 0:e87aa4c49e95 1217 * @brief This function handles Wake Up Timer Polling.
phungductung 0:e87aa4c49e95 1218 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1219 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1220 * @param Timeout: Timeout duration
phungductung 0:e87aa4c49e95 1221 * @retval HAL status
phungductung 0:e87aa4c49e95 1222 */
phungductung 0:e87aa4c49e95 1223 HAL_StatusTypeDef HAL_RTCEx_PollForWakeUpTimerEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
phungductung 0:e87aa4c49e95 1224 {
phungductung 0:e87aa4c49e95 1225 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 1226
phungductung 0:e87aa4c49e95 1227 /* Get tick */
phungductung 0:e87aa4c49e95 1228 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 1229
phungductung 0:e87aa4c49e95 1230 while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTF) == RESET)
phungductung 0:e87aa4c49e95 1231 {
phungductung 0:e87aa4c49e95 1232 if(Timeout != HAL_MAX_DELAY)
phungductung 0:e87aa4c49e95 1233 {
phungductung 0:e87aa4c49e95 1234 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
phungductung 0:e87aa4c49e95 1235 {
phungductung 0:e87aa4c49e95 1236 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 1237
phungductung 0:e87aa4c49e95 1238 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 1239 }
phungductung 0:e87aa4c49e95 1240 }
phungductung 0:e87aa4c49e95 1241 }
phungductung 0:e87aa4c49e95 1242
phungductung 0:e87aa4c49e95 1243 /* Clear the WAKEUPTIMER Flag */
phungductung 0:e87aa4c49e95 1244 __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(hrtc, RTC_FLAG_WUTF);
phungductung 0:e87aa4c49e95 1245
phungductung 0:e87aa4c49e95 1246 /* Change RTC state */
phungductung 0:e87aa4c49e95 1247 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1248
phungductung 0:e87aa4c49e95 1249 return HAL_OK;
phungductung 0:e87aa4c49e95 1250 }
phungductung 0:e87aa4c49e95 1251
phungductung 0:e87aa4c49e95 1252 /**
phungductung 0:e87aa4c49e95 1253 * @}
phungductung 0:e87aa4c49e95 1254 */
phungductung 0:e87aa4c49e95 1255
phungductung 0:e87aa4c49e95 1256
phungductung 0:e87aa4c49e95 1257 /** @defgroup RTCEx_Group3 Extension Peripheral Control functions
phungductung 0:e87aa4c49e95 1258 * @brief Extension Peripheral Control functions
phungductung 0:e87aa4c49e95 1259 *
phungductung 0:e87aa4c49e95 1260 @verbatim
phungductung 0:e87aa4c49e95 1261 ===============================================================================
phungductung 0:e87aa4c49e95 1262 ##### Extension Peripheral Control functions #####
phungductung 0:e87aa4c49e95 1263 ===============================================================================
phungductung 0:e87aa4c49e95 1264 [..]
phungductung 0:e87aa4c49e95 1265 This subsection provides functions allowing to
phungductung 0:e87aa4c49e95 1266 (+) Write a data in a specified RTC Backup data register
phungductung 0:e87aa4c49e95 1267 (+) Read a data in a specified RTC Backup data register
phungductung 0:e87aa4c49e95 1268 (+) Set the Coarse calibration parameters.
phungductung 0:e87aa4c49e95 1269 (+) Deactivate the Coarse calibration parameters
phungductung 0:e87aa4c49e95 1270 (+) Set the Smooth calibration parameters.
phungductung 0:e87aa4c49e95 1271 (+) Configure the Synchronization Shift Control Settings.
phungductung 0:e87aa4c49e95 1272 (+) Configure the Calibration Pinout (RTC_CALIB) Selection (1Hz or 512Hz).
phungductung 0:e87aa4c49e95 1273 (+) Deactivate the Calibration Pinout (RTC_CALIB) Selection (1Hz or 512Hz).
phungductung 0:e87aa4c49e95 1274 (+) Enable the RTC reference clock detection.
phungductung 0:e87aa4c49e95 1275 (+) Disable the RTC reference clock detection.
phungductung 0:e87aa4c49e95 1276 (+) Enable the Bypass Shadow feature.
phungductung 0:e87aa4c49e95 1277 (+) Disable the Bypass Shadow feature.
phungductung 0:e87aa4c49e95 1278
phungductung 0:e87aa4c49e95 1279 @endverbatim
phungductung 0:e87aa4c49e95 1280 * @{
phungductung 0:e87aa4c49e95 1281 */
phungductung 0:e87aa4c49e95 1282
phungductung 0:e87aa4c49e95 1283 /**
phungductung 0:e87aa4c49e95 1284 * @brief Writes a data in a specified RTC Backup data register.
phungductung 0:e87aa4c49e95 1285 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1286 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1287 * @param BackupRegister: RTC Backup data Register number.
phungductung 0:e87aa4c49e95 1288 * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to
phungductung 0:e87aa4c49e95 1289 * specify the register.
phungductung 0:e87aa4c49e95 1290 * @param Data: Data to be written in the specified RTC Backup data register.
phungductung 0:e87aa4c49e95 1291 * @retval None
phungductung 0:e87aa4c49e95 1292 */
phungductung 0:e87aa4c49e95 1293 void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data)
phungductung 0:e87aa4c49e95 1294 {
phungductung 0:e87aa4c49e95 1295 uint32_t tmp = 0;
phungductung 0:e87aa4c49e95 1296
phungductung 0:e87aa4c49e95 1297 /* Check the parameters */
phungductung 0:e87aa4c49e95 1298 assert_param(IS_RTC_BKP(BackupRegister));
phungductung 0:e87aa4c49e95 1299
phungductung 0:e87aa4c49e95 1300 tmp = (uint32_t)&(hrtc->Instance->BKP0R);
phungductung 0:e87aa4c49e95 1301 tmp += (BackupRegister * 4);
phungductung 0:e87aa4c49e95 1302
phungductung 0:e87aa4c49e95 1303 /* Write the specified register */
phungductung 0:e87aa4c49e95 1304 *(__IO uint32_t *)tmp = (uint32_t)Data;
phungductung 0:e87aa4c49e95 1305 }
phungductung 0:e87aa4c49e95 1306
phungductung 0:e87aa4c49e95 1307 /**
phungductung 0:e87aa4c49e95 1308 * @brief Reads data from the specified RTC Backup data Register.
phungductung 0:e87aa4c49e95 1309 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1310 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1311 * @param BackupRegister: RTC Backup data Register number.
phungductung 0:e87aa4c49e95 1312 * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to
phungductung 0:e87aa4c49e95 1313 * specify the register.
phungductung 0:e87aa4c49e95 1314 * @retval Read value
phungductung 0:e87aa4c49e95 1315 */
phungductung 0:e87aa4c49e95 1316 uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister)
phungductung 0:e87aa4c49e95 1317 {
phungductung 0:e87aa4c49e95 1318 uint32_t tmp = 0;
phungductung 0:e87aa4c49e95 1319
phungductung 0:e87aa4c49e95 1320 /* Check the parameters */
phungductung 0:e87aa4c49e95 1321 assert_param(IS_RTC_BKP(BackupRegister));
phungductung 0:e87aa4c49e95 1322
phungductung 0:e87aa4c49e95 1323 tmp = (uint32_t)&(hrtc->Instance->BKP0R);
phungductung 0:e87aa4c49e95 1324 tmp += (BackupRegister * 4);
phungductung 0:e87aa4c49e95 1325
phungductung 0:e87aa4c49e95 1326 /* Read the specified register */
phungductung 0:e87aa4c49e95 1327 return (*(__IO uint32_t *)tmp);
phungductung 0:e87aa4c49e95 1328 }
phungductung 0:e87aa4c49e95 1329
phungductung 0:e87aa4c49e95 1330 /**
phungductung 0:e87aa4c49e95 1331 * @brief Sets the Smooth calibration parameters.
phungductung 0:e87aa4c49e95 1332 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1333 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1334 * @param SmoothCalibPeriod: Select the Smooth Calibration Period.
phungductung 0:e87aa4c49e95 1335 * This parameter can be can be one of the following values :
phungductung 0:e87aa4c49e95 1336 * @arg RTC_SMOOTHCALIB_PERIOD_32SEC: The smooth calibration period is 32s.
phungductung 0:e87aa4c49e95 1337 * @arg RTC_SMOOTHCALIB_PERIOD_16SEC: The smooth calibration period is 16s.
phungductung 0:e87aa4c49e95 1338 * @arg RTC_SMOOTHCALIB_PERIOD_8SEC: The smooth calibration period is 8s.
phungductung 0:e87aa4c49e95 1339 * @param SmoothCalibPlusPulses: Select to Set or reset the CALP bit.
phungductung 0:e87aa4c49e95 1340 * This parameter can be one of the following values:
phungductung 0:e87aa4c49e95 1341 * @arg RTC_SMOOTHCALIB_PLUSPULSES_SET: Add one RTCCLK pulses every 2*11 pulses.
phungductung 0:e87aa4c49e95 1342 * @arg RTC_SMOOTHCALIB_PLUSPULSES_RESET: No RTCCLK pulses are added.
phungductung 0:e87aa4c49e95 1343 * @param SmouthCalibMinusPulsesValue: Select the value of CALM[8:0] bits.
phungductung 0:e87aa4c49e95 1344 * This parameter can be one any value from 0 to 0x000001FF.
phungductung 0:e87aa4c49e95 1345 * @note To deactivate the smooth calibration, the field SmoothCalibPlusPulses
phungductung 0:e87aa4c49e95 1346 * must be equal to SMOOTHCALIB_PLUSPULSES_RESET and the field
phungductung 0:e87aa4c49e95 1347 * SmouthCalibMinusPulsesValue must be equal to 0.
phungductung 0:e87aa4c49e95 1348 * @retval HAL status
phungductung 0:e87aa4c49e95 1349 */
phungductung 0:e87aa4c49e95 1350 HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef* hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmouthCalibMinusPulsesValue)
phungductung 0:e87aa4c49e95 1351 {
phungductung 0:e87aa4c49e95 1352 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 1353
phungductung 0:e87aa4c49e95 1354 /* Check the parameters */
phungductung 0:e87aa4c49e95 1355 assert_param(IS_RTC_SMOOTH_CALIB_PERIOD(SmoothCalibPeriod));
phungductung 0:e87aa4c49e95 1356 assert_param(IS_RTC_SMOOTH_CALIB_PLUS(SmoothCalibPlusPulses));
phungductung 0:e87aa4c49e95 1357 assert_param(IS_RTC_SMOOTH_CALIB_MINUS(SmouthCalibMinusPulsesValue));
phungductung 0:e87aa4c49e95 1358
phungductung 0:e87aa4c49e95 1359 /* Process Locked */
phungductung 0:e87aa4c49e95 1360 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1361
phungductung 0:e87aa4c49e95 1362 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1363
phungductung 0:e87aa4c49e95 1364 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1365 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1366
phungductung 0:e87aa4c49e95 1367 /* check if a calibration is pending*/
phungductung 0:e87aa4c49e95 1368 if((hrtc->Instance->ISR & RTC_ISR_RECALPF) != RESET)
phungductung 0:e87aa4c49e95 1369 {
phungductung 0:e87aa4c49e95 1370 /* Get tick */
phungductung 0:e87aa4c49e95 1371 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 1372
phungductung 0:e87aa4c49e95 1373 /* check if a calibration is pending*/
phungductung 0:e87aa4c49e95 1374 while((hrtc->Instance->ISR & RTC_ISR_RECALPF) != RESET)
phungductung 0:e87aa4c49e95 1375 {
phungductung 0:e87aa4c49e95 1376 if((HAL_GetTick() - tickstart ) > RTC_TIMEOUT_VALUE)
phungductung 0:e87aa4c49e95 1377 {
phungductung 0:e87aa4c49e95 1378 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1379 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1380
phungductung 0:e87aa4c49e95 1381 /* Change RTC state */
phungductung 0:e87aa4c49e95 1382 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 1383
phungductung 0:e87aa4c49e95 1384 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1385 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1386
phungductung 0:e87aa4c49e95 1387 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 1388 }
phungductung 0:e87aa4c49e95 1389 }
phungductung 0:e87aa4c49e95 1390 }
phungductung 0:e87aa4c49e95 1391
phungductung 0:e87aa4c49e95 1392 /* Configure the Smooth calibration settings */
phungductung 0:e87aa4c49e95 1393 hrtc->Instance->CALR = (uint32_t)((uint32_t)SmoothCalibPeriod | (uint32_t)SmoothCalibPlusPulses | (uint32_t)SmouthCalibMinusPulsesValue);
phungductung 0:e87aa4c49e95 1394
phungductung 0:e87aa4c49e95 1395 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1396 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1397
phungductung 0:e87aa4c49e95 1398 /* Change RTC state */
phungductung 0:e87aa4c49e95 1399 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1400
phungductung 0:e87aa4c49e95 1401 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1402 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1403
phungductung 0:e87aa4c49e95 1404 return HAL_OK;
phungductung 0:e87aa4c49e95 1405 }
phungductung 0:e87aa4c49e95 1406
phungductung 0:e87aa4c49e95 1407 /**
phungductung 0:e87aa4c49e95 1408 * @brief Configures the Synchronization Shift Control Settings.
phungductung 0:e87aa4c49e95 1409 * @note When REFCKON is set, firmware must not write to Shift control register.
phungductung 0:e87aa4c49e95 1410 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1411 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1412 * @param ShiftAdd1S: Select to add or not 1 second to the time calendar.
phungductung 0:e87aa4c49e95 1413 * This parameter can be one of the following values :
phungductung 0:e87aa4c49e95 1414 * @arg RTC_SHIFTADD1S_SET: Add one second to the clock calendar.
phungductung 0:e87aa4c49e95 1415 * @arg RTC_SHIFTADD1S_RESET: No effect.
phungductung 0:e87aa4c49e95 1416 * @param ShiftSubFS: Select the number of Second Fractions to substitute.
phungductung 0:e87aa4c49e95 1417 * This parameter can be one any value from 0 to 0x7FFF.
phungductung 0:e87aa4c49e95 1418 * @retval HAL status
phungductung 0:e87aa4c49e95 1419 */
phungductung 0:e87aa4c49e95 1420 HAL_StatusTypeDef HAL_RTCEx_SetSynchroShift(RTC_HandleTypeDef* hrtc, uint32_t ShiftAdd1S, uint32_t ShiftSubFS)
phungductung 0:e87aa4c49e95 1421 {
phungductung 0:e87aa4c49e95 1422 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 1423
phungductung 0:e87aa4c49e95 1424 /* Check the parameters */
phungductung 0:e87aa4c49e95 1425 assert_param(IS_RTC_SHIFT_ADD1S(ShiftAdd1S));
phungductung 0:e87aa4c49e95 1426 assert_param(IS_RTC_SHIFT_SUBFS(ShiftSubFS));
phungductung 0:e87aa4c49e95 1427
phungductung 0:e87aa4c49e95 1428 /* Process Locked */
phungductung 0:e87aa4c49e95 1429 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1430
phungductung 0:e87aa4c49e95 1431 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1432
phungductung 0:e87aa4c49e95 1433 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1434 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1435
phungductung 0:e87aa4c49e95 1436 /* Get tick */
phungductung 0:e87aa4c49e95 1437 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 1438
phungductung 0:e87aa4c49e95 1439 /* Wait until the shift is completed*/
phungductung 0:e87aa4c49e95 1440 while((hrtc->Instance->ISR & RTC_ISR_SHPF) != RESET)
phungductung 0:e87aa4c49e95 1441 {
phungductung 0:e87aa4c49e95 1442 if((HAL_GetTick() - tickstart ) > RTC_TIMEOUT_VALUE)
phungductung 0:e87aa4c49e95 1443 {
phungductung 0:e87aa4c49e95 1444 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1445 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1446
phungductung 0:e87aa4c49e95 1447 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 1448
phungductung 0:e87aa4c49e95 1449 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1450 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1451
phungductung 0:e87aa4c49e95 1452 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 1453 }
phungductung 0:e87aa4c49e95 1454 }
phungductung 0:e87aa4c49e95 1455
phungductung 0:e87aa4c49e95 1456 /* Check if the reference clock detection is disabled */
phungductung 0:e87aa4c49e95 1457 if((hrtc->Instance->CR & RTC_CR_REFCKON) == RESET)
phungductung 0:e87aa4c49e95 1458 {
phungductung 0:e87aa4c49e95 1459 /* Configure the Shift settings */
phungductung 0:e87aa4c49e95 1460 hrtc->Instance->SHIFTR = (uint32_t)(uint32_t)(ShiftSubFS) | (uint32_t)(ShiftAdd1S);
phungductung 0:e87aa4c49e95 1461
phungductung 0:e87aa4c49e95 1462 /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
phungductung 0:e87aa4c49e95 1463 if((hrtc->Instance->CR & RTC_CR_BYPSHAD) == RESET)
phungductung 0:e87aa4c49e95 1464 {
phungductung 0:e87aa4c49e95 1465 if(HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
phungductung 0:e87aa4c49e95 1466 {
phungductung 0:e87aa4c49e95 1467 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1468 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1469
phungductung 0:e87aa4c49e95 1470 hrtc->State = HAL_RTC_STATE_ERROR;
phungductung 0:e87aa4c49e95 1471
phungductung 0:e87aa4c49e95 1472 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1473 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1474
phungductung 0:e87aa4c49e95 1475 return HAL_ERROR;
phungductung 0:e87aa4c49e95 1476 }
phungductung 0:e87aa4c49e95 1477 }
phungductung 0:e87aa4c49e95 1478 }
phungductung 0:e87aa4c49e95 1479 else
phungductung 0:e87aa4c49e95 1480 {
phungductung 0:e87aa4c49e95 1481 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1482 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1483
phungductung 0:e87aa4c49e95 1484 /* Change RTC state */
phungductung 0:e87aa4c49e95 1485 hrtc->State = HAL_RTC_STATE_ERROR;
phungductung 0:e87aa4c49e95 1486
phungductung 0:e87aa4c49e95 1487 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1488 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1489
phungductung 0:e87aa4c49e95 1490 return HAL_ERROR;
phungductung 0:e87aa4c49e95 1491 }
phungductung 0:e87aa4c49e95 1492
phungductung 0:e87aa4c49e95 1493 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1494 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1495
phungductung 0:e87aa4c49e95 1496 /* Change RTC state */
phungductung 0:e87aa4c49e95 1497 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1498
phungductung 0:e87aa4c49e95 1499 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1500 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1501
phungductung 0:e87aa4c49e95 1502 return HAL_OK;
phungductung 0:e87aa4c49e95 1503 }
phungductung 0:e87aa4c49e95 1504
phungductung 0:e87aa4c49e95 1505 /**
phungductung 0:e87aa4c49e95 1506 * @brief Configures the Calibration Pinout (RTC_CALIB) Selection (1Hz or 512Hz).
phungductung 0:e87aa4c49e95 1507 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1508 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1509 * @param CalibOutput: Select the Calibration output Selection .
phungductung 0:e87aa4c49e95 1510 * This parameter can be one of the following values:
phungductung 0:e87aa4c49e95 1511 * @arg RTC_CALIBOUTPUT_512HZ: A signal has a regular waveform at 512Hz.
phungductung 0:e87aa4c49e95 1512 * @arg RTC_CALIBOUTPUT_1HZ: A signal has a regular waveform at 1Hz.
phungductung 0:e87aa4c49e95 1513 * @retval HAL status
phungductung 0:e87aa4c49e95 1514 */
phungductung 0:e87aa4c49e95 1515 HAL_StatusTypeDef HAL_RTCEx_SetCalibrationOutPut(RTC_HandleTypeDef* hrtc, uint32_t CalibOutput)
phungductung 0:e87aa4c49e95 1516 {
phungductung 0:e87aa4c49e95 1517 /* Check the parameters */
phungductung 0:e87aa4c49e95 1518 assert_param(IS_RTC_CALIB_OUTPUT(CalibOutput));
phungductung 0:e87aa4c49e95 1519
phungductung 0:e87aa4c49e95 1520 /* Process Locked */
phungductung 0:e87aa4c49e95 1521 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1522
phungductung 0:e87aa4c49e95 1523 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1524
phungductung 0:e87aa4c49e95 1525 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1526 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1527
phungductung 0:e87aa4c49e95 1528 /* Clear flags before config */
phungductung 0:e87aa4c49e95 1529 hrtc->Instance->CR &= (uint32_t)~RTC_CR_COSEL;
phungductung 0:e87aa4c49e95 1530
phungductung 0:e87aa4c49e95 1531 /* Configure the RTC_CR register */
phungductung 0:e87aa4c49e95 1532 hrtc->Instance->CR |= (uint32_t)CalibOutput;
phungductung 0:e87aa4c49e95 1533
phungductung 0:e87aa4c49e95 1534 __HAL_RTC_CALIBRATION_OUTPUT_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1535
phungductung 0:e87aa4c49e95 1536 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1537 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1538
phungductung 0:e87aa4c49e95 1539 /* Change RTC state */
phungductung 0:e87aa4c49e95 1540 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1541
phungductung 0:e87aa4c49e95 1542 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1543 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1544
phungductung 0:e87aa4c49e95 1545 return HAL_OK;
phungductung 0:e87aa4c49e95 1546 }
phungductung 0:e87aa4c49e95 1547
phungductung 0:e87aa4c49e95 1548 /**
phungductung 0:e87aa4c49e95 1549 * @brief Deactivates the Calibration Pinout (RTC_CALIB) Selection (1Hz or 512Hz).
phungductung 0:e87aa4c49e95 1550 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1551 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1552 * @retval HAL status
phungductung 0:e87aa4c49e95 1553 */
phungductung 0:e87aa4c49e95 1554 HAL_StatusTypeDef HAL_RTCEx_DeactivateCalibrationOutPut(RTC_HandleTypeDef* hrtc)
phungductung 0:e87aa4c49e95 1555 {
phungductung 0:e87aa4c49e95 1556 /* Process Locked */
phungductung 0:e87aa4c49e95 1557 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1558
phungductung 0:e87aa4c49e95 1559 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1560
phungductung 0:e87aa4c49e95 1561 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1562 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1563
phungductung 0:e87aa4c49e95 1564 __HAL_RTC_CALIBRATION_OUTPUT_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1565
phungductung 0:e87aa4c49e95 1566 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1567 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1568
phungductung 0:e87aa4c49e95 1569 /* Change RTC state */
phungductung 0:e87aa4c49e95 1570 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1571
phungductung 0:e87aa4c49e95 1572 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1573 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1574
phungductung 0:e87aa4c49e95 1575 return HAL_OK;
phungductung 0:e87aa4c49e95 1576 }
phungductung 0:e87aa4c49e95 1577
phungductung 0:e87aa4c49e95 1578 /**
phungductung 0:e87aa4c49e95 1579 * @brief Enables the RTC reference clock detection.
phungductung 0:e87aa4c49e95 1580 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1581 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1582 * @retval HAL status
phungductung 0:e87aa4c49e95 1583 */
phungductung 0:e87aa4c49e95 1584 HAL_StatusTypeDef HAL_RTCEx_SetRefClock(RTC_HandleTypeDef* hrtc)
phungductung 0:e87aa4c49e95 1585 {
phungductung 0:e87aa4c49e95 1586 /* Process Locked */
phungductung 0:e87aa4c49e95 1587 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1588
phungductung 0:e87aa4c49e95 1589 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1590
phungductung 0:e87aa4c49e95 1591 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1592 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1593
phungductung 0:e87aa4c49e95 1594 /* Set Initialization mode */
phungductung 0:e87aa4c49e95 1595 if(RTC_EnterInitMode(hrtc) != HAL_OK)
phungductung 0:e87aa4c49e95 1596 {
phungductung 0:e87aa4c49e95 1597 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1598 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1599
phungductung 0:e87aa4c49e95 1600 /* Set RTC state*/
phungductung 0:e87aa4c49e95 1601 hrtc->State = HAL_RTC_STATE_ERROR;
phungductung 0:e87aa4c49e95 1602
phungductung 0:e87aa4c49e95 1603 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1604 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1605
phungductung 0:e87aa4c49e95 1606 return HAL_ERROR;
phungductung 0:e87aa4c49e95 1607 }
phungductung 0:e87aa4c49e95 1608 else
phungductung 0:e87aa4c49e95 1609 {
phungductung 0:e87aa4c49e95 1610 __HAL_RTC_CLOCKREF_DETECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1611
phungductung 0:e87aa4c49e95 1612 /* Exit Initialization mode */
phungductung 0:e87aa4c49e95 1613 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
phungductung 0:e87aa4c49e95 1614 }
phungductung 0:e87aa4c49e95 1615
phungductung 0:e87aa4c49e95 1616 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1617 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1618
phungductung 0:e87aa4c49e95 1619 /* Change RTC state */
phungductung 0:e87aa4c49e95 1620 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1621
phungductung 0:e87aa4c49e95 1622 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1623 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1624
phungductung 0:e87aa4c49e95 1625 return HAL_OK;
phungductung 0:e87aa4c49e95 1626 }
phungductung 0:e87aa4c49e95 1627
phungductung 0:e87aa4c49e95 1628 /**
phungductung 0:e87aa4c49e95 1629 * @brief Disable the RTC reference clock detection.
phungductung 0:e87aa4c49e95 1630 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1631 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1632 * @retval HAL status
phungductung 0:e87aa4c49e95 1633 */
phungductung 0:e87aa4c49e95 1634 HAL_StatusTypeDef HAL_RTCEx_DeactivateRefClock(RTC_HandleTypeDef* hrtc)
phungductung 0:e87aa4c49e95 1635 {
phungductung 0:e87aa4c49e95 1636 /* Process Locked */
phungductung 0:e87aa4c49e95 1637 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1638
phungductung 0:e87aa4c49e95 1639 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1640
phungductung 0:e87aa4c49e95 1641 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1642 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1643
phungductung 0:e87aa4c49e95 1644 /* Set Initialization mode */
phungductung 0:e87aa4c49e95 1645 if(RTC_EnterInitMode(hrtc) != HAL_OK)
phungductung 0:e87aa4c49e95 1646 {
phungductung 0:e87aa4c49e95 1647 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1648 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1649
phungductung 0:e87aa4c49e95 1650 /* Set RTC state*/
phungductung 0:e87aa4c49e95 1651 hrtc->State = HAL_RTC_STATE_ERROR;
phungductung 0:e87aa4c49e95 1652
phungductung 0:e87aa4c49e95 1653 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1654 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1655
phungductung 0:e87aa4c49e95 1656 return HAL_ERROR;
phungductung 0:e87aa4c49e95 1657 }
phungductung 0:e87aa4c49e95 1658 else
phungductung 0:e87aa4c49e95 1659 {
phungductung 0:e87aa4c49e95 1660 __HAL_RTC_CLOCKREF_DETECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1661
phungductung 0:e87aa4c49e95 1662 /* Exit Initialization mode */
phungductung 0:e87aa4c49e95 1663 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
phungductung 0:e87aa4c49e95 1664 }
phungductung 0:e87aa4c49e95 1665
phungductung 0:e87aa4c49e95 1666 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1667 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1668
phungductung 0:e87aa4c49e95 1669 /* Change RTC state */
phungductung 0:e87aa4c49e95 1670 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1671
phungductung 0:e87aa4c49e95 1672 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1673 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1674
phungductung 0:e87aa4c49e95 1675 return HAL_OK;
phungductung 0:e87aa4c49e95 1676 }
phungductung 0:e87aa4c49e95 1677
phungductung 0:e87aa4c49e95 1678 /**
phungductung 0:e87aa4c49e95 1679 * @brief Enables the Bypass Shadow feature.
phungductung 0:e87aa4c49e95 1680 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1681 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1682 * @note When the Bypass Shadow is enabled the calendar value are taken
phungductung 0:e87aa4c49e95 1683 * directly from the Calendar counter.
phungductung 0:e87aa4c49e95 1684 * @retval HAL status
phungductung 0:e87aa4c49e95 1685 */
phungductung 0:e87aa4c49e95 1686 HAL_StatusTypeDef HAL_RTCEx_EnableBypassShadow(RTC_HandleTypeDef* hrtc)
phungductung 0:e87aa4c49e95 1687 {
phungductung 0:e87aa4c49e95 1688 /* Process Locked */
phungductung 0:e87aa4c49e95 1689 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1690
phungductung 0:e87aa4c49e95 1691 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1692
phungductung 0:e87aa4c49e95 1693 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1694 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1695
phungductung 0:e87aa4c49e95 1696 /* Set the BYPSHAD bit */
phungductung 0:e87aa4c49e95 1697 hrtc->Instance->CR |= (uint8_t)RTC_CR_BYPSHAD;
phungductung 0:e87aa4c49e95 1698
phungductung 0:e87aa4c49e95 1699 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1700 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1701
phungductung 0:e87aa4c49e95 1702 /* Change RTC state */
phungductung 0:e87aa4c49e95 1703 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1704
phungductung 0:e87aa4c49e95 1705 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1706 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1707
phungductung 0:e87aa4c49e95 1708 return HAL_OK;
phungductung 0:e87aa4c49e95 1709 }
phungductung 0:e87aa4c49e95 1710
phungductung 0:e87aa4c49e95 1711 /**
phungductung 0:e87aa4c49e95 1712 * @brief Disables the Bypass Shadow feature.
phungductung 0:e87aa4c49e95 1713 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1714 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1715 * @note When the Bypass Shadow is enabled the calendar value are taken
phungductung 0:e87aa4c49e95 1716 * directly from the Calendar counter.
phungductung 0:e87aa4c49e95 1717 * @retval HAL status
phungductung 0:e87aa4c49e95 1718 */
phungductung 0:e87aa4c49e95 1719 HAL_StatusTypeDef HAL_RTCEx_DisableBypassShadow(RTC_HandleTypeDef* hrtc)
phungductung 0:e87aa4c49e95 1720 {
phungductung 0:e87aa4c49e95 1721 /* Process Locked */
phungductung 0:e87aa4c49e95 1722 __HAL_LOCK(hrtc);
phungductung 0:e87aa4c49e95 1723
phungductung 0:e87aa4c49e95 1724 hrtc->State = HAL_RTC_STATE_BUSY;
phungductung 0:e87aa4c49e95 1725
phungductung 0:e87aa4c49e95 1726 /* Disable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1727 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
phungductung 0:e87aa4c49e95 1728
phungductung 0:e87aa4c49e95 1729 /* Reset the BYPSHAD bit */
phungductung 0:e87aa4c49e95 1730 hrtc->Instance->CR &= (uint8_t)~RTC_CR_BYPSHAD;
phungductung 0:e87aa4c49e95 1731
phungductung 0:e87aa4c49e95 1732 /* Enable the write protection for RTC registers */
phungductung 0:e87aa4c49e95 1733 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
phungductung 0:e87aa4c49e95 1734
phungductung 0:e87aa4c49e95 1735 /* Change RTC state */
phungductung 0:e87aa4c49e95 1736 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1737
phungductung 0:e87aa4c49e95 1738 /* Process Unlocked */
phungductung 0:e87aa4c49e95 1739 __HAL_UNLOCK(hrtc);
phungductung 0:e87aa4c49e95 1740
phungductung 0:e87aa4c49e95 1741 return HAL_OK;
phungductung 0:e87aa4c49e95 1742 }
phungductung 0:e87aa4c49e95 1743
phungductung 0:e87aa4c49e95 1744 /**
phungductung 0:e87aa4c49e95 1745 * @}
phungductung 0:e87aa4c49e95 1746 */
phungductung 0:e87aa4c49e95 1747
phungductung 0:e87aa4c49e95 1748 /** @defgroup RTCEx_Group4 Extended features functions
phungductung 0:e87aa4c49e95 1749 * @brief Extended features functions
phungductung 0:e87aa4c49e95 1750 *
phungductung 0:e87aa4c49e95 1751 @verbatim
phungductung 0:e87aa4c49e95 1752 ===============================================================================
phungductung 0:e87aa4c49e95 1753 ##### Extended features functions #####
phungductung 0:e87aa4c49e95 1754 ===============================================================================
phungductung 0:e87aa4c49e95 1755 [..] This section provides functions allowing to:
phungductung 0:e87aa4c49e95 1756 (+) RTC Alram B callback
phungductung 0:e87aa4c49e95 1757 (+) RTC Poll for Alarm B request
phungductung 0:e87aa4c49e95 1758
phungductung 0:e87aa4c49e95 1759 @endverbatim
phungductung 0:e87aa4c49e95 1760 * @{
phungductung 0:e87aa4c49e95 1761 */
phungductung 0:e87aa4c49e95 1762
phungductung 0:e87aa4c49e95 1763 /**
phungductung 0:e87aa4c49e95 1764 * @brief Alarm B callback.
phungductung 0:e87aa4c49e95 1765 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1766 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1767 * @retval None
phungductung 0:e87aa4c49e95 1768 */
phungductung 0:e87aa4c49e95 1769 __weak void HAL_RTCEx_AlarmBEventCallback(RTC_HandleTypeDef *hrtc)
phungductung 0:e87aa4c49e95 1770 {
phungductung 0:e87aa4c49e95 1771 /* Prevent unused argument(s) compilation warning */
phungductung 0:e87aa4c49e95 1772 UNUSED(hrtc);
phungductung 0:e87aa4c49e95 1773
phungductung 0:e87aa4c49e95 1774 /* NOTE : This function Should not be modified, when the callback is needed,
phungductung 0:e87aa4c49e95 1775 the HAL_RTC_AlarmBEventCallback could be implemented in the user file
phungductung 0:e87aa4c49e95 1776 */
phungductung 0:e87aa4c49e95 1777 }
phungductung 0:e87aa4c49e95 1778
phungductung 0:e87aa4c49e95 1779 /**
phungductung 0:e87aa4c49e95 1780 * @brief This function handles AlarmB Polling request.
phungductung 0:e87aa4c49e95 1781 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
phungductung 0:e87aa4c49e95 1782 * the configuration information for RTC.
phungductung 0:e87aa4c49e95 1783 * @param Timeout: Timeout duration
phungductung 0:e87aa4c49e95 1784 * @retval HAL status
phungductung 0:e87aa4c49e95 1785 */
phungductung 0:e87aa4c49e95 1786 HAL_StatusTypeDef HAL_RTCEx_PollForAlarmBEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
phungductung 0:e87aa4c49e95 1787 {
phungductung 0:e87aa4c49e95 1788 uint32_t tickstart = 0;
phungductung 0:e87aa4c49e95 1789
phungductung 0:e87aa4c49e95 1790 /* Get tick */
phungductung 0:e87aa4c49e95 1791 tickstart = HAL_GetTick();
phungductung 0:e87aa4c49e95 1792
phungductung 0:e87aa4c49e95 1793 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRBF) == RESET)
phungductung 0:e87aa4c49e95 1794 {
phungductung 0:e87aa4c49e95 1795 if(Timeout != HAL_MAX_DELAY)
phungductung 0:e87aa4c49e95 1796 {
phungductung 0:e87aa4c49e95 1797 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
phungductung 0:e87aa4c49e95 1798 {
phungductung 0:e87aa4c49e95 1799 hrtc->State = HAL_RTC_STATE_TIMEOUT;
phungductung 0:e87aa4c49e95 1800 return HAL_TIMEOUT;
phungductung 0:e87aa4c49e95 1801 }
phungductung 0:e87aa4c49e95 1802 }
phungductung 0:e87aa4c49e95 1803 }
phungductung 0:e87aa4c49e95 1804
phungductung 0:e87aa4c49e95 1805 /* Clear the Alarm Flag */
phungductung 0:e87aa4c49e95 1806 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRBF);
phungductung 0:e87aa4c49e95 1807
phungductung 0:e87aa4c49e95 1808 /* Change RTC state */
phungductung 0:e87aa4c49e95 1809 hrtc->State = HAL_RTC_STATE_READY;
phungductung 0:e87aa4c49e95 1810
phungductung 0:e87aa4c49e95 1811 return HAL_OK;
phungductung 0:e87aa4c49e95 1812 }
phungductung 0:e87aa4c49e95 1813
phungductung 0:e87aa4c49e95 1814 /**
phungductung 0:e87aa4c49e95 1815 * @}
phungductung 0:e87aa4c49e95 1816 */
phungductung 0:e87aa4c49e95 1817
phungductung 0:e87aa4c49e95 1818 /**
phungductung 0:e87aa4c49e95 1819 * @}
phungductung 0:e87aa4c49e95 1820 */
phungductung 0:e87aa4c49e95 1821
phungductung 0:e87aa4c49e95 1822 #endif /* HAL_RTC_MODULE_ENABLED */
phungductung 0:e87aa4c49e95 1823 /**
phungductung 0:e87aa4c49e95 1824 * @}
phungductung 0:e87aa4c49e95 1825 */
phungductung 0:e87aa4c49e95 1826
phungductung 0:e87aa4c49e95 1827 /**
phungductung 0:e87aa4c49e95 1828 * @}
phungductung 0:e87aa4c49e95 1829 */
phungductung 0:e87aa4c49e95 1830
phungductung 0:e87aa4c49e95 1831 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/