mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
167:e84263d55307
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /**
AnnaBridge 167:e84263d55307 2 ******************************************************************************
AnnaBridge 167:e84263d55307 3 * @file stm32f2xx_ll_rtc.c
AnnaBridge 167:e84263d55307 4 * @author MCD Application Team
AnnaBridge 167:e84263d55307 5 * @version V1.2.1
AnnaBridge 167:e84263d55307 6 * @date 14-April-2017
AnnaBridge 167:e84263d55307 7 * @brief RTC LL module driver.
AnnaBridge 167:e84263d55307 8 ******************************************************************************
AnnaBridge 167:e84263d55307 9 * @attention
AnnaBridge 167:e84263d55307 10 *
AnnaBridge 167:e84263d55307 11 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
AnnaBridge 167:e84263d55307 12 *
AnnaBridge 167:e84263d55307 13 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 167:e84263d55307 14 * are permitted provided that the following conditions are met:
AnnaBridge 167:e84263d55307 15 * 1. Redistributions of source code must retain the above copyright notice,
AnnaBridge 167:e84263d55307 16 * this list of conditions and the following disclaimer.
AnnaBridge 167:e84263d55307 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
AnnaBridge 167:e84263d55307 18 * this list of conditions and the following disclaimer in the documentation
AnnaBridge 167:e84263d55307 19 * and/or other materials provided with the distribution.
AnnaBridge 167:e84263d55307 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
AnnaBridge 167:e84263d55307 21 * may be used to endorse or promote products derived from this software
AnnaBridge 167:e84263d55307 22 * without specific prior written permission.
AnnaBridge 167:e84263d55307 23 *
AnnaBridge 167:e84263d55307 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AnnaBridge 167:e84263d55307 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
AnnaBridge 167:e84263d55307 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 167:e84263d55307 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
AnnaBridge 167:e84263d55307 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
AnnaBridge 167:e84263d55307 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
AnnaBridge 167:e84263d55307 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
AnnaBridge 167:e84263d55307 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
AnnaBridge 167:e84263d55307 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
AnnaBridge 167:e84263d55307 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 167:e84263d55307 34 *
AnnaBridge 167:e84263d55307 35 ******************************************************************************
AnnaBridge 167:e84263d55307 36 */
AnnaBridge 167:e84263d55307 37 #if defined(USE_FULL_LL_DRIVER)
AnnaBridge 167:e84263d55307 38
AnnaBridge 167:e84263d55307 39 /* Includes ------------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 40 #include "stm32f2xx_ll_rtc.h"
AnnaBridge 167:e84263d55307 41 #include "stm32f2xx_ll_cortex.h"
AnnaBridge 167:e84263d55307 42 #ifdef USE_FULL_ASSERT
AnnaBridge 167:e84263d55307 43 #include "stm32_assert.h"
AnnaBridge 167:e84263d55307 44 #else
AnnaBridge 167:e84263d55307 45 #define assert_param(expr) ((void)0U)
AnnaBridge 167:e84263d55307 46 #endif
AnnaBridge 167:e84263d55307 47
AnnaBridge 167:e84263d55307 48 /** @addtogroup STM32F2xx_LL_Driver
AnnaBridge 167:e84263d55307 49 * @{
AnnaBridge 167:e84263d55307 50 */
AnnaBridge 167:e84263d55307 51
AnnaBridge 167:e84263d55307 52 #if defined(RTC)
AnnaBridge 167:e84263d55307 53
AnnaBridge 167:e84263d55307 54 /** @addtogroup RTC_LL
AnnaBridge 167:e84263d55307 55 * @{
AnnaBridge 167:e84263d55307 56 */
AnnaBridge 167:e84263d55307 57
AnnaBridge 167:e84263d55307 58 /* Private types -------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 59 /* Private variables ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 60 /* Private constants ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 61 /** @addtogroup RTC_LL_Private_Constants
AnnaBridge 167:e84263d55307 62 * @{
AnnaBridge 167:e84263d55307 63 */
AnnaBridge 167:e84263d55307 64 /* Default values used for prescaler */
AnnaBridge 167:e84263d55307 65 #define RTC_ASYNCH_PRESC_DEFAULT 0x0000007FU
AnnaBridge 167:e84263d55307 66 #define RTC_SYNCH_PRESC_DEFAULT 0x000000FFU
AnnaBridge 167:e84263d55307 67
AnnaBridge 167:e84263d55307 68 /* Values used for timeout */
AnnaBridge 167:e84263d55307 69 #define RTC_INITMODE_TIMEOUT 1000U /* 1s when tick set to 1ms */
AnnaBridge 167:e84263d55307 70 #define RTC_SYNCHRO_TIMEOUT 1000U /* 1s when tick set to 1ms */
AnnaBridge 167:e84263d55307 71 /**
AnnaBridge 167:e84263d55307 72 * @}
AnnaBridge 167:e84263d55307 73 */
AnnaBridge 167:e84263d55307 74
AnnaBridge 167:e84263d55307 75 /* Private macros ------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 76 /** @addtogroup RTC_LL_Private_Macros
AnnaBridge 167:e84263d55307 77 * @{
AnnaBridge 167:e84263d55307 78 */
AnnaBridge 167:e84263d55307 79
AnnaBridge 167:e84263d55307 80 #define IS_LL_RTC_HOURFORMAT(__VALUE__) (((__VALUE__) == LL_RTC_HOURFORMAT_24HOUR) \
AnnaBridge 167:e84263d55307 81 || ((__VALUE__) == LL_RTC_HOURFORMAT_AMPM))
AnnaBridge 167:e84263d55307 82
AnnaBridge 167:e84263d55307 83 #define IS_LL_RTC_ASYNCH_PREDIV(__VALUE__) ((__VALUE__) <= 0x7FU)
AnnaBridge 167:e84263d55307 84
AnnaBridge 167:e84263d55307 85 #define IS_LL_RTC_SYNCH_PREDIV(__VALUE__) ((__VALUE__) <= 0x1FFFU)
AnnaBridge 167:e84263d55307 86
AnnaBridge 167:e84263d55307 87 #define IS_LL_RTC_FORMAT(__VALUE__) (((__VALUE__) == LL_RTC_FORMAT_BIN) \
AnnaBridge 167:e84263d55307 88 || ((__VALUE__) == LL_RTC_FORMAT_BCD))
AnnaBridge 167:e84263d55307 89
AnnaBridge 167:e84263d55307 90 #define IS_LL_RTC_TIME_FORMAT(__VALUE__) (((__VALUE__) == LL_RTC_TIME_FORMAT_AM_OR_24) \
AnnaBridge 167:e84263d55307 91 || ((__VALUE__) == LL_RTC_TIME_FORMAT_PM))
AnnaBridge 167:e84263d55307 92
AnnaBridge 167:e84263d55307 93 #define IS_LL_RTC_HOUR12(__HOUR__) (((__HOUR__) > 0U) && ((__HOUR__) <= 12U))
AnnaBridge 167:e84263d55307 94 #define IS_LL_RTC_HOUR24(__HOUR__) ((__HOUR__) <= 23U)
AnnaBridge 167:e84263d55307 95 #define IS_LL_RTC_MINUTES(__MINUTES__) ((__MINUTES__) <= 59U)
AnnaBridge 167:e84263d55307 96 #define IS_LL_RTC_SECONDS(__SECONDS__) ((__SECONDS__) <= 59U)
AnnaBridge 167:e84263d55307 97
AnnaBridge 167:e84263d55307 98 #define IS_LL_RTC_WEEKDAY(__VALUE__) (((__VALUE__) == LL_RTC_WEEKDAY_MONDAY) \
AnnaBridge 167:e84263d55307 99 || ((__VALUE__) == LL_RTC_WEEKDAY_TUESDAY) \
AnnaBridge 167:e84263d55307 100 || ((__VALUE__) == LL_RTC_WEEKDAY_WEDNESDAY) \
AnnaBridge 167:e84263d55307 101 || ((__VALUE__) == LL_RTC_WEEKDAY_THURSDAY) \
AnnaBridge 167:e84263d55307 102 || ((__VALUE__) == LL_RTC_WEEKDAY_FRIDAY) \
AnnaBridge 167:e84263d55307 103 || ((__VALUE__) == LL_RTC_WEEKDAY_SATURDAY) \
AnnaBridge 167:e84263d55307 104 || ((__VALUE__) == LL_RTC_WEEKDAY_SUNDAY))
AnnaBridge 167:e84263d55307 105
AnnaBridge 167:e84263d55307 106 #define IS_LL_RTC_DAY(__DAY__) (((__DAY__) >= 1U) && ((__DAY__) <= 31U))
AnnaBridge 167:e84263d55307 107
AnnaBridge 167:e84263d55307 108 #define IS_LL_RTC_MONTH(__VALUE__) (((__VALUE__) == LL_RTC_MONTH_JANUARY) \
AnnaBridge 167:e84263d55307 109 || ((__VALUE__) == LL_RTC_MONTH_FEBRUARY) \
AnnaBridge 167:e84263d55307 110 || ((__VALUE__) == LL_RTC_MONTH_MARCH) \
AnnaBridge 167:e84263d55307 111 || ((__VALUE__) == LL_RTC_MONTH_APRIL) \
AnnaBridge 167:e84263d55307 112 || ((__VALUE__) == LL_RTC_MONTH_MAY) \
AnnaBridge 167:e84263d55307 113 || ((__VALUE__) == LL_RTC_MONTH_JUNE) \
AnnaBridge 167:e84263d55307 114 || ((__VALUE__) == LL_RTC_MONTH_JULY) \
AnnaBridge 167:e84263d55307 115 || ((__VALUE__) == LL_RTC_MONTH_AUGUST) \
AnnaBridge 167:e84263d55307 116 || ((__VALUE__) == LL_RTC_MONTH_SEPTEMBER) \
AnnaBridge 167:e84263d55307 117 || ((__VALUE__) == LL_RTC_MONTH_OCTOBER) \
AnnaBridge 167:e84263d55307 118 || ((__VALUE__) == LL_RTC_MONTH_NOVEMBER) \
AnnaBridge 167:e84263d55307 119 || ((__VALUE__) == LL_RTC_MONTH_DECEMBER))
AnnaBridge 167:e84263d55307 120
AnnaBridge 167:e84263d55307 121 #define IS_LL_RTC_YEAR(__YEAR__) ((__YEAR__) <= 99U)
AnnaBridge 167:e84263d55307 122
AnnaBridge 167:e84263d55307 123 #define IS_LL_RTC_ALMA_MASK(__VALUE__) (((__VALUE__) == LL_RTC_ALMA_MASK_NONE) \
AnnaBridge 167:e84263d55307 124 || ((__VALUE__) == LL_RTC_ALMA_MASK_DATEWEEKDAY) \
AnnaBridge 167:e84263d55307 125 || ((__VALUE__) == LL_RTC_ALMA_MASK_HOURS) \
AnnaBridge 167:e84263d55307 126 || ((__VALUE__) == LL_RTC_ALMA_MASK_MINUTES) \
AnnaBridge 167:e84263d55307 127 || ((__VALUE__) == LL_RTC_ALMA_MASK_SECONDS) \
AnnaBridge 167:e84263d55307 128 || ((__VALUE__) == LL_RTC_ALMA_MASK_ALL))
AnnaBridge 167:e84263d55307 129
AnnaBridge 167:e84263d55307 130 #define IS_LL_RTC_ALMB_MASK(__VALUE__) (((__VALUE__) == LL_RTC_ALMB_MASK_NONE) \
AnnaBridge 167:e84263d55307 131 || ((__VALUE__) == LL_RTC_ALMB_MASK_DATEWEEKDAY) \
AnnaBridge 167:e84263d55307 132 || ((__VALUE__) == LL_RTC_ALMB_MASK_HOURS) \
AnnaBridge 167:e84263d55307 133 || ((__VALUE__) == LL_RTC_ALMB_MASK_MINUTES) \
AnnaBridge 167:e84263d55307 134 || ((__VALUE__) == LL_RTC_ALMB_MASK_SECONDS) \
AnnaBridge 167:e84263d55307 135 || ((__VALUE__) == LL_RTC_ALMB_MASK_ALL))
AnnaBridge 167:e84263d55307 136
AnnaBridge 167:e84263d55307 137
AnnaBridge 167:e84263d55307 138 #define IS_LL_RTC_ALMA_DATE_WEEKDAY_SEL(__SEL__) (((__SEL__) == LL_RTC_ALMA_DATEWEEKDAYSEL_DATE) || \
AnnaBridge 167:e84263d55307 139 ((__SEL__) == LL_RTC_ALMA_DATEWEEKDAYSEL_WEEKDAY))
AnnaBridge 167:e84263d55307 140
AnnaBridge 167:e84263d55307 141 #define IS_LL_RTC_ALMB_DATE_WEEKDAY_SEL(__SEL__) (((__SEL__) == LL_RTC_ALMB_DATEWEEKDAYSEL_DATE) || \
AnnaBridge 167:e84263d55307 142 ((__SEL__) == LL_RTC_ALMB_DATEWEEKDAYSEL_WEEKDAY))
AnnaBridge 167:e84263d55307 143
AnnaBridge 167:e84263d55307 144
AnnaBridge 167:e84263d55307 145 /**
AnnaBridge 167:e84263d55307 146 * @}
AnnaBridge 167:e84263d55307 147 */
AnnaBridge 167:e84263d55307 148 /* Private function prototypes -----------------------------------------------*/
AnnaBridge 167:e84263d55307 149 /* Exported functions --------------------------------------------------------*/
AnnaBridge 167:e84263d55307 150 /** @addtogroup RTC_LL_Exported_Functions
AnnaBridge 167:e84263d55307 151 * @{
AnnaBridge 167:e84263d55307 152 */
AnnaBridge 167:e84263d55307 153
AnnaBridge 167:e84263d55307 154 /** @addtogroup RTC_LL_EF_Init
AnnaBridge 167:e84263d55307 155 * @{
AnnaBridge 167:e84263d55307 156 */
AnnaBridge 167:e84263d55307 157
AnnaBridge 167:e84263d55307 158 /**
AnnaBridge 167:e84263d55307 159 * @brief De-Initializes the RTC registers to their default reset values.
AnnaBridge 167:e84263d55307 160 * @note This function doesn't reset the RTC Clock source and RTC Backup Data
AnnaBridge 167:e84263d55307 161 * registers.
AnnaBridge 167:e84263d55307 162 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 163 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 164 * - SUCCESS: RTC registers are de-initialized
AnnaBridge 167:e84263d55307 165 * - ERROR: RTC registers are not de-initialized
AnnaBridge 167:e84263d55307 166 */
AnnaBridge 167:e84263d55307 167 ErrorStatus LL_RTC_DeInit(RTC_TypeDef *RTCx)
AnnaBridge 167:e84263d55307 168 {
AnnaBridge 167:e84263d55307 169 ErrorStatus status = ERROR;
AnnaBridge 167:e84263d55307 170
AnnaBridge 167:e84263d55307 171 /* Check the parameter */
AnnaBridge 167:e84263d55307 172 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 173
AnnaBridge 167:e84263d55307 174 /* Disable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 175 LL_RTC_DisableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 176
AnnaBridge 167:e84263d55307 177 /* Set Initialization mode */
AnnaBridge 167:e84263d55307 178 if (LL_RTC_EnterInitMode(RTCx) != ERROR)
AnnaBridge 167:e84263d55307 179 {
AnnaBridge 167:e84263d55307 180 /* Reset TR, DR and CR registers */
AnnaBridge 167:e84263d55307 181 LL_RTC_WriteReg(RTCx, TR, 0x00000000U);
AnnaBridge 167:e84263d55307 182 #if defined(RTC_WAKEUP_SUPPORT)
AnnaBridge 167:e84263d55307 183 LL_RTC_WriteReg(RTCx, WUTR, RTC_WUTR_WUT);
AnnaBridge 167:e84263d55307 184 #endif /* RTC_WAKEUP_SUPPORT */
AnnaBridge 167:e84263d55307 185 LL_RTC_WriteReg(RTCx, DR , (RTC_DR_WDU_0 | RTC_DR_MU_0 | RTC_DR_DU_0));
AnnaBridge 167:e84263d55307 186 /* Reset All CR bits except CR[2:0] */
AnnaBridge 167:e84263d55307 187 #if defined(RTC_WAKEUP_SUPPORT)
AnnaBridge 167:e84263d55307 188 LL_RTC_WriteReg(RTCx, CR, (LL_RTC_ReadReg(RTCx, CR) & RTC_CR_WUCKSEL));
AnnaBridge 167:e84263d55307 189 #else
AnnaBridge 167:e84263d55307 190 LL_RTC_WriteReg(RTCx, CR, 0x00000000U);
AnnaBridge 167:e84263d55307 191 #endif /* RTC_WAKEUP_SUPPORT */
AnnaBridge 167:e84263d55307 192 LL_RTC_WriteReg(RTCx, PRER, (RTC_PRER_PREDIV_A | RTC_SYNCH_PRESC_DEFAULT));
AnnaBridge 167:e84263d55307 193 LL_RTC_WriteReg(RTCx, ALRMAR, 0x00000000U);
AnnaBridge 167:e84263d55307 194 LL_RTC_WriteReg(RTCx, ALRMBR, 0x00000000U);
AnnaBridge 167:e84263d55307 195
AnnaBridge 167:e84263d55307 196 /* Reset ISR register and exit initialization mode */
AnnaBridge 167:e84263d55307 197 LL_RTC_WriteReg(RTCx, ISR, 0x00000000U);
AnnaBridge 167:e84263d55307 198
AnnaBridge 167:e84263d55307 199 /* Reset Tamper and alternate functions configuration register */
AnnaBridge 167:e84263d55307 200 LL_RTC_WriteReg(RTCx, TAFCR, 0x00000000U);
AnnaBridge 167:e84263d55307 201
AnnaBridge 167:e84263d55307 202 /* Wait till the RTC RSF flag is set */
AnnaBridge 167:e84263d55307 203 status = LL_RTC_WaitForSynchro(RTCx);
AnnaBridge 167:e84263d55307 204 }
AnnaBridge 167:e84263d55307 205
AnnaBridge 167:e84263d55307 206 /* Enable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 207 LL_RTC_EnableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 208
AnnaBridge 167:e84263d55307 209 return status;
AnnaBridge 167:e84263d55307 210 }
AnnaBridge 167:e84263d55307 211
AnnaBridge 167:e84263d55307 212 /**
AnnaBridge 167:e84263d55307 213 * @brief Initializes the RTC registers according to the specified parameters
AnnaBridge 167:e84263d55307 214 * in RTC_InitStruct.
AnnaBridge 167:e84263d55307 215 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 216 * @param RTC_InitStruct pointer to a @ref LL_RTC_InitTypeDef structure that contains
AnnaBridge 167:e84263d55307 217 * the configuration information for the RTC peripheral.
AnnaBridge 167:e84263d55307 218 * @note The RTC Prescaler register is write protected and can be written in
AnnaBridge 167:e84263d55307 219 * initialization mode only.
AnnaBridge 167:e84263d55307 220 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 221 * - SUCCESS: RTC registers are initialized
AnnaBridge 167:e84263d55307 222 * - ERROR: RTC registers are not initialized
AnnaBridge 167:e84263d55307 223 */
AnnaBridge 167:e84263d55307 224 ErrorStatus LL_RTC_Init(RTC_TypeDef *RTCx, LL_RTC_InitTypeDef *RTC_InitStruct)
AnnaBridge 167:e84263d55307 225 {
AnnaBridge 167:e84263d55307 226 ErrorStatus status = ERROR;
AnnaBridge 167:e84263d55307 227
AnnaBridge 167:e84263d55307 228 /* Check the parameters */
AnnaBridge 167:e84263d55307 229 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 230 assert_param(IS_LL_RTC_HOURFORMAT(RTC_InitStruct->HourFormat));
AnnaBridge 167:e84263d55307 231 assert_param(IS_LL_RTC_ASYNCH_PREDIV(RTC_InitStruct->AsynchPrescaler));
AnnaBridge 167:e84263d55307 232 assert_param(IS_LL_RTC_SYNCH_PREDIV(RTC_InitStruct->SynchPrescaler));
AnnaBridge 167:e84263d55307 233
AnnaBridge 167:e84263d55307 234 /* Disable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 235 LL_RTC_DisableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 236
AnnaBridge 167:e84263d55307 237 /* Set Initialization mode */
AnnaBridge 167:e84263d55307 238 if (LL_RTC_EnterInitMode(RTCx) != ERROR)
AnnaBridge 167:e84263d55307 239 {
AnnaBridge 167:e84263d55307 240 /* Set Hour Format */
AnnaBridge 167:e84263d55307 241 LL_RTC_SetHourFormat(RTCx, RTC_InitStruct->HourFormat);
AnnaBridge 167:e84263d55307 242
AnnaBridge 167:e84263d55307 243 /* Configure Synchronous and Asynchronous prescaler factor */
AnnaBridge 167:e84263d55307 244 LL_RTC_SetSynchPrescaler(RTCx, RTC_InitStruct->SynchPrescaler);
AnnaBridge 167:e84263d55307 245 LL_RTC_SetAsynchPrescaler(RTCx, RTC_InitStruct->AsynchPrescaler);
AnnaBridge 167:e84263d55307 246
AnnaBridge 167:e84263d55307 247 /* Exit Initialization mode */
AnnaBridge 167:e84263d55307 248 LL_RTC_DisableInitMode(RTCx);
AnnaBridge 167:e84263d55307 249
AnnaBridge 167:e84263d55307 250 status = SUCCESS;
AnnaBridge 167:e84263d55307 251 }
AnnaBridge 167:e84263d55307 252 /* Enable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 253 LL_RTC_EnableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 254
AnnaBridge 167:e84263d55307 255 return status;
AnnaBridge 167:e84263d55307 256 }
AnnaBridge 167:e84263d55307 257
AnnaBridge 167:e84263d55307 258 /**
AnnaBridge 167:e84263d55307 259 * @brief Set each @ref LL_RTC_InitTypeDef field to default value.
AnnaBridge 167:e84263d55307 260 * @param RTC_InitStruct pointer to a @ref LL_RTC_InitTypeDef structure which will be initialized.
AnnaBridge 167:e84263d55307 261 * @retval None
AnnaBridge 167:e84263d55307 262 */
AnnaBridge 167:e84263d55307 263 void LL_RTC_StructInit(LL_RTC_InitTypeDef *RTC_InitStruct)
AnnaBridge 167:e84263d55307 264 {
AnnaBridge 167:e84263d55307 265 /* Set RTC_InitStruct fields to default values */
AnnaBridge 167:e84263d55307 266 RTC_InitStruct->HourFormat = LL_RTC_HOURFORMAT_24HOUR;
AnnaBridge 167:e84263d55307 267 RTC_InitStruct->AsynchPrescaler = RTC_ASYNCH_PRESC_DEFAULT;
AnnaBridge 167:e84263d55307 268 RTC_InitStruct->SynchPrescaler = RTC_SYNCH_PRESC_DEFAULT;
AnnaBridge 167:e84263d55307 269 }
AnnaBridge 167:e84263d55307 270
AnnaBridge 167:e84263d55307 271 /**
AnnaBridge 167:e84263d55307 272 * @brief Set the RTC current time.
AnnaBridge 167:e84263d55307 273 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 274 * @param RTC_Format This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 275 * @arg @ref LL_RTC_FORMAT_BIN
AnnaBridge 167:e84263d55307 276 * @arg @ref LL_RTC_FORMAT_BCD
AnnaBridge 167:e84263d55307 277 * @param RTC_TimeStruct pointer to a RTC_TimeTypeDef structure that contains
AnnaBridge 167:e84263d55307 278 * the time configuration information for the RTC.
AnnaBridge 167:e84263d55307 279 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 280 * - SUCCESS: RTC Time register is configured
AnnaBridge 167:e84263d55307 281 * - ERROR: RTC Time register is not configured
AnnaBridge 167:e84263d55307 282 */
AnnaBridge 167:e84263d55307 283 ErrorStatus LL_RTC_TIME_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_TimeTypeDef *RTC_TimeStruct)
AnnaBridge 167:e84263d55307 284 {
AnnaBridge 167:e84263d55307 285 ErrorStatus status = ERROR;
AnnaBridge 167:e84263d55307 286
AnnaBridge 167:e84263d55307 287 /* Check the parameters */
AnnaBridge 167:e84263d55307 288 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 289 assert_param(IS_LL_RTC_FORMAT(RTC_Format));
AnnaBridge 167:e84263d55307 290
AnnaBridge 167:e84263d55307 291 if (RTC_Format == LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 292 {
AnnaBridge 167:e84263d55307 293 if (LL_RTC_GetHourFormat(RTCx) != LL_RTC_HOURFORMAT_24HOUR)
AnnaBridge 167:e84263d55307 294 {
AnnaBridge 167:e84263d55307 295 assert_param(IS_LL_RTC_HOUR12(RTC_TimeStruct->Hours));
AnnaBridge 167:e84263d55307 296 assert_param(IS_LL_RTC_TIME_FORMAT(RTC_TimeStruct->TimeFormat));
AnnaBridge 167:e84263d55307 297 }
AnnaBridge 167:e84263d55307 298 else
AnnaBridge 167:e84263d55307 299 {
AnnaBridge 167:e84263d55307 300 RTC_TimeStruct->TimeFormat = 0x00U;
AnnaBridge 167:e84263d55307 301 assert_param(IS_LL_RTC_HOUR24(RTC_TimeStruct->Hours));
AnnaBridge 167:e84263d55307 302 }
AnnaBridge 167:e84263d55307 303 assert_param(IS_LL_RTC_MINUTES(RTC_TimeStruct->Minutes));
AnnaBridge 167:e84263d55307 304 assert_param(IS_LL_RTC_SECONDS(RTC_TimeStruct->Seconds));
AnnaBridge 167:e84263d55307 305 }
AnnaBridge 167:e84263d55307 306 else
AnnaBridge 167:e84263d55307 307 {
AnnaBridge 167:e84263d55307 308 if (LL_RTC_GetHourFormat(RTCx) != LL_RTC_HOURFORMAT_24HOUR)
AnnaBridge 167:e84263d55307 309 {
AnnaBridge 167:e84263d55307 310 assert_param(IS_LL_RTC_HOUR12(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours)));
AnnaBridge 167:e84263d55307 311 assert_param(IS_LL_RTC_TIME_FORMAT(RTC_TimeStruct->TimeFormat));
AnnaBridge 167:e84263d55307 312 }
AnnaBridge 167:e84263d55307 313 else
AnnaBridge 167:e84263d55307 314 {
AnnaBridge 167:e84263d55307 315 RTC_TimeStruct->TimeFormat = 0x00U;
AnnaBridge 167:e84263d55307 316 assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours)));
AnnaBridge 167:e84263d55307 317 }
AnnaBridge 167:e84263d55307 318 assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Minutes)));
AnnaBridge 167:e84263d55307 319 assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Seconds)));
AnnaBridge 167:e84263d55307 320 }
AnnaBridge 167:e84263d55307 321
AnnaBridge 167:e84263d55307 322 /* Disable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 323 LL_RTC_DisableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 324
AnnaBridge 167:e84263d55307 325 /* Set Initialization mode */
AnnaBridge 167:e84263d55307 326 if (LL_RTC_EnterInitMode(RTCx) != ERROR)
AnnaBridge 167:e84263d55307 327 {
AnnaBridge 167:e84263d55307 328 /* Check the input parameters format */
AnnaBridge 167:e84263d55307 329 if (RTC_Format != LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 330 {
AnnaBridge 167:e84263d55307 331 LL_RTC_TIME_Config(RTCx, RTC_TimeStruct->TimeFormat, RTC_TimeStruct->Hours,
AnnaBridge 167:e84263d55307 332 RTC_TimeStruct->Minutes, RTC_TimeStruct->Seconds);
AnnaBridge 167:e84263d55307 333 }
AnnaBridge 167:e84263d55307 334 else
AnnaBridge 167:e84263d55307 335 {
AnnaBridge 167:e84263d55307 336 LL_RTC_TIME_Config(RTCx, RTC_TimeStruct->TimeFormat, __LL_RTC_CONVERT_BIN2BCD(RTC_TimeStruct->Hours),
AnnaBridge 167:e84263d55307 337 __LL_RTC_CONVERT_BIN2BCD(RTC_TimeStruct->Minutes),
AnnaBridge 167:e84263d55307 338 __LL_RTC_CONVERT_BIN2BCD(RTC_TimeStruct->Seconds));
AnnaBridge 167:e84263d55307 339 }
AnnaBridge 167:e84263d55307 340
AnnaBridge 167:e84263d55307 341 /* Exit Initialization mode */
AnnaBridge 167:e84263d55307 342 LL_RTC_DisableInitMode(RTC);
AnnaBridge 167:e84263d55307 343
AnnaBridge 167:e84263d55307 344 status = SUCCESS;
AnnaBridge 167:e84263d55307 345 }
AnnaBridge 167:e84263d55307 346 /* Enable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 347 LL_RTC_EnableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 348
AnnaBridge 167:e84263d55307 349 return status;
AnnaBridge 167:e84263d55307 350 }
AnnaBridge 167:e84263d55307 351
AnnaBridge 167:e84263d55307 352 /**
AnnaBridge 167:e84263d55307 353 * @brief Set each @ref LL_RTC_TimeTypeDef field to default value (Time = 00h:00min:00sec).
AnnaBridge 167:e84263d55307 354 * @param RTC_TimeStruct pointer to a @ref LL_RTC_TimeTypeDef structure which will be initialized.
AnnaBridge 167:e84263d55307 355 * @retval None
AnnaBridge 167:e84263d55307 356 */
AnnaBridge 167:e84263d55307 357 void LL_RTC_TIME_StructInit(LL_RTC_TimeTypeDef *RTC_TimeStruct)
AnnaBridge 167:e84263d55307 358 {
AnnaBridge 167:e84263d55307 359 /* Time = 00h:00min:00sec */
AnnaBridge 167:e84263d55307 360 RTC_TimeStruct->TimeFormat = LL_RTC_TIME_FORMAT_AM_OR_24;
AnnaBridge 167:e84263d55307 361 RTC_TimeStruct->Hours = 0U;
AnnaBridge 167:e84263d55307 362 RTC_TimeStruct->Minutes = 0U;
AnnaBridge 167:e84263d55307 363 RTC_TimeStruct->Seconds = 0U;
AnnaBridge 167:e84263d55307 364 }
AnnaBridge 167:e84263d55307 365
AnnaBridge 167:e84263d55307 366 /**
AnnaBridge 167:e84263d55307 367 * @brief Set the RTC current date.
AnnaBridge 167:e84263d55307 368 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 369 * @param RTC_Format This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 370 * @arg @ref LL_RTC_FORMAT_BIN
AnnaBridge 167:e84263d55307 371 * @arg @ref LL_RTC_FORMAT_BCD
AnnaBridge 167:e84263d55307 372 * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that contains
AnnaBridge 167:e84263d55307 373 * the date configuration information for the RTC.
AnnaBridge 167:e84263d55307 374 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 375 * - SUCCESS: RTC Day register is configured
AnnaBridge 167:e84263d55307 376 * - ERROR: RTC Day register is not configured
AnnaBridge 167:e84263d55307 377 */
AnnaBridge 167:e84263d55307 378 ErrorStatus LL_RTC_DATE_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_DateTypeDef *RTC_DateStruct)
AnnaBridge 167:e84263d55307 379 {
AnnaBridge 167:e84263d55307 380 ErrorStatus status = ERROR;
AnnaBridge 167:e84263d55307 381
AnnaBridge 167:e84263d55307 382 /* Check the parameters */
AnnaBridge 167:e84263d55307 383 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 384 assert_param(IS_LL_RTC_FORMAT(RTC_Format));
AnnaBridge 167:e84263d55307 385
AnnaBridge 167:e84263d55307 386 if ((RTC_Format == LL_RTC_FORMAT_BIN) && ((RTC_DateStruct->Month & 0x10U) == 0x10U))
AnnaBridge 167:e84263d55307 387 {
AnnaBridge 167:e84263d55307 388 RTC_DateStruct->Month = (RTC_DateStruct->Month & (uint32_t)~(0x10U)) + 0x0AU;
AnnaBridge 167:e84263d55307 389 }
AnnaBridge 167:e84263d55307 390 if (RTC_Format == LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 391 {
AnnaBridge 167:e84263d55307 392 assert_param(IS_LL_RTC_YEAR(RTC_DateStruct->Year));
AnnaBridge 167:e84263d55307 393 assert_param(IS_LL_RTC_MONTH(RTC_DateStruct->Month));
AnnaBridge 167:e84263d55307 394 assert_param(IS_LL_RTC_DAY(RTC_DateStruct->Day));
AnnaBridge 167:e84263d55307 395 }
AnnaBridge 167:e84263d55307 396 else
AnnaBridge 167:e84263d55307 397 {
AnnaBridge 167:e84263d55307 398 assert_param(IS_LL_RTC_YEAR(__LL_RTC_CONVERT_BCD2BIN(RTC_DateStruct->Year)));
AnnaBridge 167:e84263d55307 399 assert_param(IS_LL_RTC_MONTH(__LL_RTC_CONVERT_BCD2BIN(RTC_DateStruct->Month)));
AnnaBridge 167:e84263d55307 400 assert_param(IS_LL_RTC_DAY(__LL_RTC_CONVERT_BCD2BIN(RTC_DateStruct->Day)));
AnnaBridge 167:e84263d55307 401 }
AnnaBridge 167:e84263d55307 402 assert_param(IS_LL_RTC_WEEKDAY(RTC_DateStruct->WeekDay));
AnnaBridge 167:e84263d55307 403
AnnaBridge 167:e84263d55307 404 /* Disable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 405 LL_RTC_DisableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 406
AnnaBridge 167:e84263d55307 407 /* Set Initialization mode */
AnnaBridge 167:e84263d55307 408 if (LL_RTC_EnterInitMode(RTCx) != ERROR)
AnnaBridge 167:e84263d55307 409 {
AnnaBridge 167:e84263d55307 410 /* Check the input parameters format */
AnnaBridge 167:e84263d55307 411 if (RTC_Format != LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 412 {
AnnaBridge 167:e84263d55307 413 LL_RTC_DATE_Config(RTCx, RTC_DateStruct->WeekDay, RTC_DateStruct->Day, RTC_DateStruct->Month, RTC_DateStruct->Year);
AnnaBridge 167:e84263d55307 414 }
AnnaBridge 167:e84263d55307 415 else
AnnaBridge 167:e84263d55307 416 {
AnnaBridge 167:e84263d55307 417 LL_RTC_DATE_Config(RTCx, RTC_DateStruct->WeekDay, __LL_RTC_CONVERT_BIN2BCD(RTC_DateStruct->Day),
AnnaBridge 167:e84263d55307 418 __LL_RTC_CONVERT_BIN2BCD(RTC_DateStruct->Month), __LL_RTC_CONVERT_BIN2BCD(RTC_DateStruct->Year));
AnnaBridge 167:e84263d55307 419 }
AnnaBridge 167:e84263d55307 420
AnnaBridge 167:e84263d55307 421 /* Exit Initialization mode */
AnnaBridge 167:e84263d55307 422 LL_RTC_DisableInitMode(RTC);
AnnaBridge 167:e84263d55307 423
AnnaBridge 167:e84263d55307 424 status = SUCCESS;
AnnaBridge 167:e84263d55307 425 }
AnnaBridge 167:e84263d55307 426 /* Enable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 427 LL_RTC_EnableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 428
AnnaBridge 167:e84263d55307 429 return status;
AnnaBridge 167:e84263d55307 430 }
AnnaBridge 167:e84263d55307 431
AnnaBridge 167:e84263d55307 432 /**
AnnaBridge 167:e84263d55307 433 * @brief Set each @ref LL_RTC_DateTypeDef field to default value (date = Monday, January 01 xx00)
AnnaBridge 167:e84263d55307 434 * @param RTC_DateStruct pointer to a @ref LL_RTC_DateTypeDef structure which will be initialized.
AnnaBridge 167:e84263d55307 435 * @retval None
AnnaBridge 167:e84263d55307 436 */
AnnaBridge 167:e84263d55307 437 void LL_RTC_DATE_StructInit(LL_RTC_DateTypeDef *RTC_DateStruct)
AnnaBridge 167:e84263d55307 438 {
AnnaBridge 167:e84263d55307 439 /* Monday, January 01 xx00 */
AnnaBridge 167:e84263d55307 440 RTC_DateStruct->WeekDay = LL_RTC_WEEKDAY_MONDAY;
AnnaBridge 167:e84263d55307 441 RTC_DateStruct->Day = 1U;
AnnaBridge 167:e84263d55307 442 RTC_DateStruct->Month = LL_RTC_MONTH_JANUARY;
AnnaBridge 167:e84263d55307 443 RTC_DateStruct->Year = 0U;
AnnaBridge 167:e84263d55307 444 }
AnnaBridge 167:e84263d55307 445
AnnaBridge 167:e84263d55307 446 /**
AnnaBridge 167:e84263d55307 447 * @brief Set the RTC Alarm A.
AnnaBridge 167:e84263d55307 448 * @note The Alarm register can only be written when the corresponding Alarm
AnnaBridge 167:e84263d55307 449 * is disabled (Use @ref LL_RTC_ALMA_Disable function).
AnnaBridge 167:e84263d55307 450 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 451 * @param RTC_Format This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 452 * @arg @ref LL_RTC_FORMAT_BIN
AnnaBridge 167:e84263d55307 453 * @arg @ref LL_RTC_FORMAT_BCD
AnnaBridge 167:e84263d55307 454 * @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure that
AnnaBridge 167:e84263d55307 455 * contains the alarm configuration parameters.
AnnaBridge 167:e84263d55307 456 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 457 * - SUCCESS: ALARMA registers are configured
AnnaBridge 167:e84263d55307 458 * - ERROR: ALARMA registers are not configured
AnnaBridge 167:e84263d55307 459 */
AnnaBridge 167:e84263d55307 460 ErrorStatus LL_RTC_ALMA_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
AnnaBridge 167:e84263d55307 461 {
AnnaBridge 167:e84263d55307 462 /* Check the parameters */
AnnaBridge 167:e84263d55307 463 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 464 assert_param(IS_LL_RTC_FORMAT(RTC_Format));
AnnaBridge 167:e84263d55307 465 assert_param(IS_LL_RTC_ALMA_MASK(RTC_AlarmStruct->AlarmMask));
AnnaBridge 167:e84263d55307 466 assert_param(IS_LL_RTC_ALMA_DATE_WEEKDAY_SEL(RTC_AlarmStruct->AlarmDateWeekDaySel));
AnnaBridge 167:e84263d55307 467
AnnaBridge 167:e84263d55307 468 if (RTC_Format == LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 469 {
AnnaBridge 167:e84263d55307 470 if (LL_RTC_GetHourFormat(RTCx) != LL_RTC_HOURFORMAT_24HOUR)
AnnaBridge 167:e84263d55307 471 {
AnnaBridge 167:e84263d55307 472 assert_param(IS_LL_RTC_HOUR12(RTC_AlarmStruct->AlarmTime.Hours));
AnnaBridge 167:e84263d55307 473 assert_param(IS_LL_RTC_TIME_FORMAT(RTC_AlarmStruct->AlarmTime.TimeFormat));
AnnaBridge 167:e84263d55307 474 }
AnnaBridge 167:e84263d55307 475 else
AnnaBridge 167:e84263d55307 476 {
AnnaBridge 167:e84263d55307 477 RTC_AlarmStruct->AlarmTime.TimeFormat = 0x00U;
AnnaBridge 167:e84263d55307 478 assert_param(IS_LL_RTC_HOUR24(RTC_AlarmStruct->AlarmTime.Hours));
AnnaBridge 167:e84263d55307 479 }
AnnaBridge 167:e84263d55307 480 assert_param(IS_LL_RTC_MINUTES(RTC_AlarmStruct->AlarmTime.Minutes));
AnnaBridge 167:e84263d55307 481 assert_param(IS_LL_RTC_SECONDS(RTC_AlarmStruct->AlarmTime.Seconds));
AnnaBridge 167:e84263d55307 482
AnnaBridge 167:e84263d55307 483 if (RTC_AlarmStruct->AlarmDateWeekDaySel == LL_RTC_ALMA_DATEWEEKDAYSEL_DATE)
AnnaBridge 167:e84263d55307 484 {
AnnaBridge 167:e84263d55307 485 assert_param(IS_LL_RTC_DAY(RTC_AlarmStruct->AlarmDateWeekDay));
AnnaBridge 167:e84263d55307 486 }
AnnaBridge 167:e84263d55307 487 else
AnnaBridge 167:e84263d55307 488 {
AnnaBridge 167:e84263d55307 489 assert_param(IS_LL_RTC_WEEKDAY(RTC_AlarmStruct->AlarmDateWeekDay));
AnnaBridge 167:e84263d55307 490 }
AnnaBridge 167:e84263d55307 491 }
AnnaBridge 167:e84263d55307 492 else
AnnaBridge 167:e84263d55307 493 {
AnnaBridge 167:e84263d55307 494 if (LL_RTC_GetHourFormat(RTCx) != LL_RTC_HOURFORMAT_24HOUR)
AnnaBridge 167:e84263d55307 495 {
AnnaBridge 167:e84263d55307 496 assert_param(IS_LL_RTC_HOUR12(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)));
AnnaBridge 167:e84263d55307 497 assert_param(IS_LL_RTC_TIME_FORMAT(RTC_AlarmStruct->AlarmTime.TimeFormat));
AnnaBridge 167:e84263d55307 498 }
AnnaBridge 167:e84263d55307 499 else
AnnaBridge 167:e84263d55307 500 {
AnnaBridge 167:e84263d55307 501 RTC_AlarmStruct->AlarmTime.TimeFormat = 0x00U;
AnnaBridge 167:e84263d55307 502 assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)));
AnnaBridge 167:e84263d55307 503 }
AnnaBridge 167:e84263d55307 504
AnnaBridge 167:e84263d55307 505 assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes)));
AnnaBridge 167:e84263d55307 506 assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds)));
AnnaBridge 167:e84263d55307 507
AnnaBridge 167:e84263d55307 508 if (RTC_AlarmStruct->AlarmDateWeekDaySel == LL_RTC_ALMA_DATEWEEKDAYSEL_DATE)
AnnaBridge 167:e84263d55307 509 {
AnnaBridge 167:e84263d55307 510 assert_param(IS_LL_RTC_DAY(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmDateWeekDay)));
AnnaBridge 167:e84263d55307 511 }
AnnaBridge 167:e84263d55307 512 else
AnnaBridge 167:e84263d55307 513 {
AnnaBridge 167:e84263d55307 514 assert_param(IS_LL_RTC_WEEKDAY(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmDateWeekDay)));
AnnaBridge 167:e84263d55307 515 }
AnnaBridge 167:e84263d55307 516 }
AnnaBridge 167:e84263d55307 517
AnnaBridge 167:e84263d55307 518 /* Disable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 519 LL_RTC_DisableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 520
AnnaBridge 167:e84263d55307 521 /* Select weekday selection */
AnnaBridge 167:e84263d55307 522 if (RTC_AlarmStruct->AlarmDateWeekDaySel == LL_RTC_ALMA_DATEWEEKDAYSEL_DATE)
AnnaBridge 167:e84263d55307 523 {
AnnaBridge 167:e84263d55307 524 /* Set the date for ALARM */
AnnaBridge 167:e84263d55307 525 LL_RTC_ALMA_DisableWeekday(RTCx);
AnnaBridge 167:e84263d55307 526 if (RTC_Format != LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 527 {
AnnaBridge 167:e84263d55307 528 LL_RTC_ALMA_SetDay(RTCx, RTC_AlarmStruct->AlarmDateWeekDay);
AnnaBridge 167:e84263d55307 529 }
AnnaBridge 167:e84263d55307 530 else
AnnaBridge 167:e84263d55307 531 {
AnnaBridge 167:e84263d55307 532 LL_RTC_ALMA_SetDay(RTCx, __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmDateWeekDay));
AnnaBridge 167:e84263d55307 533 }
AnnaBridge 167:e84263d55307 534 }
AnnaBridge 167:e84263d55307 535 else
AnnaBridge 167:e84263d55307 536 {
AnnaBridge 167:e84263d55307 537 /* Set the week day for ALARM */
AnnaBridge 167:e84263d55307 538 LL_RTC_ALMA_EnableWeekday(RTCx);
AnnaBridge 167:e84263d55307 539 LL_RTC_ALMA_SetWeekDay(RTCx, RTC_AlarmStruct->AlarmDateWeekDay);
AnnaBridge 167:e84263d55307 540 }
AnnaBridge 167:e84263d55307 541
AnnaBridge 167:e84263d55307 542 /* Configure the Alarm register */
AnnaBridge 167:e84263d55307 543 if (RTC_Format != LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 544 {
AnnaBridge 167:e84263d55307 545 LL_RTC_ALMA_ConfigTime(RTCx, RTC_AlarmStruct->AlarmTime.TimeFormat, RTC_AlarmStruct->AlarmTime.Hours,
AnnaBridge 167:e84263d55307 546 RTC_AlarmStruct->AlarmTime.Minutes, RTC_AlarmStruct->AlarmTime.Seconds);
AnnaBridge 167:e84263d55307 547 }
AnnaBridge 167:e84263d55307 548 else
AnnaBridge 167:e84263d55307 549 {
AnnaBridge 167:e84263d55307 550 LL_RTC_ALMA_ConfigTime(RTCx, RTC_AlarmStruct->AlarmTime.TimeFormat,
AnnaBridge 167:e84263d55307 551 __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmTime.Hours),
AnnaBridge 167:e84263d55307 552 __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmTime.Minutes),
AnnaBridge 167:e84263d55307 553 __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmTime.Seconds));
AnnaBridge 167:e84263d55307 554 }
AnnaBridge 167:e84263d55307 555 /* Set ALARM mask */
AnnaBridge 167:e84263d55307 556 LL_RTC_ALMA_SetMask(RTCx, RTC_AlarmStruct->AlarmMask);
AnnaBridge 167:e84263d55307 557
AnnaBridge 167:e84263d55307 558 /* Enable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 559 LL_RTC_EnableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 560
AnnaBridge 167:e84263d55307 561 return SUCCESS;
AnnaBridge 167:e84263d55307 562 }
AnnaBridge 167:e84263d55307 563
AnnaBridge 167:e84263d55307 564 /**
AnnaBridge 167:e84263d55307 565 * @brief Set the RTC Alarm B.
AnnaBridge 167:e84263d55307 566 * @note The Alarm register can only be written when the corresponding Alarm
AnnaBridge 167:e84263d55307 567 * is disabled (@ref LL_RTC_ALMB_Disable function).
AnnaBridge 167:e84263d55307 568 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 569 * @param RTC_Format This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 570 * @arg @ref LL_RTC_FORMAT_BIN
AnnaBridge 167:e84263d55307 571 * @arg @ref LL_RTC_FORMAT_BCD
AnnaBridge 167:e84263d55307 572 * @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure that
AnnaBridge 167:e84263d55307 573 * contains the alarm configuration parameters.
AnnaBridge 167:e84263d55307 574 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 575 * - SUCCESS: ALARMB registers are configured
AnnaBridge 167:e84263d55307 576 * - ERROR: ALARMB registers are not configured
AnnaBridge 167:e84263d55307 577 */
AnnaBridge 167:e84263d55307 578 ErrorStatus LL_RTC_ALMB_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
AnnaBridge 167:e84263d55307 579 {
AnnaBridge 167:e84263d55307 580 /* Check the parameters */
AnnaBridge 167:e84263d55307 581 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 582 assert_param(IS_LL_RTC_FORMAT(RTC_Format));
AnnaBridge 167:e84263d55307 583 assert_param(IS_LL_RTC_ALMB_MASK(RTC_AlarmStruct->AlarmMask));
AnnaBridge 167:e84263d55307 584 assert_param(IS_LL_RTC_ALMB_DATE_WEEKDAY_SEL(RTC_AlarmStruct->AlarmDateWeekDaySel));
AnnaBridge 167:e84263d55307 585
AnnaBridge 167:e84263d55307 586 if (RTC_Format == LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 587 {
AnnaBridge 167:e84263d55307 588 if (LL_RTC_GetHourFormat(RTCx) != LL_RTC_HOURFORMAT_24HOUR)
AnnaBridge 167:e84263d55307 589 {
AnnaBridge 167:e84263d55307 590 assert_param(IS_LL_RTC_HOUR12(RTC_AlarmStruct->AlarmTime.Hours));
AnnaBridge 167:e84263d55307 591 assert_param(IS_LL_RTC_TIME_FORMAT(RTC_AlarmStruct->AlarmTime.TimeFormat));
AnnaBridge 167:e84263d55307 592 }
AnnaBridge 167:e84263d55307 593 else
AnnaBridge 167:e84263d55307 594 {
AnnaBridge 167:e84263d55307 595 RTC_AlarmStruct->AlarmTime.TimeFormat = 0x00U;
AnnaBridge 167:e84263d55307 596 assert_param(IS_LL_RTC_HOUR24(RTC_AlarmStruct->AlarmTime.Hours));
AnnaBridge 167:e84263d55307 597 }
AnnaBridge 167:e84263d55307 598 assert_param(IS_LL_RTC_MINUTES(RTC_AlarmStruct->AlarmTime.Minutes));
AnnaBridge 167:e84263d55307 599 assert_param(IS_LL_RTC_SECONDS(RTC_AlarmStruct->AlarmTime.Seconds));
AnnaBridge 167:e84263d55307 600
AnnaBridge 167:e84263d55307 601 if (RTC_AlarmStruct->AlarmDateWeekDaySel == LL_RTC_ALMB_DATEWEEKDAYSEL_DATE)
AnnaBridge 167:e84263d55307 602 {
AnnaBridge 167:e84263d55307 603 assert_param(IS_LL_RTC_DAY(RTC_AlarmStruct->AlarmDateWeekDay));
AnnaBridge 167:e84263d55307 604 }
AnnaBridge 167:e84263d55307 605 else
AnnaBridge 167:e84263d55307 606 {
AnnaBridge 167:e84263d55307 607 assert_param(IS_LL_RTC_WEEKDAY(RTC_AlarmStruct->AlarmDateWeekDay));
AnnaBridge 167:e84263d55307 608 }
AnnaBridge 167:e84263d55307 609 }
AnnaBridge 167:e84263d55307 610 else
AnnaBridge 167:e84263d55307 611 {
AnnaBridge 167:e84263d55307 612 if (LL_RTC_GetHourFormat(RTCx) != LL_RTC_HOURFORMAT_24HOUR)
AnnaBridge 167:e84263d55307 613 {
AnnaBridge 167:e84263d55307 614 assert_param(IS_LL_RTC_HOUR12(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)));
AnnaBridge 167:e84263d55307 615 assert_param(IS_LL_RTC_TIME_FORMAT(RTC_AlarmStruct->AlarmTime.TimeFormat));
AnnaBridge 167:e84263d55307 616 }
AnnaBridge 167:e84263d55307 617 else
AnnaBridge 167:e84263d55307 618 {
AnnaBridge 167:e84263d55307 619 RTC_AlarmStruct->AlarmTime.TimeFormat = 0x00U;
AnnaBridge 167:e84263d55307 620 assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)));
AnnaBridge 167:e84263d55307 621 }
AnnaBridge 167:e84263d55307 622
AnnaBridge 167:e84263d55307 623 assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes)));
AnnaBridge 167:e84263d55307 624 assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds)));
AnnaBridge 167:e84263d55307 625
AnnaBridge 167:e84263d55307 626 if (RTC_AlarmStruct->AlarmDateWeekDaySel == LL_RTC_ALMB_DATEWEEKDAYSEL_DATE)
AnnaBridge 167:e84263d55307 627 {
AnnaBridge 167:e84263d55307 628 assert_param(IS_LL_RTC_DAY(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmDateWeekDay)));
AnnaBridge 167:e84263d55307 629 }
AnnaBridge 167:e84263d55307 630 else
AnnaBridge 167:e84263d55307 631 {
AnnaBridge 167:e84263d55307 632 assert_param(IS_LL_RTC_WEEKDAY(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmDateWeekDay)));
AnnaBridge 167:e84263d55307 633 }
AnnaBridge 167:e84263d55307 634 }
AnnaBridge 167:e84263d55307 635
AnnaBridge 167:e84263d55307 636 /* Disable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 637 LL_RTC_DisableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 638
AnnaBridge 167:e84263d55307 639 /* Select weekday selection */
AnnaBridge 167:e84263d55307 640 if (RTC_AlarmStruct->AlarmDateWeekDaySel == LL_RTC_ALMB_DATEWEEKDAYSEL_DATE)
AnnaBridge 167:e84263d55307 641 {
AnnaBridge 167:e84263d55307 642 /* Set the date for ALARM */
AnnaBridge 167:e84263d55307 643 LL_RTC_ALMB_DisableWeekday(RTCx);
AnnaBridge 167:e84263d55307 644 if (RTC_Format != LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 645 {
AnnaBridge 167:e84263d55307 646 LL_RTC_ALMB_SetDay(RTCx, RTC_AlarmStruct->AlarmDateWeekDay);
AnnaBridge 167:e84263d55307 647 }
AnnaBridge 167:e84263d55307 648 else
AnnaBridge 167:e84263d55307 649 {
AnnaBridge 167:e84263d55307 650 LL_RTC_ALMB_SetDay(RTCx, __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmDateWeekDay));
AnnaBridge 167:e84263d55307 651 }
AnnaBridge 167:e84263d55307 652 }
AnnaBridge 167:e84263d55307 653 else
AnnaBridge 167:e84263d55307 654 {
AnnaBridge 167:e84263d55307 655 /* Set the week day for ALARM */
AnnaBridge 167:e84263d55307 656 LL_RTC_ALMB_EnableWeekday(RTCx);
AnnaBridge 167:e84263d55307 657 LL_RTC_ALMB_SetWeekDay(RTCx, RTC_AlarmStruct->AlarmDateWeekDay);
AnnaBridge 167:e84263d55307 658 }
AnnaBridge 167:e84263d55307 659
AnnaBridge 167:e84263d55307 660 /* Configure the Alarm register */
AnnaBridge 167:e84263d55307 661 if (RTC_Format != LL_RTC_FORMAT_BIN)
AnnaBridge 167:e84263d55307 662 {
AnnaBridge 167:e84263d55307 663 LL_RTC_ALMB_ConfigTime(RTCx, RTC_AlarmStruct->AlarmTime.TimeFormat, RTC_AlarmStruct->AlarmTime.Hours,
AnnaBridge 167:e84263d55307 664 RTC_AlarmStruct->AlarmTime.Minutes, RTC_AlarmStruct->AlarmTime.Seconds);
AnnaBridge 167:e84263d55307 665 }
AnnaBridge 167:e84263d55307 666 else
AnnaBridge 167:e84263d55307 667 {
AnnaBridge 167:e84263d55307 668 LL_RTC_ALMB_ConfigTime(RTCx, RTC_AlarmStruct->AlarmTime.TimeFormat,
AnnaBridge 167:e84263d55307 669 __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmTime.Hours),
AnnaBridge 167:e84263d55307 670 __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmTime.Minutes),
AnnaBridge 167:e84263d55307 671 __LL_RTC_CONVERT_BIN2BCD(RTC_AlarmStruct->AlarmTime.Seconds));
AnnaBridge 167:e84263d55307 672 }
AnnaBridge 167:e84263d55307 673 /* Set ALARM mask */
AnnaBridge 167:e84263d55307 674 LL_RTC_ALMB_SetMask(RTCx, RTC_AlarmStruct->AlarmMask);
AnnaBridge 167:e84263d55307 675
AnnaBridge 167:e84263d55307 676 /* Enable the write protection for RTC registers */
AnnaBridge 167:e84263d55307 677 LL_RTC_EnableWriteProtection(RTCx);
AnnaBridge 167:e84263d55307 678
AnnaBridge 167:e84263d55307 679 return SUCCESS;
AnnaBridge 167:e84263d55307 680 }
AnnaBridge 167:e84263d55307 681
AnnaBridge 167:e84263d55307 682 /**
AnnaBridge 167:e84263d55307 683 * @brief Set each @ref LL_RTC_AlarmTypeDef of ALARMA field to default value (Time = 00h:00mn:00sec /
AnnaBridge 167:e84263d55307 684 * Day = 1st day of the month/Mask = all fields are masked).
AnnaBridge 167:e84263d55307 685 * @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure which will be initialized.
AnnaBridge 167:e84263d55307 686 * @retval None
AnnaBridge 167:e84263d55307 687 */
AnnaBridge 167:e84263d55307 688 void LL_RTC_ALMA_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
AnnaBridge 167:e84263d55307 689 {
AnnaBridge 167:e84263d55307 690 /* Alarm Time Settings : Time = 00h:00mn:00sec */
AnnaBridge 167:e84263d55307 691 RTC_AlarmStruct->AlarmTime.TimeFormat = LL_RTC_ALMA_TIME_FORMAT_AM;
AnnaBridge 167:e84263d55307 692 RTC_AlarmStruct->AlarmTime.Hours = 0U;
AnnaBridge 167:e84263d55307 693 RTC_AlarmStruct->AlarmTime.Minutes = 0U;
AnnaBridge 167:e84263d55307 694 RTC_AlarmStruct->AlarmTime.Seconds = 0U;
AnnaBridge 167:e84263d55307 695
AnnaBridge 167:e84263d55307 696 /* Alarm Day Settings : Day = 1st day of the month */
AnnaBridge 167:e84263d55307 697 RTC_AlarmStruct->AlarmDateWeekDaySel = LL_RTC_ALMA_DATEWEEKDAYSEL_DATE;
AnnaBridge 167:e84263d55307 698 RTC_AlarmStruct->AlarmDateWeekDay = 1U;
AnnaBridge 167:e84263d55307 699
AnnaBridge 167:e84263d55307 700 /* Alarm Masks Settings : Mask = all fields are not masked */
AnnaBridge 167:e84263d55307 701 RTC_AlarmStruct->AlarmMask = LL_RTC_ALMA_MASK_NONE;
AnnaBridge 167:e84263d55307 702 }
AnnaBridge 167:e84263d55307 703
AnnaBridge 167:e84263d55307 704 /**
AnnaBridge 167:e84263d55307 705 * @brief Set each @ref LL_RTC_AlarmTypeDef of ALARMA field to default value (Time = 00h:00mn:00sec /
AnnaBridge 167:e84263d55307 706 * Day = 1st day of the month/Mask = all fields are masked).
AnnaBridge 167:e84263d55307 707 * @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure which will be initialized.
AnnaBridge 167:e84263d55307 708 * @retval None
AnnaBridge 167:e84263d55307 709 */
AnnaBridge 167:e84263d55307 710 void LL_RTC_ALMB_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
AnnaBridge 167:e84263d55307 711 {
AnnaBridge 167:e84263d55307 712 /* Alarm Time Settings : Time = 00h:00mn:00sec */
AnnaBridge 167:e84263d55307 713 RTC_AlarmStruct->AlarmTime.TimeFormat = LL_RTC_ALMB_TIME_FORMAT_AM;
AnnaBridge 167:e84263d55307 714 RTC_AlarmStruct->AlarmTime.Hours = 0U;
AnnaBridge 167:e84263d55307 715 RTC_AlarmStruct->AlarmTime.Minutes = 0U;
AnnaBridge 167:e84263d55307 716 RTC_AlarmStruct->AlarmTime.Seconds = 0U;
AnnaBridge 167:e84263d55307 717
AnnaBridge 167:e84263d55307 718 /* Alarm Day Settings : Day = 1st day of the month */
AnnaBridge 167:e84263d55307 719 RTC_AlarmStruct->AlarmDateWeekDaySel = LL_RTC_ALMB_DATEWEEKDAYSEL_DATE;
AnnaBridge 167:e84263d55307 720 RTC_AlarmStruct->AlarmDateWeekDay = 1U;
AnnaBridge 167:e84263d55307 721
AnnaBridge 167:e84263d55307 722 /* Alarm Masks Settings : Mask = all fields are not masked */
AnnaBridge 167:e84263d55307 723 RTC_AlarmStruct->AlarmMask = LL_RTC_ALMB_MASK_NONE;
AnnaBridge 167:e84263d55307 724 }
AnnaBridge 167:e84263d55307 725
AnnaBridge 167:e84263d55307 726 /**
AnnaBridge 167:e84263d55307 727 * @brief Enters the RTC Initialization mode.
AnnaBridge 167:e84263d55307 728 * @note The RTC Initialization mode is write protected, use the
AnnaBridge 167:e84263d55307 729 * @ref LL_RTC_DisableWriteProtection before calling this function.
AnnaBridge 167:e84263d55307 730 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 731 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 732 * - SUCCESS: RTC is in Init mode
AnnaBridge 167:e84263d55307 733 * - ERROR: RTC is not in Init mode
AnnaBridge 167:e84263d55307 734 */
AnnaBridge 167:e84263d55307 735 ErrorStatus LL_RTC_EnterInitMode(RTC_TypeDef *RTCx)
AnnaBridge 167:e84263d55307 736 {
AnnaBridge 167:e84263d55307 737 __IO uint32_t timeout = RTC_INITMODE_TIMEOUT;
AnnaBridge 167:e84263d55307 738 ErrorStatus status = SUCCESS;
AnnaBridge 167:e84263d55307 739 uint32_t tmp = 0U;
AnnaBridge 167:e84263d55307 740
AnnaBridge 167:e84263d55307 741 /* Check the parameter */
AnnaBridge 167:e84263d55307 742 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 743
AnnaBridge 167:e84263d55307 744 /* Check if the Initialization mode is set */
AnnaBridge 167:e84263d55307 745 if (LL_RTC_IsActiveFlag_INIT(RTCx) == 0U)
AnnaBridge 167:e84263d55307 746 {
AnnaBridge 167:e84263d55307 747 /* Set the Initialization mode */
AnnaBridge 167:e84263d55307 748 LL_RTC_EnableInitMode(RTCx);
AnnaBridge 167:e84263d55307 749
AnnaBridge 167:e84263d55307 750 /* Wait till RTC is in INIT state and if Time out is reached exit */
AnnaBridge 167:e84263d55307 751 tmp = LL_RTC_IsActiveFlag_INIT(RTCx);
AnnaBridge 167:e84263d55307 752 while ((timeout != 0U) && (tmp != 1U))
AnnaBridge 167:e84263d55307 753 {
AnnaBridge 167:e84263d55307 754 if (LL_SYSTICK_IsActiveCounterFlag() == 1U)
AnnaBridge 167:e84263d55307 755 {
AnnaBridge 167:e84263d55307 756 timeout --;
AnnaBridge 167:e84263d55307 757 }
AnnaBridge 167:e84263d55307 758 tmp = LL_RTC_IsActiveFlag_INIT(RTCx);
AnnaBridge 167:e84263d55307 759 if (timeout == 0U)
AnnaBridge 167:e84263d55307 760 {
AnnaBridge 167:e84263d55307 761 status = ERROR;
AnnaBridge 167:e84263d55307 762 }
AnnaBridge 167:e84263d55307 763 }
AnnaBridge 167:e84263d55307 764 }
AnnaBridge 167:e84263d55307 765 return status;
AnnaBridge 167:e84263d55307 766 }
AnnaBridge 167:e84263d55307 767
AnnaBridge 167:e84263d55307 768 /**
AnnaBridge 167:e84263d55307 769 * @brief Exit the RTC Initialization mode.
AnnaBridge 167:e84263d55307 770 * @note When the initialization sequence is complete, the calendar restarts
AnnaBridge 167:e84263d55307 771 * counting after 4 RTCCLK cycles.
AnnaBridge 167:e84263d55307 772 * @note The RTC Initialization mode is write protected, use the
AnnaBridge 167:e84263d55307 773 * @ref LL_RTC_DisableWriteProtection before calling this function.
AnnaBridge 167:e84263d55307 774 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 775 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 776 * - SUCCESS: RTC exited from in Init mode
AnnaBridge 167:e84263d55307 777 * - ERROR: Not applicable
AnnaBridge 167:e84263d55307 778 */
AnnaBridge 167:e84263d55307 779 ErrorStatus LL_RTC_ExitInitMode(RTC_TypeDef *RTCx)
AnnaBridge 167:e84263d55307 780 {
AnnaBridge 167:e84263d55307 781 /* Check the parameter */
AnnaBridge 167:e84263d55307 782 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 783
AnnaBridge 167:e84263d55307 784 /* Disable initialization mode */
AnnaBridge 167:e84263d55307 785 LL_RTC_DisableInitMode(RTCx);
AnnaBridge 167:e84263d55307 786
AnnaBridge 167:e84263d55307 787 return SUCCESS;
AnnaBridge 167:e84263d55307 788 }
AnnaBridge 167:e84263d55307 789
AnnaBridge 167:e84263d55307 790 /**
AnnaBridge 167:e84263d55307 791 * @brief Waits until the RTC Time and Day registers (RTC_TR and RTC_DR) are
AnnaBridge 167:e84263d55307 792 * synchronized with RTC APB clock.
AnnaBridge 167:e84263d55307 793 * @note The RTC Resynchronization mode is write protected, use the
AnnaBridge 167:e84263d55307 794 * @ref LL_RTC_DisableWriteProtection before calling this function.
AnnaBridge 167:e84263d55307 795 * @note To read the calendar through the shadow registers after Calendar
AnnaBridge 167:e84263d55307 796 * initialization, calendar update or after wakeup from low power modes
AnnaBridge 167:e84263d55307 797 * the software must first clear the RSF flag.
AnnaBridge 167:e84263d55307 798 * The software must then wait until it is set again before reading
AnnaBridge 167:e84263d55307 799 * the calendar, which means that the calendar registers have been
AnnaBridge 167:e84263d55307 800 * correctly copied into the RTC_TR and RTC_DR shadow registers.
AnnaBridge 167:e84263d55307 801 * @param RTCx RTC Instance
AnnaBridge 167:e84263d55307 802 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 803 * - SUCCESS: RTC registers are synchronised
AnnaBridge 167:e84263d55307 804 * - ERROR: RTC registers are not synchronised
AnnaBridge 167:e84263d55307 805 */
AnnaBridge 167:e84263d55307 806 ErrorStatus LL_RTC_WaitForSynchro(RTC_TypeDef *RTCx)
AnnaBridge 167:e84263d55307 807 {
AnnaBridge 167:e84263d55307 808 __IO uint32_t timeout = RTC_SYNCHRO_TIMEOUT;
AnnaBridge 167:e84263d55307 809 ErrorStatus status = SUCCESS;
AnnaBridge 167:e84263d55307 810 uint32_t tmp = 0U;
AnnaBridge 167:e84263d55307 811
AnnaBridge 167:e84263d55307 812 /* Check the parameter */
AnnaBridge 167:e84263d55307 813 assert_param(IS_RTC_ALL_INSTANCE(RTCx));
AnnaBridge 167:e84263d55307 814
AnnaBridge 167:e84263d55307 815 /* Clear RSF flag */
AnnaBridge 167:e84263d55307 816 LL_RTC_ClearFlag_RS(RTCx);
AnnaBridge 167:e84263d55307 817
AnnaBridge 167:e84263d55307 818 /* Wait the registers to be synchronised */
AnnaBridge 167:e84263d55307 819 tmp = LL_RTC_IsActiveFlag_RS(RTCx);
AnnaBridge 167:e84263d55307 820 while ((timeout != 0U) && (tmp != 0U))
AnnaBridge 167:e84263d55307 821 {
AnnaBridge 167:e84263d55307 822 if (LL_SYSTICK_IsActiveCounterFlag() == 1U)
AnnaBridge 167:e84263d55307 823 {
AnnaBridge 167:e84263d55307 824 timeout--;
AnnaBridge 167:e84263d55307 825 }
AnnaBridge 167:e84263d55307 826 tmp = LL_RTC_IsActiveFlag_RS(RTCx);
AnnaBridge 167:e84263d55307 827 if (timeout == 0U)
AnnaBridge 167:e84263d55307 828 {
AnnaBridge 167:e84263d55307 829 status = ERROR;
AnnaBridge 167:e84263d55307 830 }
AnnaBridge 167:e84263d55307 831 }
AnnaBridge 167:e84263d55307 832
AnnaBridge 167:e84263d55307 833 if (status != ERROR)
AnnaBridge 167:e84263d55307 834 {
AnnaBridge 167:e84263d55307 835 timeout = RTC_SYNCHRO_TIMEOUT;
AnnaBridge 167:e84263d55307 836 tmp = LL_RTC_IsActiveFlag_RS(RTCx);
AnnaBridge 167:e84263d55307 837 while ((timeout != 0U) && (tmp != 1U))
AnnaBridge 167:e84263d55307 838 {
AnnaBridge 167:e84263d55307 839 if (LL_SYSTICK_IsActiveCounterFlag() == 1U)
AnnaBridge 167:e84263d55307 840 {
AnnaBridge 167:e84263d55307 841 timeout--;
AnnaBridge 167:e84263d55307 842 }
AnnaBridge 167:e84263d55307 843 tmp = LL_RTC_IsActiveFlag_RS(RTCx);
AnnaBridge 167:e84263d55307 844 if (timeout == 0U)
AnnaBridge 167:e84263d55307 845 {
AnnaBridge 167:e84263d55307 846 status = ERROR;
AnnaBridge 167:e84263d55307 847 }
AnnaBridge 167:e84263d55307 848 }
AnnaBridge 167:e84263d55307 849 }
AnnaBridge 167:e84263d55307 850
AnnaBridge 167:e84263d55307 851 return (status);
AnnaBridge 167:e84263d55307 852 }
AnnaBridge 167:e84263d55307 853
AnnaBridge 167:e84263d55307 854 /**
AnnaBridge 167:e84263d55307 855 * @}
AnnaBridge 167:e84263d55307 856 */
AnnaBridge 167:e84263d55307 857
AnnaBridge 167:e84263d55307 858 /**
AnnaBridge 167:e84263d55307 859 * @}
AnnaBridge 167:e84263d55307 860 */
AnnaBridge 167:e84263d55307 861
AnnaBridge 167:e84263d55307 862 /**
AnnaBridge 167:e84263d55307 863 * @}
AnnaBridge 167:e84263d55307 864 */
AnnaBridge 167:e84263d55307 865
AnnaBridge 167:e84263d55307 866 #endif /* defined(RTC) */
AnnaBridge 167:e84263d55307 867
AnnaBridge 167:e84263d55307 868 /**
AnnaBridge 167:e84263d55307 869 * @}
AnnaBridge 167:e84263d55307 870 */
AnnaBridge 167:e84263d55307 871
AnnaBridge 167:e84263d55307 872 #endif /* USE_FULL_LL_DRIVER */
AnnaBridge 167:e84263d55307 873
AnnaBridge 167:e84263d55307 874 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/