1 /**
2   ******************************************************************************
3   * @file    stm32l1xx_ll_rtc.h
4   * @author  MCD Application Team
5   * @brief   Header file of RTC LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2016 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32L1xx_LL_RTC_H
21 #define STM32L1xx_LL_RTC_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32l1xx.h"
29 
30 /** @addtogroup STM32L1xx_LL_Driver
31   * @{
32   */
33 
34 #if defined(RTC)
35 
36 /** @defgroup RTC_LL RTC
37   * @{
38   */
39 
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /** @defgroup RTC_LL_Private_Constants RTC Private Constants
44   * @{
45   */
46 /* Masks Definition */
47 #define RTC_INIT_MASK                 0xFFFFFFFFU
48 #define RTC_RSF_MASK                  ((uint32_t)~(RTC_ISR_INIT | RTC_ISR_RSF))
49 
50 /* Write protection defines */
51 #define RTC_WRITE_PROTECTION_DISABLE  ((uint8_t)0xFFU)
52 #define RTC_WRITE_PROTECTION_ENABLE_1 ((uint8_t)0xCAU)
53 #define RTC_WRITE_PROTECTION_ENABLE_2 ((uint8_t)0x53U)
54 
55 /* Defines used to combine date & time */
56 #define RTC_OFFSET_WEEKDAY            24U
57 #define RTC_OFFSET_DAY                16U
58 #define RTC_OFFSET_MONTH              8U
59 #define RTC_OFFSET_HOUR               16U
60 #define RTC_OFFSET_MINUTE             8U
61 
62 /**
63   * @}
64   */
65 
66 /* Private macros ------------------------------------------------------------*/
67 #if defined(USE_FULL_LL_DRIVER)
68 /** @defgroup RTC_LL_Private_Macros RTC Private Macros
69   * @{
70   */
71 /**
72   * @}
73   */
74 #endif /*USE_FULL_LL_DRIVER*/
75 
76 /* Exported types ------------------------------------------------------------*/
77 #if defined(USE_FULL_LL_DRIVER)
78 /** @defgroup RTC_LL_ES_INIT RTC Exported Init structure
79   * @{
80   */
81 
82 /**
83   * @brief  RTC Init structures definition
84   */
85 typedef struct
86 {
87   uint32_t HourFormat;   /*!< Specifies the RTC Hours Format.
88                               This parameter can be a value of @ref RTC_LL_EC_HOURFORMAT
89 
90                               This feature can be modified afterwards using unitary function
91                               @ref LL_RTC_SetHourFormat(). */
92 
93   uint32_t AsynchPrescaler; /*!< Specifies the RTC Asynchronous Predivider value.
94                               This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7F
95 
96                               This feature can be modified afterwards using unitary function
97                               @ref LL_RTC_SetAsynchPrescaler(). */
98 
99   uint32_t SynchPrescaler;  /*!< Specifies the RTC Synchronous Predivider value.
100                               This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7FFF
101 
102                               This feature can be modified afterwards using unitary function
103                               @ref LL_RTC_SetSynchPrescaler(). */
104 } LL_RTC_InitTypeDef;
105 
106 /**
107   * @brief  RTC Time structure definition
108   */
109 typedef struct
110 {
111   uint32_t TimeFormat; /*!< Specifies the RTC AM/PM Time.
112                             This parameter can be a value of @ref RTC_LL_EC_TIME_FORMAT
113 
114                             This feature can be modified afterwards using unitary function @ref LL_RTC_TIME_SetFormat(). */
115 
116   uint8_t Hours;       /*!< Specifies the RTC Time Hours.
117                             This parameter must be a number between Min_Data = 0 and Max_Data = 12 if the @ref LL_RTC_TIME_FORMAT_PM is selected.
118                             This parameter must be a number between Min_Data = 0 and Max_Data = 23 if the @ref LL_RTC_TIME_FORMAT_AM_OR_24 is selected.
119 
120                             This feature can be modified afterwards using unitary function @ref LL_RTC_TIME_SetHour(). */
121 
122   uint8_t Minutes;     /*!< Specifies the RTC Time Minutes.
123                             This parameter must be a number between Min_Data = 0 and Max_Data = 59
124 
125                             This feature can be modified afterwards using unitary function @ref LL_RTC_TIME_SetMinute(). */
126 
127   uint8_t Seconds;     /*!< Specifies the RTC Time Seconds.
128                             This parameter must be a number between Min_Data = 0 and Max_Data = 59
129 
130                             This feature can be modified afterwards using unitary function @ref LL_RTC_TIME_SetSecond(). */
131 } LL_RTC_TimeTypeDef;
132 
133 /**
134   * @brief  RTC Date structure definition
135   */
136 typedef struct
137 {
138   uint8_t WeekDay;  /*!< Specifies the RTC Date WeekDay.
139                          This parameter can be a value of @ref RTC_LL_EC_WEEKDAY
140 
141                          This feature can be modified afterwards using unitary function @ref LL_RTC_DATE_SetWeekDay(). */
142 
143   uint8_t Month;    /*!< Specifies the RTC Date Month.
144                          This parameter can be a value of @ref RTC_LL_EC_MONTH
145 
146                          This feature can be modified afterwards using unitary function @ref LL_RTC_DATE_SetMonth(). */
147 
148   uint8_t Day;      /*!< Specifies the RTC Date Day.
149                          This parameter must be a number between Min_Data = 1 and Max_Data = 31
150 
151                          This feature can be modified afterwards using unitary function @ref LL_RTC_DATE_SetDay(). */
152 
153   uint8_t Year;     /*!< Specifies the RTC Date Year.
154                          This parameter must be a number between Min_Data = 0 and Max_Data = 99
155 
156                          This feature can be modified afterwards using unitary function @ref LL_RTC_DATE_SetYear(). */
157 } LL_RTC_DateTypeDef;
158 
159 /**
160   * @brief  RTC Alarm structure definition
161   */
162 typedef struct
163 {
164   LL_RTC_TimeTypeDef AlarmTime;  /*!< Specifies the RTC Alarm Time members. */
165 
166   uint32_t AlarmMask;            /*!< Specifies the RTC Alarm Masks.
167                                       This parameter can be a value of @ref RTC_LL_EC_ALMA_MASK for ALARM A or @ref RTC_LL_EC_ALMB_MASK for ALARM B.
168 
169                                       This feature can be modified afterwards using unitary function @ref LL_RTC_ALMA_SetMask() for ALARM A
170                                       or @ref LL_RTC_ALMB_SetMask() for ALARM B.
171                                  */
172 
173   uint32_t AlarmDateWeekDaySel;  /*!< Specifies the RTC Alarm is on day or WeekDay.
174                                       This parameter can be a value of @ref RTC_LL_EC_ALMA_WEEKDAY_SELECTION for ALARM A or @ref RTC_LL_EC_ALMB_WEEKDAY_SELECTION for ALARM B
175 
176                                       This feature can be modified afterwards using unitary function @ref LL_RTC_ALMA_EnableWeekday() or @ref LL_RTC_ALMA_DisableWeekday()
177                                       for ALARM A or @ref LL_RTC_ALMB_EnableWeekday() or @ref LL_RTC_ALMB_DisableWeekday() for ALARM B
178                                  */
179 
180   uint8_t AlarmDateWeekDay;      /*!< Specifies the RTC Alarm Day/WeekDay.
181                                       If AlarmDateWeekDaySel set to day, this parameter  must be a number between Min_Data = 1 and Max_Data = 31.
182 
183                                       This feature can be modified afterwards using unitary function @ref LL_RTC_ALMA_SetDay()
184                                       for ALARM A or @ref LL_RTC_ALMB_SetDay() for ALARM B.
185 
186                                       If AlarmDateWeekDaySel set to Weekday, this parameter can be a value of @ref RTC_LL_EC_WEEKDAY.
187 
188                                       This feature can be modified afterwards using unitary function @ref LL_RTC_ALMA_SetWeekDay()
189                                       for ALARM A or @ref LL_RTC_ALMB_SetWeekDay() for ALARM B.
190                                  */
191 } LL_RTC_AlarmTypeDef;
192 
193 /**
194   * @}
195   */
196 #endif /* USE_FULL_LL_DRIVER */
197 
198 /* Exported constants --------------------------------------------------------*/
199 /** @defgroup RTC_LL_Exported_Constants RTC Exported Constants
200   * @{
201   */
202 
203 #if defined(USE_FULL_LL_DRIVER)
204 /** @defgroup RTC_LL_EC_FORMAT FORMAT
205   * @{
206   */
207 #define LL_RTC_FORMAT_BIN                  0x00000000U /*!< Binary data format */
208 #define LL_RTC_FORMAT_BCD                  0x00000001U /*!< BCD data format */
209 /**
210   * @}
211   */
212 
213 /** @defgroup RTC_LL_EC_ALMA_WEEKDAY_SELECTION RTC Alarm A Date WeekDay
214   * @{
215   */
216 #define LL_RTC_ALMA_DATEWEEKDAYSEL_DATE    0x00000000U             /*!< Alarm A Date is selected */
217 #define LL_RTC_ALMA_DATEWEEKDAYSEL_WEEKDAY RTC_ALRMAR_WDSEL        /*!< Alarm A WeekDay is selected */
218 /**
219   * @}
220   */
221 
222 /** @defgroup RTC_LL_EC_ALMB_WEEKDAY_SELECTION RTC Alarm B Date WeekDay
223   * @{
224   */
225 #define LL_RTC_ALMB_DATEWEEKDAYSEL_DATE    0x00000000U             /*!< Alarm B Date is selected */
226 #define LL_RTC_ALMB_DATEWEEKDAYSEL_WEEKDAY RTC_ALRMBR_WDSEL        /*!< Alarm B WeekDay is selected */
227 /**
228   * @}
229   */
230 
231 #endif /* USE_FULL_LL_DRIVER */
232 
233 /** @defgroup RTC_LL_EC_GET_FLAG Get Flags Defines
234   * @brief    Flags defines which can be used with LL_RTC_ReadReg function
235   * @{
236   */
237 #if defined(RTC_SMOOTHCALIB_SUPPORT)
238 #define LL_RTC_ISR_RECALPF                 RTC_ISR_RECALPF
239 #endif /* RTC_SMOOTHCALIB_SUPPORT */
240 #if defined(RTC_TAMPER3_SUPPORT)
241 #define LL_RTC_ISR_TAMP3F                  RTC_ISR_TAMP3F
242 #endif /* RTC_TAMPER3_SUPPORT */
243 #if defined(RTC_TAMPER2_SUPPORT)
244 #define LL_RTC_ISR_TAMP2F                  RTC_ISR_TAMP2F
245 #endif /* RTC_TAMPER2_SUPPORT */
246 #define LL_RTC_ISR_TAMP1F                  RTC_ISR_TAMP1F
247 #define LL_RTC_ISR_TSOVF                   RTC_ISR_TSOVF
248 #define LL_RTC_ISR_TSF                     RTC_ISR_TSF
249 #define LL_RTC_ISR_WUTF                    RTC_ISR_WUTF
250 #define LL_RTC_ISR_ALRBF                   RTC_ISR_ALRBF
251 #define LL_RTC_ISR_ALRAF                   RTC_ISR_ALRAF
252 #define LL_RTC_ISR_INITF                   RTC_ISR_INITF
253 #define LL_RTC_ISR_RSF                     RTC_ISR_RSF
254 #define LL_RTC_ISR_INITS                   RTC_ISR_INITS
255 #define LL_RTC_ISR_SHPF                    RTC_ISR_SHPF
256 #define LL_RTC_ISR_WUTWF                   RTC_ISR_WUTWF
257 #define LL_RTC_ISR_ALRBWF                  RTC_ISR_ALRBWF
258 #define LL_RTC_ISR_ALRAWF                  RTC_ISR_ALRAWF
259 /**
260   * @}
261   */
262 
263 /** @defgroup RTC_LL_EC_IT IT Defines
264   * @brief    IT defines which can be used with LL_RTC_ReadReg and  LL_RTC_WriteReg functions
265   * @{
266   */
267 #define LL_RTC_CR_TSIE                     RTC_CR_TSIE
268 #define LL_RTC_CR_WUTIE                    RTC_CR_WUTIE
269 #define LL_RTC_CR_ALRBIE                   RTC_CR_ALRBIE
270 #define LL_RTC_CR_ALRAIE                   RTC_CR_ALRAIE
271 #define LL_RTC_TAFCR_TAMPIE               RTC_TAFCR_TAMPIE
272 /**
273   * @}
274   */
275 
276 /** @defgroup RTC_LL_EC_WEEKDAY  WEEK DAY
277   * @{
278   */
279 #define LL_RTC_WEEKDAY_MONDAY              ((uint8_t)0x01U) /*!< Monday    */
280 #define LL_RTC_WEEKDAY_TUESDAY             ((uint8_t)0x02U) /*!< Tuesday   */
281 #define LL_RTC_WEEKDAY_WEDNESDAY           ((uint8_t)0x03U) /*!< Wednesday */
282 #define LL_RTC_WEEKDAY_THURSDAY            ((uint8_t)0x04U) /*!< Thrusday  */
283 #define LL_RTC_WEEKDAY_FRIDAY              ((uint8_t)0x05U) /*!< Friday    */
284 #define LL_RTC_WEEKDAY_SATURDAY            ((uint8_t)0x06U) /*!< Saturday  */
285 #define LL_RTC_WEEKDAY_SUNDAY              ((uint8_t)0x07U) /*!< Sunday    */
286 /**
287   * @}
288   */
289 
290 /** @defgroup RTC_LL_EC_MONTH  MONTH
291   * @{
292   */
293 #define LL_RTC_MONTH_JANUARY               ((uint8_t)0x01U)  /*!< January   */
294 #define LL_RTC_MONTH_FEBRUARY              ((uint8_t)0x02U)  /*!< February  */
295 #define LL_RTC_MONTH_MARCH                 ((uint8_t)0x03U)  /*!< March     */
296 #define LL_RTC_MONTH_APRIL                 ((uint8_t)0x04U)  /*!< April     */
297 #define LL_RTC_MONTH_MAY                   ((uint8_t)0x05U)  /*!< May       */
298 #define LL_RTC_MONTH_JUNE                  ((uint8_t)0x06U)  /*!< June      */
299 #define LL_RTC_MONTH_JULY                  ((uint8_t)0x07U)  /*!< July      */
300 #define LL_RTC_MONTH_AUGUST                ((uint8_t)0x08U)  /*!< August    */
301 #define LL_RTC_MONTH_SEPTEMBER             ((uint8_t)0x09U)  /*!< September */
302 #define LL_RTC_MONTH_OCTOBER               ((uint8_t)0x10U)  /*!< October   */
303 #define LL_RTC_MONTH_NOVEMBER              ((uint8_t)0x11U)  /*!< November  */
304 #define LL_RTC_MONTH_DECEMBER              ((uint8_t)0x12U)  /*!< December  */
305 /**
306   * @}
307   */
308 
309 /** @defgroup RTC_LL_EC_HOURFORMAT  HOUR FORMAT
310   * @{
311   */
312 #define LL_RTC_HOURFORMAT_24HOUR           0x00000000U           /*!< 24 hour/day format */
313 #define LL_RTC_HOURFORMAT_AMPM             RTC_CR_FMT            /*!< AM/PM hour format */
314 /**
315   * @}
316   */
317 
318 /** @defgroup RTC_LL_EC_ALARMOUT  ALARM OUTPUT
319   * @{
320   */
321 #define LL_RTC_ALARMOUT_DISABLE            0x00000000U             /*!< Output disabled */
322 #define LL_RTC_ALARMOUT_ALMA               RTC_CR_OSEL_0           /*!< Alarm A output enabled */
323 #define LL_RTC_ALARMOUT_ALMB               RTC_CR_OSEL_1           /*!< Alarm B output enabled */
324 #define LL_RTC_ALARMOUT_WAKEUP             RTC_CR_OSEL             /*!< Wakeup output enabled */
325 /**
326   * @}
327   */
328 
329 /** @defgroup RTC_LL_EC_ALARM_OUTPUTTYPE  ALARM OUTPUT TYPE
330   * @{
331   */
332 #define LL_RTC_ALARM_OUTPUTTYPE_OPENDRAIN  0x00000000U                          /*!< RTC_ALARM, when mapped on PC13, is open-drain output */
333 #define LL_RTC_ALARM_OUTPUTTYPE_PUSHPULL   RTC_TAFCR_ALARMOUTTYPE /*!< RTC_ALARM, when mapped on PC13, is push-pull output */
334 /**
335   * @}
336   */
337 
338 /** @defgroup RTC_LL_EC_OUTPUTPOLARITY_PIN  OUTPUT POLARITY PIN
339   * @{
340   */
341 #define LL_RTC_OUTPUTPOLARITY_PIN_HIGH     0x00000000U           /*!< Pin is high when ALRAF/ALRBF/WUTF is asserted (depending on OSEL)*/
342 #define LL_RTC_OUTPUTPOLARITY_PIN_LOW      RTC_CR_POL            /*!< Pin is low when ALRAF/ALRBF/WUTF is asserted (depending on OSEL) */
343 /**
344   * @}
345   */
346 
347 /** @defgroup RTC_LL_EC_TIME_FORMAT TIME FORMAT
348   * @{
349   */
350 #define LL_RTC_TIME_FORMAT_AM_OR_24        0x00000000U           /*!< AM or 24-hour format */
351 #define LL_RTC_TIME_FORMAT_PM              RTC_TR_PM             /*!< PM */
352 /**
353   * @}
354   */
355 
356 #if defined(RTC_SUBSECOND_SUPPORT)
357 /** @defgroup RTC_LL_EC_SHIFT_SECOND  SHIFT SECOND
358   * @{
359   */
360 #define LL_RTC_SHIFT_SECOND_DELAY          0x00000000U           /* Delay (seconds) = SUBFS / (PREDIV_S + 1) */
361 #define LL_RTC_SHIFT_SECOND_ADVANCE        RTC_SHIFTR_ADD1S      /* Advance (seconds) = (1 - (SUBFS / (PREDIV_S + 1))) */
362 /**
363   * @}
364   */
365 #endif /* RTC_SUBSECOND_SUPPORT */
366 
367 /** @defgroup RTC_LL_EC_ALMA_MASK  ALARMA MASK
368   * @{
369   */
370 #define LL_RTC_ALMA_MASK_NONE              0x00000000U             /*!< No masks applied on Alarm A*/
371 #define LL_RTC_ALMA_MASK_DATEWEEKDAY       RTC_ALRMAR_MSK4         /*!< Date/day do not care in Alarm A comparison */
372 #define LL_RTC_ALMA_MASK_HOURS             RTC_ALRMAR_MSK3         /*!< Hours do not care in Alarm A comparison */
373 #define LL_RTC_ALMA_MASK_MINUTES           RTC_ALRMAR_MSK2         /*!< Minutes do not care in Alarm A comparison */
374 #define LL_RTC_ALMA_MASK_SECONDS           RTC_ALRMAR_MSK1         /*!< Seconds do not care in Alarm A comparison */
375 #define LL_RTC_ALMA_MASK_ALL               (RTC_ALRMAR_MSK4 | RTC_ALRMAR_MSK3 | RTC_ALRMAR_MSK2 | RTC_ALRMAR_MSK1) /*!< Masks all */
376 /**
377   * @}
378   */
379 
380 /** @defgroup RTC_LL_EC_ALMA_TIME_FORMAT  ALARMA TIME FORMAT
381   * @{
382   */
383 #define LL_RTC_ALMA_TIME_FORMAT_AM         0x00000000U           /*!< AM or 24-hour format */
384 #define LL_RTC_ALMA_TIME_FORMAT_PM         RTC_ALRMAR_PM         /*!< PM */
385 /**
386   * @}
387   */
388 
389 /** @defgroup RTC_LL_EC_ALMB_MASK  ALARMB MASK
390   * @{
391   */
392 #define LL_RTC_ALMB_MASK_NONE              0x00000000U             /*!< No masks applied on Alarm B                */
393 #define LL_RTC_ALMB_MASK_DATEWEEKDAY       RTC_ALRMBR_MSK4         /*!< Date/day do not care in Alarm B comparison */
394 #define LL_RTC_ALMB_MASK_HOURS             RTC_ALRMBR_MSK3         /*!< Hours do not care in Alarm B comparison    */
395 #define LL_RTC_ALMB_MASK_MINUTES           RTC_ALRMBR_MSK2         /*!< Minutes do not care in Alarm B comparison  */
396 #define LL_RTC_ALMB_MASK_SECONDS           RTC_ALRMBR_MSK1         /*!< Seconds do not care in Alarm B comparison  */
397 #define LL_RTC_ALMB_MASK_ALL               (RTC_ALRMBR_MSK4 | RTC_ALRMBR_MSK3 | RTC_ALRMBR_MSK2 | RTC_ALRMBR_MSK1) /*!< Masks all */
398 /**
399   * @}
400   */
401 
402 /** @defgroup RTC_LL_EC_ALMB_TIME_FORMAT  ALARMB TIME FORMAT
403   * @{
404   */
405 #define LL_RTC_ALMB_TIME_FORMAT_AM         0x00000000U           /*!< AM or 24-hour format */
406 #define LL_RTC_ALMB_TIME_FORMAT_PM         RTC_ALRMBR_PM         /*!< PM */
407 /**
408   * @}
409   */
410 
411 /** @defgroup RTC_LL_EC_TIMESTAMP_EDGE  TIMESTAMP EDGE
412   * @{
413   */
414 #define LL_RTC_TIMESTAMP_EDGE_RISING       0x00000000U           /*!< RTC_TS input rising edge generates a time-stamp event */
415 #define LL_RTC_TIMESTAMP_EDGE_FALLING      RTC_CR_TSEDGE         /*!< RTC_TS input falling edge generates a time-stamp even */
416 /**
417   * @}
418   */
419 
420 /** @defgroup RTC_LL_EC_TS_TIME_FORMAT  TIMESTAMP TIME FORMAT
421   * @{
422   */
423 #define LL_RTC_TS_TIME_FORMAT_AM           0x00000000U           /*!< AM or 24-hour format */
424 #define LL_RTC_TS_TIME_FORMAT_PM           RTC_TSTR_PM           /*!< PM */
425 /**
426   * @}
427   */
428 
429 /** @defgroup RTC_LL_EC_TAMPER  TAMPER
430   * @{
431   */
432 #define LL_RTC_TAMPER_1                    RTC_TAFCR_TAMP1E /*!< RTC_TAMP1 input detection */
433 #if defined(RTC_TAMPER2_SUPPORT)
434 #define LL_RTC_TAMPER_2                    RTC_TAFCR_TAMP2E /*!< RTC_TAMP2 input detection */
435 #endif /* RTC_TAMPER2_SUPPORT */
436 #if defined(RTC_TAMPER3_SUPPORT)
437 #define LL_RTC_TAMPER_3                    RTC_TAFCR_TAMP3E /*!< RTC_TAMP3 input detection */
438 #endif /* RTC_TAMPER3_SUPPORT */
439 /**
440   * @}
441   */
442 
443 #if defined(RTC_TAFCR_TAMPFLT)
444 /** @defgroup RTC_LL_EC_TAMPER_DURATION  TAMPER DURATION
445   * @{
446   */
447 #define LL_RTC_TAMPER_DURATION_1RTCCLK     0x00000000U                             /*!< Tamper pins are pre-charged before sampling during 1 RTCCLK cycle  */
448 #define LL_RTC_TAMPER_DURATION_2RTCCLK     RTC_TAFCR_TAMPPRCH_0  /*!< Tamper pins are pre-charged before sampling during 2 RTCCLK cycles */
449 #define LL_RTC_TAMPER_DURATION_4RTCCLK     RTC_TAFCR_TAMPPRCH_1  /*!< Tamper pins are pre-charged before sampling during 4 RTCCLK cycles */
450 #define LL_RTC_TAMPER_DURATION_8RTCCLK     RTC_TAFCR_TAMPPRCH    /*!< Tamper pins are pre-charged before sampling during 8 RTCCLK cycles */
451 /**
452   * @}
453   */
454 
455 /** @defgroup RTC_LL_EC_TAMPER_FILTER  TAMPER FILTER
456   * @{
457   */
458 #define LL_RTC_TAMPER_FILTER_DISABLE       0x00000000U                              /*!< Tamper filter is disabled */
459 #define LL_RTC_TAMPER_FILTER_2SAMPLE       RTC_TAFCR_TAMPFLT_0    /*!< Tamper is activated after 2 consecutive samples at the active level */
460 #define LL_RTC_TAMPER_FILTER_4SAMPLE       RTC_TAFCR_TAMPFLT_1    /*!< Tamper is activated after 4 consecutive samples at the active level */
461 #define LL_RTC_TAMPER_FILTER_8SAMPLE       RTC_TAFCR_TAMPFLT      /*!< Tamper is activated after 8 consecutive samples at the active level. */
462 /**
463   * @}
464   */
465 
466 /** @defgroup RTC_LL_EC_TAMPER_SAMPLFREQDIV  TAMPER SAMPLING FREQUENCY DIVIDER
467   * @{
468   */
469 #define LL_RTC_TAMPER_SAMPLFREQDIV_32768   0x00000000U                                                      /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 32768 */
470 #define LL_RTC_TAMPER_SAMPLFREQDIV_16384   RTC_TAFCR_TAMPFREQ_0                           /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 16384 */
471 #define LL_RTC_TAMPER_SAMPLFREQDIV_8192    RTC_TAFCR_TAMPFREQ_1                           /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 8192 */
472 #define LL_RTC_TAMPER_SAMPLFREQDIV_4096    (RTC_TAFCR_TAMPFREQ_1 | RTC_TAFCR_TAMPFREQ_0) /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 4096 */
473 #define LL_RTC_TAMPER_SAMPLFREQDIV_2048    RTC_TAFCR_TAMPFREQ_2                           /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 2048 */
474 #define LL_RTC_TAMPER_SAMPLFREQDIV_1024    (RTC_TAFCR_TAMPFREQ_2 | RTC_TAFCR_TAMPFREQ_0) /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 1024 */
475 #define LL_RTC_TAMPER_SAMPLFREQDIV_512     (RTC_TAFCR_TAMPFREQ_2 | RTC_TAFCR_TAMPFREQ_1) /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 512 */
476 #define LL_RTC_TAMPER_SAMPLFREQDIV_256     RTC_TAFCR_TAMPFREQ                             /*!< Each of the tamper inputs are sampled with a frequency =  RTCCLK / 256 */
477 /**
478   * @}
479   */
480 #endif /* RTC_TAFCR_TAMPFLT */
481 
482 /** @defgroup RTC_LL_EC_TAMPER_ACTIVELEVEL  TAMPER ACTIVE LEVEL
483   * @{
484   */
485 #define LL_RTC_TAMPER_ACTIVELEVEL_TAMP1    RTC_TAFCR_TAMP1TRG /*!< RTC_TAMP1 input falling edge (if TAMPFLT = 00) or staying high (if TAMPFLT != 00) triggers a tamper detection event */
486 #if defined(RTC_TAMPER2_SUPPORT)
487 #define LL_RTC_TAMPER_ACTIVELEVEL_TAMP2    RTC_TAFCR_TAMP2TRG /*!< RTC_TAMP2 input falling edge (if TAMPFLT = 00) or staying high (if TAMPFLT != 00) triggers a tamper detection event */
488 #endif /* RTC_TAMPER2_SUPPORT */
489 #if defined(RTC_TAMPER3_SUPPORT)
490 #define LL_RTC_TAMPER_ACTIVELEVEL_TAMP3    RTC_TAFCR_TAMP3TRG /*!< RTC_TAMP3 input falling edge (if TAMPFLT = 00) or staying high (if TAMPFLT != 00) triggers a tamper detection event */
491 #endif /* RTC_TAMPER3_SUPPORT */
492 /**
493   * @}
494   */
495 
496 /** @defgroup RTC_LL_EC_WAKEUPCLOCK_DIV  WAKEUP CLOCK DIV
497   * @{
498   */
499 #define LL_RTC_WAKEUPCLOCK_DIV_16          0x00000000U                           /*!< RTC/16 clock is selected */
500 #define LL_RTC_WAKEUPCLOCK_DIV_8           (RTC_CR_WUCKSEL_0)                    /*!< RTC/8 clock is selected */
501 #define LL_RTC_WAKEUPCLOCK_DIV_4           (RTC_CR_WUCKSEL_1)                    /*!< RTC/4 clock is selected */
502 #define LL_RTC_WAKEUPCLOCK_DIV_2           (RTC_CR_WUCKSEL_1 | RTC_CR_WUCKSEL_0) /*!< RTC/2 clock is selected */
503 #define LL_RTC_WAKEUPCLOCK_CKSPRE          (RTC_CR_WUCKSEL_2)                    /*!< ck_spre (usually 1 Hz) clock is selected */
504 #define LL_RTC_WAKEUPCLOCK_CKSPRE_WUT      (RTC_CR_WUCKSEL_2 | RTC_CR_WUCKSEL_1) /*!< ck_spre (usually 1 Hz) clock is selected and 2exp16 is added to the WUT counter value*/
505 /**
506   * @}
507   */
508 
509 /** @defgroup RTC_LL_EC_BKP  BACKUP
510   * @{
511   */
512 #define LL_RTC_BKP_DR0                     0x00000000U
513 #define LL_RTC_BKP_DR1                     0x00000001U
514 #define LL_RTC_BKP_DR2                     0x00000002U
515 #define LL_RTC_BKP_DR3                     0x00000003U
516 #define LL_RTC_BKP_DR4                     0x00000004U
517 #if RTC_BKP_NUMBER > 5U
518 #define LL_RTC_BKP_DR5                     0x00000005U
519 #define LL_RTC_BKP_DR6                     0x00000006U
520 #define LL_RTC_BKP_DR7                     0x00000007U
521 #define LL_RTC_BKP_DR8                     0x00000008U
522 #define LL_RTC_BKP_DR9                     0x00000009U
523 #define LL_RTC_BKP_DR10                    0x0000000AU
524 #define LL_RTC_BKP_DR11                    0x0000000BU
525 #define LL_RTC_BKP_DR12                    0x0000000CU
526 #define LL_RTC_BKP_DR13                    0x0000000DU
527 #define LL_RTC_BKP_DR14                    0x0000000EU
528 #define LL_RTC_BKP_DR15                    0x0000000FU
529 #if RTC_BKP_NUMBER > 16U
530 #define LL_RTC_BKP_DR16                    0x00000010U
531 #define LL_RTC_BKP_DR17                    0x00000011U
532 #define LL_RTC_BKP_DR18                    0x00000012U
533 #define LL_RTC_BKP_DR19                    0x00000013U
534 #if RTC_BKP_NUMBER > 20U
535 #define LL_RTC_BKP_DR20                    0x00000014U
536 #define LL_RTC_BKP_DR21                    0x00000015U
537 #define LL_RTC_BKP_DR22                    0x00000016U
538 #define LL_RTC_BKP_DR23                    0x00000017U
539 #define LL_RTC_BKP_DR24                    0x00000018U
540 #define LL_RTC_BKP_DR25                    0x00000019U
541 #define LL_RTC_BKP_DR26                    0x0000001AU
542 #define LL_RTC_BKP_DR27                    0x0000001BU
543 #define LL_RTC_BKP_DR28                    0x0000001CU
544 #define LL_RTC_BKP_DR29                    0x0000001DU
545 #define LL_RTC_BKP_DR30                    0x0000001EU
546 #define LL_RTC_BKP_DR31                    0x0000001FU
547 #endif /* RTC_BKP_NUMBER > 20U */
548 #endif /* RTC_BKP_NUMBER > 16U */
549 #endif /* RTC_BKP_NUMBER >  5U */
550 /**
551   * @}
552   */
553 
554 /** @defgroup RTC_LL_EC_CALIB_OUTPUT  Calibration output
555   * @{
556   */
557 #define LL_RTC_CALIB_OUTPUT_NONE           0x00000000U                 /*!< Calibration output disabled */
558 #if defined(RTC_CR_COSEL)
559 #define LL_RTC_CALIB_OUTPUT_1HZ            (RTC_CR_COE | RTC_CR_COSEL) /*!< Calibration output is 1 Hz */
560 #endif /* RTC_CR_COSEL */
561 #define LL_RTC_CALIB_OUTPUT_512HZ          (RTC_CR_COE)                /*!< Calibration output is 512 Hz */
562 /**
563   * @}
564   */
565 
566 /** @defgroup RTC_LL_EC_CALIB_SIGN Coarse digital calibration sign
567   * @{
568   */
569 #define LL_RTC_CALIB_SIGN_POSITIVE         0x00000000U           /*!< Positive calibration: calendar update frequency is increased */
570 #define LL_RTC_CALIB_SIGN_NEGATIVE         RTC_CALIBR_DCS        /*!< Negative calibration: calendar update frequency is decreased */
571 /**
572   * @}
573   */
574 
575 /** @defgroup RTC_LL_EC_CALIB_INSERTPULSE  Calibration pulse insertion
576   * @{
577   */
578 #define LL_RTC_CALIB_INSERTPULSE_NONE      0x00000000U           /*!< No RTCCLK pulses are added */
579 #define LL_RTC_CALIB_INSERTPULSE_SET       RTC_CALR_CALP         /*!< One RTCCLK pulse is effectively inserted every 2exp11 pulses (frequency increased by 488.5 ppm) */
580 /**
581   * @}
582   */
583 
584 /** @defgroup RTC_LL_EC_CALIB_PERIOD  Calibration period
585   * @{
586   */
587 #define LL_RTC_CALIB_PERIOD_32SEC          0x00000000U           /*!< Use a 32-second calibration cycle period */
588 #define LL_RTC_CALIB_PERIOD_16SEC          RTC_CALR_CALW16       /*!< Use a 16-second calibration cycle period */
589 #define LL_RTC_CALIB_PERIOD_8SEC           RTC_CALR_CALW8        /*!< Use a 8-second calibration cycle period */
590 /**
591   * @}
592   */
593 
594 /**
595   * @}
596   */
597 
598 /* Exported macro ------------------------------------------------------------*/
599 /** @defgroup RTC_LL_Exported_Macros RTC Exported Macros
600   * @{
601   */
602 
603 /** @defgroup RTC_LL_EM_WRITE_READ Common Write and read registers Macros
604   * @{
605   */
606 
607 /**
608   * @brief  Write a value in RTC register
609   * @param  __INSTANCE__ RTC Instance
610   * @param  __REG__ Register to be written
611   * @param  __VALUE__ Value to be written in the register
612   * @retval None
613   */
614 #define LL_RTC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
615 
616 /**
617   * @brief  Read a value in RTC register
618   * @param  __INSTANCE__ RTC Instance
619   * @param  __REG__ Register to be read
620   * @retval Register value
621   */
622 #define LL_RTC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
623 /**
624   * @}
625   */
626 
627 /** @defgroup RTC_LL_EM_Convert Convert helper Macros
628   * @{
629   */
630 
631 /**
632   * @brief  Helper macro to convert a value from 2 digit decimal format to BCD format
633   * @param  __VALUE__ Byte to be converted
634   * @retval Converted byte
635   */
636 #define __LL_RTC_CONVERT_BIN2BCD(__VALUE__) (uint8_t)((((__VALUE__) / 10U) << 4U) | ((__VALUE__) % 10U))
637 
638 /**
639   * @brief  Helper macro to convert a value from BCD format to 2 digit decimal format
640   * @param  __VALUE__ BCD value to be converted
641   * @retval Converted byte
642   */
643 #define __LL_RTC_CONVERT_BCD2BIN(__VALUE__) (uint8_t)(((uint8_t)((__VALUE__) & (uint8_t)0xF0U) >> (uint8_t)0x4U) * 10U + ((__VALUE__) & (uint8_t)0x0FU))
644 
645 /**
646   * @}
647   */
648 
649 /** @defgroup RTC_LL_EM_Date Date helper Macros
650   * @{
651   */
652 
653 /**
654   * @brief  Helper macro to retrieve weekday.
655   * @param  __RTC_DATE__ Date returned by @ref  LL_RTC_DATE_Get function.
656   * @retval Returned value can be one of the following values:
657   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
658   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
659   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
660   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
661   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
662   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
663   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
664   */
665 #define __LL_RTC_GET_WEEKDAY(__RTC_DATE__) (((__RTC_DATE__) >> RTC_OFFSET_WEEKDAY) & 0x000000FFU)
666 
667 /**
668   * @brief  Helper macro to retrieve Year in BCD format
669   * @param  __RTC_DATE__ Value returned by @ref  LL_RTC_DATE_Get
670   * @retval Year in BCD format (0x00 . . . 0x99)
671   */
672 #define __LL_RTC_GET_YEAR(__RTC_DATE__) ((__RTC_DATE__) & 0x000000FFU)
673 
674 /**
675   * @brief  Helper macro to retrieve Month in BCD format
676   * @param  __RTC_DATE__ Value returned by @ref  LL_RTC_DATE_Get
677   * @retval Returned value can be one of the following values:
678   *         @arg @ref LL_RTC_MONTH_JANUARY
679   *         @arg @ref LL_RTC_MONTH_FEBRUARY
680   *         @arg @ref LL_RTC_MONTH_MARCH
681   *         @arg @ref LL_RTC_MONTH_APRIL
682   *         @arg @ref LL_RTC_MONTH_MAY
683   *         @arg @ref LL_RTC_MONTH_JUNE
684   *         @arg @ref LL_RTC_MONTH_JULY
685   *         @arg @ref LL_RTC_MONTH_AUGUST
686   *         @arg @ref LL_RTC_MONTH_SEPTEMBER
687   *         @arg @ref LL_RTC_MONTH_OCTOBER
688   *         @arg @ref LL_RTC_MONTH_NOVEMBER
689   *         @arg @ref LL_RTC_MONTH_DECEMBER
690   */
691 #define __LL_RTC_GET_MONTH(__RTC_DATE__) (((__RTC_DATE__) >>RTC_OFFSET_MONTH) & 0x000000FFU)
692 
693 /**
694   * @brief  Helper macro to retrieve Day in BCD format
695   * @param  __RTC_DATE__ Value returned by @ref  LL_RTC_DATE_Get
696   * @retval Day in BCD format (0x01 . . . 0x31)
697   */
698 #define __LL_RTC_GET_DAY(__RTC_DATE__) (((__RTC_DATE__) >>RTC_OFFSET_DAY) & 0x000000FFU)
699 
700 /**
701   * @}
702   */
703 
704 /** @defgroup RTC_LL_EM_Time Time helper Macros
705   * @{
706   */
707 
708 /**
709   * @brief  Helper macro to retrieve hour in BCD format
710   * @param  __RTC_TIME__ RTC time returned by @ref LL_RTC_TIME_Get function
711   * @retval Hours in BCD format (0x01. . .0x12 or between Min_Data=0x00 and Max_Data=0x23)
712   */
713 #define __LL_RTC_GET_HOUR(__RTC_TIME__) (((__RTC_TIME__) >> RTC_OFFSET_HOUR) & 0x000000FFU)
714 
715 /**
716   * @brief  Helper macro to retrieve minute in BCD format
717   * @param  __RTC_TIME__ RTC time returned by @ref LL_RTC_TIME_Get function
718   * @retval Minutes in BCD format (0x00. . .0x59)
719   */
720 #define __LL_RTC_GET_MINUTE(__RTC_TIME__) (((__RTC_TIME__) >> RTC_OFFSET_MINUTE) & 0x000000FFU)
721 
722 /**
723   * @brief  Helper macro to retrieve second in BCD format
724   * @param  __RTC_TIME__ RTC time returned by @ref LL_RTC_TIME_Get function
725   * @retval Seconds in  format (0x00. . .0x59)
726   */
727 #define __LL_RTC_GET_SECOND(__RTC_TIME__) ((__RTC_TIME__) & 0x000000FFU)
728 
729 /**
730   * @}
731   */
732 
733 /**
734   * @}
735   */
736 
737 /* Exported functions --------------------------------------------------------*/
738 /** @defgroup RTC_LL_Exported_Functions RTC Exported Functions
739   * @{
740   */
741 
742 /** @defgroup RTC_LL_EF_Configuration Configuration
743   * @{
744   */
745 
746 /**
747   * @brief  Set Hours format (24 hour/day or AM/PM hour format)
748   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
749   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
750   * @rmtoll CR           FMT           LL_RTC_SetHourFormat
751   * @param  RTCx RTC Instance
752   * @param  HourFormat This parameter can be one of the following values:
753   *         @arg @ref LL_RTC_HOURFORMAT_24HOUR
754   *         @arg @ref LL_RTC_HOURFORMAT_AMPM
755   * @retval None
756   */
LL_RTC_SetHourFormat(RTC_TypeDef * RTCx,uint32_t HourFormat)757 __STATIC_INLINE void LL_RTC_SetHourFormat(RTC_TypeDef *RTCx, uint32_t HourFormat)
758 {
759   MODIFY_REG(RTCx->CR, RTC_CR_FMT, HourFormat);
760 }
761 
762 /**
763   * @brief  Get Hours format (24 hour/day or AM/PM hour format)
764   * @rmtoll CR           FMT           LL_RTC_GetHourFormat
765   * @param  RTCx RTC Instance
766   * @retval Returned value can be one of the following values:
767   *         @arg @ref LL_RTC_HOURFORMAT_24HOUR
768   *         @arg @ref LL_RTC_HOURFORMAT_AMPM
769   */
LL_RTC_GetHourFormat(RTC_TypeDef * RTCx)770 __STATIC_INLINE uint32_t LL_RTC_GetHourFormat(RTC_TypeDef *RTCx)
771 {
772   return (uint32_t)(READ_BIT(RTCx->CR, RTC_CR_FMT));
773 }
774 
775 /**
776   * @brief  Select the flag to be routed to RTC_ALARM output
777   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
778   * @rmtoll CR           OSEL          LL_RTC_SetAlarmOutEvent
779   * @param  RTCx RTC Instance
780   * @param  AlarmOutput This parameter can be one of the following values:
781   *         @arg @ref LL_RTC_ALARMOUT_DISABLE
782   *         @arg @ref LL_RTC_ALARMOUT_ALMA
783   *         @arg @ref LL_RTC_ALARMOUT_ALMB
784   *         @arg @ref LL_RTC_ALARMOUT_WAKEUP
785   * @retval None
786   */
LL_RTC_SetAlarmOutEvent(RTC_TypeDef * RTCx,uint32_t AlarmOutput)787 __STATIC_INLINE void LL_RTC_SetAlarmOutEvent(RTC_TypeDef *RTCx, uint32_t AlarmOutput)
788 {
789   MODIFY_REG(RTCx->CR, RTC_CR_OSEL, AlarmOutput);
790 }
791 
792 /**
793   * @brief  Get the flag to be routed to RTC_ALARM output
794   * @rmtoll CR           OSEL          LL_RTC_GetAlarmOutEvent
795   * @param  RTCx RTC Instance
796   * @retval Returned value can be one of the following values:
797   *         @arg @ref LL_RTC_ALARMOUT_DISABLE
798   *         @arg @ref LL_RTC_ALARMOUT_ALMA
799   *         @arg @ref LL_RTC_ALARMOUT_ALMB
800   *         @arg @ref LL_RTC_ALARMOUT_WAKEUP
801   */
LL_RTC_GetAlarmOutEvent(RTC_TypeDef * RTCx)802 __STATIC_INLINE uint32_t LL_RTC_GetAlarmOutEvent(RTC_TypeDef *RTCx)
803 {
804   return (uint32_t)(READ_BIT(RTCx->CR, RTC_CR_OSEL));
805 }
806 
807 /**
808   * @brief  Set RTC_ALARM output type (ALARM in push-pull or open-drain output)
809   * @note   Used only when RTC_ALARM is mapped on PC13
810   * @rmtoll TAFCR        ALARMOUTTYPE  LL_RTC_SetAlarmOutputType
811   * @param  RTCx RTC Instance
812   * @param  Output This parameter can be one of the following values:
813   *         @arg @ref LL_RTC_ALARM_OUTPUTTYPE_OPENDRAIN
814   *         @arg @ref LL_RTC_ALARM_OUTPUTTYPE_PUSHPULL
815   * @retval None
816   */
LL_RTC_SetAlarmOutputType(RTC_TypeDef * RTCx,uint32_t Output)817 __STATIC_INLINE void LL_RTC_SetAlarmOutputType(RTC_TypeDef *RTCx, uint32_t Output)
818 {
819   MODIFY_REG(RTCx->TAFCR, RTC_TAFCR_ALARMOUTTYPE, Output);
820 }
821 
822 /**
823   * @brief  Get RTC_ALARM output type (ALARM in push-pull or open-drain output)
824   * @note   used only when RTC_ALARM is mapped on PC13
825   * @rmtoll TAFCR        ALARMOUTTYPE  LL_RTC_GetAlarmOutputType
826   * @param  RTCx RTC Instance
827   * @retval Returned value can be one of the following values:
828   *         @arg @ref LL_RTC_ALARM_OUTPUTTYPE_OPENDRAIN
829   *         @arg @ref LL_RTC_ALARM_OUTPUTTYPE_PUSHPULL
830   */
LL_RTC_GetAlarmOutputType(RTC_TypeDef * RTCx)831 __STATIC_INLINE uint32_t LL_RTC_GetAlarmOutputType(RTC_TypeDef *RTCx)
832 {
833   return (uint32_t)(READ_BIT(RTCx->TAFCR, RTC_TAFCR_ALARMOUTTYPE));
834 }
835 
836 /**
837   * @brief  Enable initialization mode
838   * @note   Initialization mode is used to program time and date register (RTC_TR and RTC_DR)
839   *         and prescaler register (RTC_PRER).
840   *         Counters are stopped and start counting from the new value when INIT is reset.
841   * @rmtoll ISR          INIT          LL_RTC_EnableInitMode
842   * @param  RTCx RTC Instance
843   * @retval None
844   */
LL_RTC_EnableInitMode(RTC_TypeDef * RTCx)845 __STATIC_INLINE void LL_RTC_EnableInitMode(RTC_TypeDef *RTCx)
846 {
847   /* Set the Initialization mode */
848   WRITE_REG(RTCx->ISR, RTC_INIT_MASK);
849 }
850 
851 /**
852   * @brief  Disable initialization mode (Free running mode)
853   * @rmtoll ISR          INIT          LL_RTC_DisableInitMode
854   * @param  RTCx RTC Instance
855   * @retval None
856   */
LL_RTC_DisableInitMode(RTC_TypeDef * RTCx)857 __STATIC_INLINE void LL_RTC_DisableInitMode(RTC_TypeDef *RTCx)
858 {
859   /* Exit Initialization mode */
860   WRITE_REG(RTCx->ISR, (uint32_t)~RTC_ISR_INIT);
861 }
862 
863 /**
864   * @brief  Set Output polarity (pin is low when ALRAF/ALRBF/WUTF is asserted)
865   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
866   * @rmtoll CR           POL           LL_RTC_SetOutputPolarity
867   * @param  RTCx RTC Instance
868   * @param  Polarity This parameter can be one of the following values:
869   *         @arg @ref LL_RTC_OUTPUTPOLARITY_PIN_HIGH
870   *         @arg @ref LL_RTC_OUTPUTPOLARITY_PIN_LOW
871   * @retval None
872   */
LL_RTC_SetOutputPolarity(RTC_TypeDef * RTCx,uint32_t Polarity)873 __STATIC_INLINE void LL_RTC_SetOutputPolarity(RTC_TypeDef *RTCx, uint32_t Polarity)
874 {
875   MODIFY_REG(RTCx->CR, RTC_CR_POL, Polarity);
876 }
877 
878 /**
879   * @brief  Get Output polarity
880   * @rmtoll CR           POL           LL_RTC_GetOutputPolarity
881   * @param  RTCx RTC Instance
882   * @retval Returned value can be one of the following values:
883   *         @arg @ref LL_RTC_OUTPUTPOLARITY_PIN_HIGH
884   *         @arg @ref LL_RTC_OUTPUTPOLARITY_PIN_LOW
885   */
LL_RTC_GetOutputPolarity(RTC_TypeDef * RTCx)886 __STATIC_INLINE uint32_t LL_RTC_GetOutputPolarity(RTC_TypeDef *RTCx)
887 {
888   return (uint32_t)(READ_BIT(RTCx->CR, RTC_CR_POL));
889 }
890 
891 #if defined(RTC_CR_BYPSHAD)
892 /**
893   * @brief  Enable Bypass the shadow registers
894   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
895   * @rmtoll CR           BYPSHAD       LL_RTC_EnableShadowRegBypass
896   * @param  RTCx RTC Instance
897   * @retval None
898   */
LL_RTC_EnableShadowRegBypass(RTC_TypeDef * RTCx)899 __STATIC_INLINE void LL_RTC_EnableShadowRegBypass(RTC_TypeDef *RTCx)
900 {
901   SET_BIT(RTCx->CR, RTC_CR_BYPSHAD);
902 }
903 
904 /**
905   * @brief  Disable Bypass the shadow registers
906   * @rmtoll CR           BYPSHAD       LL_RTC_DisableShadowRegBypass
907   * @param  RTCx RTC Instance
908   * @retval None
909   */
LL_RTC_DisableShadowRegBypass(RTC_TypeDef * RTCx)910 __STATIC_INLINE void LL_RTC_DisableShadowRegBypass(RTC_TypeDef *RTCx)
911 {
912   CLEAR_BIT(RTCx->CR, RTC_CR_BYPSHAD);
913 }
914 
915 /**
916   * @brief  Check if Shadow registers bypass is enabled or not.
917   * @rmtoll CR           BYPSHAD       LL_RTC_IsShadowRegBypassEnabled
918   * @param  RTCx RTC Instance
919   * @retval State of bit (1 or 0).
920   */
LL_RTC_IsShadowRegBypassEnabled(RTC_TypeDef * RTCx)921 __STATIC_INLINE uint32_t LL_RTC_IsShadowRegBypassEnabled(RTC_TypeDef *RTCx)
922 {
923   return ((READ_BIT(RTCx->CR, RTC_CR_BYPSHAD) == (RTC_CR_BYPSHAD)) ? 1UL : 0UL);
924 }
925 #endif /* RTC_CR_BYPSHAD */
926 
927 /**
928   * @brief  Enable RTC_REFIN reference clock detection (50 or 60 Hz)
929   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
930   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
931   * @rmtoll CR           REFCKON       LL_RTC_EnableRefClock
932   * @param  RTCx RTC Instance
933   * @retval None
934   */
LL_RTC_EnableRefClock(RTC_TypeDef * RTCx)935 __STATIC_INLINE void LL_RTC_EnableRefClock(RTC_TypeDef *RTCx)
936 {
937   SET_BIT(RTCx->CR, RTC_CR_REFCKON);
938 }
939 
940 /**
941   * @brief  Disable RTC_REFIN reference clock detection (50 or 60 Hz)
942   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
943   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
944   * @rmtoll CR           REFCKON       LL_RTC_DisableRefClock
945   * @param  RTCx RTC Instance
946   * @retval None
947   */
LL_RTC_DisableRefClock(RTC_TypeDef * RTCx)948 __STATIC_INLINE void LL_RTC_DisableRefClock(RTC_TypeDef *RTCx)
949 {
950   CLEAR_BIT(RTCx->CR, RTC_CR_REFCKON);
951 }
952 
953 /**
954   * @brief  Set Asynchronous prescaler factor
955   * @rmtoll PRER         PREDIV_A      LL_RTC_SetAsynchPrescaler
956   * @param  RTCx RTC Instance
957   * @param  AsynchPrescaler Value between Min_Data = 0 and Max_Data = 0x7F
958   * @retval None
959   */
LL_RTC_SetAsynchPrescaler(RTC_TypeDef * RTCx,uint32_t AsynchPrescaler)960 __STATIC_INLINE void LL_RTC_SetAsynchPrescaler(RTC_TypeDef *RTCx, uint32_t AsynchPrescaler)
961 {
962   MODIFY_REG(RTCx->PRER, RTC_PRER_PREDIV_A, AsynchPrescaler << RTC_PRER_PREDIV_A_Pos);
963 }
964 
965 /**
966   * @brief  Set Synchronous prescaler factor
967   * @rmtoll PRER         PREDIV_S      LL_RTC_SetSynchPrescaler
968   * @param  RTCx RTC Instance
969   * @param  SynchPrescaler Value between Min_Data = 0 and Max_Data = 0x7FFF
970   * @retval None
971   */
LL_RTC_SetSynchPrescaler(RTC_TypeDef * RTCx,uint32_t SynchPrescaler)972 __STATIC_INLINE void LL_RTC_SetSynchPrescaler(RTC_TypeDef *RTCx, uint32_t SynchPrescaler)
973 {
974   MODIFY_REG(RTCx->PRER, RTC_PRER_PREDIV_S, SynchPrescaler);
975 }
976 
977 /**
978   * @brief  Get Asynchronous prescaler factor
979   * @rmtoll PRER         PREDIV_A      LL_RTC_GetAsynchPrescaler
980   * @param  RTCx RTC Instance
981   * @retval Value between Min_Data = 0 and Max_Data = 0x7F
982   */
LL_RTC_GetAsynchPrescaler(RTC_TypeDef * RTCx)983 __STATIC_INLINE uint32_t LL_RTC_GetAsynchPrescaler(RTC_TypeDef *RTCx)
984 {
985   return (uint32_t)(READ_BIT(RTCx->PRER, RTC_PRER_PREDIV_A) >> RTC_PRER_PREDIV_A_Pos);
986 }
987 
988 /**
989   * @brief  Get Synchronous prescaler factor
990   * @rmtoll PRER         PREDIV_S      LL_RTC_GetSynchPrescaler
991   * @param  RTCx RTC Instance
992   * @retval Value between Min_Data = 0 and Max_Data = 0x7FFF
993   */
LL_RTC_GetSynchPrescaler(RTC_TypeDef * RTCx)994 __STATIC_INLINE uint32_t LL_RTC_GetSynchPrescaler(RTC_TypeDef *RTCx)
995 {
996   return (uint32_t)(READ_BIT(RTCx->PRER, RTC_PRER_PREDIV_S));
997 }
998 
999 /**
1000   * @brief  Enable the write protection for RTC registers.
1001   * @rmtoll WPR          KEY           LL_RTC_EnableWriteProtection
1002   * @param  RTCx RTC Instance
1003   * @retval None
1004   */
LL_RTC_EnableWriteProtection(RTC_TypeDef * RTCx)1005 __STATIC_INLINE void LL_RTC_EnableWriteProtection(RTC_TypeDef *RTCx)
1006 {
1007   WRITE_REG(RTCx->WPR, RTC_WRITE_PROTECTION_DISABLE);
1008 }
1009 
1010 /**
1011   * @brief  Disable the write protection for RTC registers.
1012   * @rmtoll WPR          KEY           LL_RTC_DisableWriteProtection
1013   * @param  RTCx RTC Instance
1014   * @retval None
1015   */
LL_RTC_DisableWriteProtection(RTC_TypeDef * RTCx)1016 __STATIC_INLINE void LL_RTC_DisableWriteProtection(RTC_TypeDef *RTCx)
1017 {
1018   WRITE_REG(RTCx->WPR, RTC_WRITE_PROTECTION_ENABLE_1);
1019   WRITE_REG(RTCx->WPR, RTC_WRITE_PROTECTION_ENABLE_2);
1020 }
1021 
1022 /**
1023   * @}
1024   */
1025 
1026 /** @defgroup RTC_LL_EF_Time Time
1027   * @{
1028   */
1029 
1030 /**
1031   * @brief  Set time format (AM/24-hour or PM notation)
1032   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1033   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
1034   * @rmtoll TR           PM            LL_RTC_TIME_SetFormat
1035   * @param  RTCx RTC Instance
1036   * @param  TimeFormat This parameter can be one of the following values:
1037   *         @arg @ref LL_RTC_TIME_FORMAT_AM_OR_24
1038   *         @arg @ref LL_RTC_TIME_FORMAT_PM
1039   * @retval None
1040   */
LL_RTC_TIME_SetFormat(RTC_TypeDef * RTCx,uint32_t TimeFormat)1041 __STATIC_INLINE void LL_RTC_TIME_SetFormat(RTC_TypeDef *RTCx, uint32_t TimeFormat)
1042 {
1043   MODIFY_REG(RTCx->TR, RTC_TR_PM, TimeFormat);
1044 }
1045 
1046 /**
1047   * @brief  Get time format (AM or PM notation)
1048   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1049   *       before reading this bit
1050   * @note Read either RTC_SSR or RTC_TR locks the values in the higher-order calendar
1051   *       shadow registers until RTC_DR is read (LL_RTC_ReadReg(RTC, DR)).
1052   * @rmtoll TR           PM            LL_RTC_TIME_GetFormat
1053   * @param  RTCx RTC Instance
1054   * @retval Returned value can be one of the following values:
1055   *         @arg @ref LL_RTC_TIME_FORMAT_AM_OR_24
1056   *         @arg @ref LL_RTC_TIME_FORMAT_PM
1057   */
LL_RTC_TIME_GetFormat(RTC_TypeDef * RTCx)1058 __STATIC_INLINE uint32_t LL_RTC_TIME_GetFormat(RTC_TypeDef *RTCx)
1059 {
1060   return (uint32_t)(READ_BIT(RTCx->TR, RTC_TR_PM));
1061 }
1062 
1063 /**
1064   * @brief  Set Hours in BCD format
1065   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1066   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
1067   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert hour from binary to BCD format
1068   * @rmtoll TR           HT            LL_RTC_TIME_SetHour\n
1069   *         TR           HU            LL_RTC_TIME_SetHour
1070   * @param  RTCx RTC Instance
1071   * @param  Hours Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
1072   * @retval None
1073   */
LL_RTC_TIME_SetHour(RTC_TypeDef * RTCx,uint32_t Hours)1074 __STATIC_INLINE void LL_RTC_TIME_SetHour(RTC_TypeDef *RTCx, uint32_t Hours)
1075 {
1076   MODIFY_REG(RTCx->TR, (RTC_TR_HT | RTC_TR_HU),
1077              (((Hours & 0xF0U) << (RTC_TR_HT_Pos - 4U)) | ((Hours & 0x0FU) << RTC_TR_HU_Pos)));
1078 }
1079 
1080 /**
1081   * @brief  Get Hours in BCD format
1082   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1083   *       before reading this bit
1084   * @note Read either RTC_SSR or RTC_TR locks the values in the higher-order calendar
1085   *       shadow registers until RTC_DR is read (LL_RTC_ReadReg(RTC, DR)).
1086   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert hour from BCD to
1087   *       Binary format
1088   * @rmtoll TR           HT            LL_RTC_TIME_GetHour\n
1089   *         TR           HU            LL_RTC_TIME_GetHour
1090   * @param  RTCx RTC Instance
1091   * @retval Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
1092   */
LL_RTC_TIME_GetHour(RTC_TypeDef * RTCx)1093 __STATIC_INLINE uint32_t LL_RTC_TIME_GetHour(RTC_TypeDef *RTCx)
1094 {
1095   return (uint32_t)((READ_BIT(RTCx->TR, (RTC_TR_HT | RTC_TR_HU))) >> RTC_TR_HU_Pos);
1096 }
1097 
1098 /**
1099   * @brief  Set Minutes in BCD format
1100   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1101   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
1102   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Minutes from binary to BCD format
1103   * @rmtoll TR           MNT           LL_RTC_TIME_SetMinute\n
1104   *         TR           MNU           LL_RTC_TIME_SetMinute
1105   * @param  RTCx RTC Instance
1106   * @param  Minutes Value between Min_Data=0x00 and Max_Data=0x59
1107   * @retval None
1108   */
LL_RTC_TIME_SetMinute(RTC_TypeDef * RTCx,uint32_t Minutes)1109 __STATIC_INLINE void LL_RTC_TIME_SetMinute(RTC_TypeDef *RTCx, uint32_t Minutes)
1110 {
1111   MODIFY_REG(RTCx->TR, (RTC_TR_MNT | RTC_TR_MNU),
1112              (((Minutes & 0xF0U) << (RTC_TR_MNT_Pos - 4U)) | ((Minutes & 0x0FU) << RTC_TR_MNU_Pos)));
1113 }
1114 
1115 /**
1116   * @brief  Get Minutes in BCD format
1117   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1118   *       before reading this bit
1119   * @note Read either RTC_SSR or RTC_TR locks the values in the higher-order calendar
1120   *       shadow registers until RTC_DR is read (LL_RTC_ReadReg(RTC, DR)).
1121   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert minute from BCD
1122   *       to Binary format
1123   * @rmtoll TR           MNT           LL_RTC_TIME_GetMinute\n
1124   *         TR           MNU           LL_RTC_TIME_GetMinute
1125   * @param  RTCx RTC Instance
1126   * @retval Value between Min_Data=0x00 and Max_Data=0x59
1127   */
LL_RTC_TIME_GetMinute(RTC_TypeDef * RTCx)1128 __STATIC_INLINE uint32_t LL_RTC_TIME_GetMinute(RTC_TypeDef *RTCx)
1129 {
1130   return (uint32_t)(READ_BIT(RTCx->TR, (RTC_TR_MNT | RTC_TR_MNU)) >> RTC_TR_MNU_Pos);
1131 }
1132 
1133 /**
1134   * @brief  Set Seconds in BCD format
1135   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1136   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
1137   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Seconds from binary to BCD format
1138   * @rmtoll TR           ST            LL_RTC_TIME_SetSecond\n
1139   *         TR           SU            LL_RTC_TIME_SetSecond
1140   * @param  RTCx RTC Instance
1141   * @param  Seconds Value between Min_Data=0x00 and Max_Data=0x59
1142   * @retval None
1143   */
LL_RTC_TIME_SetSecond(RTC_TypeDef * RTCx,uint32_t Seconds)1144 __STATIC_INLINE void LL_RTC_TIME_SetSecond(RTC_TypeDef *RTCx, uint32_t Seconds)
1145 {
1146   MODIFY_REG(RTCx->TR, (RTC_TR_ST | RTC_TR_SU),
1147              (((Seconds & 0xF0U) << (RTC_TR_ST_Pos - 4U)) | ((Seconds & 0x0FU) << RTC_TR_SU_Pos)));
1148 }
1149 
1150 /**
1151   * @brief  Get Seconds in BCD format
1152   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1153   *       before reading this bit
1154   * @note Read either RTC_SSR or RTC_TR locks the values in the higher-order calendar
1155   *       shadow registers until RTC_DR is read (LL_RTC_ReadReg(RTC, DR)).
1156   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Seconds from BCD
1157   *       to Binary format
1158   * @rmtoll TR           ST            LL_RTC_TIME_GetSecond\n
1159   *         TR           SU            LL_RTC_TIME_GetSecond
1160   * @param  RTCx RTC Instance
1161   * @retval Value between Min_Data=0x00 and Max_Data=0x59
1162   */
LL_RTC_TIME_GetSecond(RTC_TypeDef * RTCx)1163 __STATIC_INLINE uint32_t LL_RTC_TIME_GetSecond(RTC_TypeDef *RTCx)
1164 {
1165   return (uint32_t)(READ_BIT(RTCx->TR, (RTC_TR_ST | RTC_TR_SU)) >> RTC_TR_SU_Pos);
1166 }
1167 
1168 /**
1169   * @brief  Set time (hour, minute and second) in BCD format
1170   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1171   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
1172   * @note TimeFormat and Hours should follow the same format
1173   * @rmtoll TR           PM            LL_RTC_TIME_Config\n
1174   *         TR           HT            LL_RTC_TIME_Config\n
1175   *         TR           HU            LL_RTC_TIME_Config\n
1176   *         TR           MNT           LL_RTC_TIME_Config\n
1177   *         TR           MNU           LL_RTC_TIME_Config\n
1178   *         TR           ST            LL_RTC_TIME_Config\n
1179   *         TR           SU            LL_RTC_TIME_Config
1180   * @param  RTCx RTC Instance
1181   * @param  Format12_24 This parameter can be one of the following values:
1182   *         @arg @ref LL_RTC_TIME_FORMAT_AM_OR_24
1183   *         @arg @ref LL_RTC_TIME_FORMAT_PM
1184   * @param  Hours Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
1185   * @param  Minutes Value between Min_Data=0x00 and Max_Data=0x59
1186   * @param  Seconds Value between Min_Data=0x00 and Max_Data=0x59
1187   * @retval None
1188   */
LL_RTC_TIME_Config(RTC_TypeDef * RTCx,uint32_t Format12_24,uint32_t Hours,uint32_t Minutes,uint32_t Seconds)1189 __STATIC_INLINE void LL_RTC_TIME_Config(RTC_TypeDef *RTCx, uint32_t Format12_24, uint32_t Hours, uint32_t Minutes, uint32_t Seconds)
1190 {
1191   uint32_t temp;
1192 
1193   temp = Format12_24                                                                            | \
1194          (((Hours   & 0xF0U) << (RTC_TR_HT_Pos  - 4U)) | ((Hours & 0x0FU) << RTC_TR_HU_Pos))    | \
1195          (((Minutes & 0xF0U) << (RTC_TR_MNT_Pos - 4U)) | ((Minutes & 0x0FU) << RTC_TR_MNU_Pos)) | \
1196          (((Seconds & 0xF0U) << (RTC_TR_ST_Pos  - 4U)) | ((Seconds & 0x0FU) << RTC_TR_SU_Pos));
1197   MODIFY_REG(RTCx->TR, (RTC_TR_PM | RTC_TR_HT | RTC_TR_HU | RTC_TR_MNT | RTC_TR_MNU | RTC_TR_ST | RTC_TR_SU), temp);
1198 }
1199 
1200 /**
1201   * @brief  Get time (hour, minute and second) in BCD format
1202   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1203   *       before reading this bit
1204   * @note Read either RTC_SSR or RTC_TR locks the values in the higher-order calendar
1205   *       shadow registers until RTC_DR is read (LL_RTC_ReadReg(RTC, DR)).
1206   * @note helper macros __LL_RTC_GET_HOUR, __LL_RTC_GET_MINUTE and __LL_RTC_GET_SECOND
1207   *       are available to get independently each parameter.
1208   * @rmtoll TR           HT            LL_RTC_TIME_Get\n
1209   *         TR           HU            LL_RTC_TIME_Get\n
1210   *         TR           MNT           LL_RTC_TIME_Get\n
1211   *         TR           MNU           LL_RTC_TIME_Get\n
1212   *         TR           ST            LL_RTC_TIME_Get\n
1213   *         TR           SU            LL_RTC_TIME_Get
1214   * @param  RTCx RTC Instance
1215   * @retval Combination of hours, minutes and seconds (Format: 0x00HHMMSS).
1216   */
LL_RTC_TIME_Get(RTC_TypeDef * RTCx)1217 __STATIC_INLINE uint32_t LL_RTC_TIME_Get(RTC_TypeDef *RTCx)
1218 {
1219   return (uint32_t)(READ_BIT(RTCx->TR, (RTC_TR_HT | RTC_TR_HU | RTC_TR_MNT | RTC_TR_MNU | RTC_TR_ST | RTC_TR_SU)));
1220 }
1221 
1222 /**
1223   * @brief  Memorize whether the daylight saving time change has been performed
1224   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1225   * @rmtoll CR           BKP           LL_RTC_TIME_EnableDayLightStore
1226   * @param  RTCx RTC Instance
1227   * @retval None
1228   */
LL_RTC_TIME_EnableDayLightStore(RTC_TypeDef * RTCx)1229 __STATIC_INLINE void LL_RTC_TIME_EnableDayLightStore(RTC_TypeDef *RTCx)
1230 {
1231   SET_BIT(RTCx->CR, RTC_CR_BKP);
1232 }
1233 
1234 /**
1235   * @brief  Disable memorization whether the daylight saving time change has been performed.
1236   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1237   * @rmtoll CR           BKP           LL_RTC_TIME_DisableDayLightStore
1238   * @param  RTCx RTC Instance
1239   * @retval None
1240   */
LL_RTC_TIME_DisableDayLightStore(RTC_TypeDef * RTCx)1241 __STATIC_INLINE void LL_RTC_TIME_DisableDayLightStore(RTC_TypeDef *RTCx)
1242 {
1243   CLEAR_BIT(RTCx->CR, RTC_CR_BKP);
1244 }
1245 
1246 /**
1247   * @brief  Check if RTC Day Light Saving stored operation has been enabled or not
1248   * @rmtoll CR           BKP           LL_RTC_TIME_IsDayLightStoreEnabled
1249   * @param  RTCx RTC Instance
1250   * @retval State of bit (1 or 0).
1251   */
LL_RTC_TIME_IsDayLightStoreEnabled(RTC_TypeDef * RTCx)1252 __STATIC_INLINE uint32_t LL_RTC_TIME_IsDayLightStoreEnabled(RTC_TypeDef *RTCx)
1253 {
1254   return ((READ_BIT(RTCx->CR, RTC_CR_BKP) == (RTC_CR_BKP)) ? 1UL : 0UL);
1255 }
1256 
1257 /**
1258   * @brief  Subtract 1 hour (winter time change)
1259   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1260   * @rmtoll CR           SUB1H         LL_RTC_TIME_DecHour
1261   * @param  RTCx RTC Instance
1262   * @retval None
1263   */
LL_RTC_TIME_DecHour(RTC_TypeDef * RTCx)1264 __STATIC_INLINE void LL_RTC_TIME_DecHour(RTC_TypeDef *RTCx)
1265 {
1266   SET_BIT(RTCx->CR, RTC_CR_SUB1H);
1267 }
1268 
1269 /**
1270   * @brief  Add 1 hour (summer time change)
1271   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1272   * @rmtoll CR           ADD1H         LL_RTC_TIME_IncHour
1273   * @param  RTCx RTC Instance
1274   * @retval None
1275   */
LL_RTC_TIME_IncHour(RTC_TypeDef * RTCx)1276 __STATIC_INLINE void LL_RTC_TIME_IncHour(RTC_TypeDef *RTCx)
1277 {
1278   SET_BIT(RTCx->CR, RTC_CR_ADD1H);
1279 }
1280 
1281 #if defined(RTC_SUBSECOND_SUPPORT)
1282 /**
1283   * @brief  Get subseconds value in the synchronous prescaler counter.
1284   * @note  You can use both SubSeconds value and SecondFraction (PREDIV_S through
1285   *        LL_RTC_GetSynchPrescaler function) terms returned to convert Calendar
1286   *        SubSeconds value in second fraction ratio with time unit following
1287   *        generic formula:
1288   *          ==> Seconds fraction ratio * time_unit =
1289   *                 [(SecondFraction-SubSeconds)/(SecondFraction+1)] * time_unit
1290   *        This conversion can be performed only if no shift operation is pending
1291   *        (ie. SHFP=0) when PREDIV_S >= SS.
1292   * @rmtoll SSR          SS            LL_RTC_TIME_GetSubSecond
1293   * @param  RTCx RTC Instance
1294   * @retval Subseconds value (number between 0 and 65535)
1295   */
LL_RTC_TIME_GetSubSecond(RTC_TypeDef * RTCx)1296 __STATIC_INLINE uint32_t LL_RTC_TIME_GetSubSecond(RTC_TypeDef *RTCx)
1297 {
1298   return (uint32_t)(READ_BIT(RTCx->SSR, RTC_SSR_SS));
1299 }
1300 
1301 /**
1302   * @brief  Synchronize to a remote clock with a high degree of precision.
1303   * @note   This operation effectively subtracts from (delays) or advance the clock of a fraction of a second.
1304   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1305   * @note   When REFCKON is set, firmware must not write to Shift control register.
1306   * @rmtoll SHIFTR       ADD1S         LL_RTC_TIME_Synchronize\n
1307   *         SHIFTR       SUBFS         LL_RTC_TIME_Synchronize
1308   * @param  RTCx RTC Instance
1309   * @param  ShiftSecond This parameter can be one of the following values:
1310   *         @arg @ref LL_RTC_SHIFT_SECOND_DELAY
1311   *         @arg @ref LL_RTC_SHIFT_SECOND_ADVANCE
1312   * @param  Fraction Number of Seconds Fractions (any value from 0 to 0x7FFF)
1313   * @retval None
1314   */
LL_RTC_TIME_Synchronize(RTC_TypeDef * RTCx,uint32_t ShiftSecond,uint32_t Fraction)1315 __STATIC_INLINE void LL_RTC_TIME_Synchronize(RTC_TypeDef *RTCx, uint32_t ShiftSecond, uint32_t Fraction)
1316 {
1317   WRITE_REG(RTCx->SHIFTR, ShiftSecond | Fraction);
1318 }
1319 #endif /* RTC_SUBSECOND_SUPPORT */
1320 
1321 /**
1322   * @}
1323   */
1324 
1325 /** @defgroup RTC_LL_EF_Date Date
1326   * @{
1327   */
1328 
1329 /**
1330   * @brief  Set Year in BCD format
1331   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Year from binary to BCD format
1332   * @rmtoll DR           YT            LL_RTC_DATE_SetYear\n
1333   *         DR           YU            LL_RTC_DATE_SetYear
1334   * @param  RTCx RTC Instance
1335   * @param  Year Value between Min_Data=0x00 and Max_Data=0x99
1336   * @retval None
1337   */
LL_RTC_DATE_SetYear(RTC_TypeDef * RTCx,uint32_t Year)1338 __STATIC_INLINE void LL_RTC_DATE_SetYear(RTC_TypeDef *RTCx, uint32_t Year)
1339 {
1340   MODIFY_REG(RTCx->DR, (RTC_DR_YT | RTC_DR_YU),
1341              (((Year & 0xF0U) << (RTC_DR_YT_Pos - 4U)) | ((Year & 0x0FU) << RTC_DR_YU_Pos)));
1342 }
1343 
1344 /**
1345   * @brief  Get Year in BCD format
1346   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1347   *       before reading this bit
1348   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Year from BCD to Binary format
1349   * @rmtoll DR           YT            LL_RTC_DATE_GetYear\n
1350   *         DR           YU            LL_RTC_DATE_GetYear
1351   * @param  RTCx RTC Instance
1352   * @retval Value between Min_Data=0x00 and Max_Data=0x99
1353   */
LL_RTC_DATE_GetYear(RTC_TypeDef * RTCx)1354 __STATIC_INLINE uint32_t LL_RTC_DATE_GetYear(RTC_TypeDef *RTCx)
1355 {
1356   return (uint32_t)((READ_BIT(RTCx->DR, (RTC_DR_YT | RTC_DR_YU))) >> RTC_DR_YU_Pos);
1357 }
1358 
1359 /**
1360   * @brief  Set Week day
1361   * @rmtoll DR           WDU           LL_RTC_DATE_SetWeekDay
1362   * @param  RTCx RTC Instance
1363   * @param  WeekDay This parameter can be one of the following values:
1364   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
1365   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
1366   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
1367   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
1368   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
1369   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
1370   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
1371   * @retval None
1372   */
LL_RTC_DATE_SetWeekDay(RTC_TypeDef * RTCx,uint32_t WeekDay)1373 __STATIC_INLINE void LL_RTC_DATE_SetWeekDay(RTC_TypeDef *RTCx, uint32_t WeekDay)
1374 {
1375   MODIFY_REG(RTCx->DR, RTC_DR_WDU, WeekDay << RTC_DR_WDU_Pos);
1376 }
1377 
1378 /**
1379   * @brief  Get Week day
1380   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1381   *       before reading this bit
1382   * @rmtoll DR           WDU           LL_RTC_DATE_GetWeekDay
1383   * @param  RTCx RTC Instance
1384   * @retval Returned value can be one of the following values:
1385   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
1386   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
1387   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
1388   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
1389   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
1390   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
1391   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
1392   */
LL_RTC_DATE_GetWeekDay(RTC_TypeDef * RTCx)1393 __STATIC_INLINE uint32_t LL_RTC_DATE_GetWeekDay(RTC_TypeDef *RTCx)
1394 {
1395   return (uint32_t)(READ_BIT(RTCx->DR, RTC_DR_WDU) >> RTC_DR_WDU_Pos);
1396 }
1397 
1398 /**
1399   * @brief  Set Month in BCD format
1400   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Month from binary to BCD format
1401   * @rmtoll DR           MT            LL_RTC_DATE_SetMonth\n
1402   *         DR           MU            LL_RTC_DATE_SetMonth
1403   * @param  RTCx RTC Instance
1404   * @param  Month This parameter can be one of the following values:
1405   *         @arg @ref LL_RTC_MONTH_JANUARY
1406   *         @arg @ref LL_RTC_MONTH_FEBRUARY
1407   *         @arg @ref LL_RTC_MONTH_MARCH
1408   *         @arg @ref LL_RTC_MONTH_APRIL
1409   *         @arg @ref LL_RTC_MONTH_MAY
1410   *         @arg @ref LL_RTC_MONTH_JUNE
1411   *         @arg @ref LL_RTC_MONTH_JULY
1412   *         @arg @ref LL_RTC_MONTH_AUGUST
1413   *         @arg @ref LL_RTC_MONTH_SEPTEMBER
1414   *         @arg @ref LL_RTC_MONTH_OCTOBER
1415   *         @arg @ref LL_RTC_MONTH_NOVEMBER
1416   *         @arg @ref LL_RTC_MONTH_DECEMBER
1417   * @retval None
1418   */
LL_RTC_DATE_SetMonth(RTC_TypeDef * RTCx,uint32_t Month)1419 __STATIC_INLINE void LL_RTC_DATE_SetMonth(RTC_TypeDef *RTCx, uint32_t Month)
1420 {
1421   MODIFY_REG(RTCx->DR, (RTC_DR_MT | RTC_DR_MU),
1422              (((Month & 0xF0U) << (RTC_DR_MT_Pos - 4U)) | ((Month & 0x0FU) << RTC_DR_MU_Pos)));
1423 }
1424 
1425 /**
1426   * @brief  Get Month in BCD format
1427   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1428   *       before reading this bit
1429   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Month from BCD to Binary format
1430   * @rmtoll DR           MT            LL_RTC_DATE_GetMonth\n
1431   *         DR           MU            LL_RTC_DATE_GetMonth
1432   * @param  RTCx RTC Instance
1433   * @retval Returned value can be one of the following values:
1434   *         @arg @ref LL_RTC_MONTH_JANUARY
1435   *         @arg @ref LL_RTC_MONTH_FEBRUARY
1436   *         @arg @ref LL_RTC_MONTH_MARCH
1437   *         @arg @ref LL_RTC_MONTH_APRIL
1438   *         @arg @ref LL_RTC_MONTH_MAY
1439   *         @arg @ref LL_RTC_MONTH_JUNE
1440   *         @arg @ref LL_RTC_MONTH_JULY
1441   *         @arg @ref LL_RTC_MONTH_AUGUST
1442   *         @arg @ref LL_RTC_MONTH_SEPTEMBER
1443   *         @arg @ref LL_RTC_MONTH_OCTOBER
1444   *         @arg @ref LL_RTC_MONTH_NOVEMBER
1445   *         @arg @ref LL_RTC_MONTH_DECEMBER
1446   */
LL_RTC_DATE_GetMonth(RTC_TypeDef * RTCx)1447 __STATIC_INLINE uint32_t LL_RTC_DATE_GetMonth(RTC_TypeDef *RTCx)
1448 {
1449   return (uint32_t)((READ_BIT(RTCx->DR, (RTC_DR_MT | RTC_DR_MU))) >> RTC_DR_MU_Pos);
1450 }
1451 
1452 /**
1453   * @brief  Set Day in BCD format
1454   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Day from binary to BCD format
1455   * @rmtoll DR           DT            LL_RTC_DATE_SetDay\n
1456   *         DR           DU            LL_RTC_DATE_SetDay
1457   * @param  RTCx RTC Instance
1458   * @param  Day Value between Min_Data=0x01 and Max_Data=0x31
1459   * @retval None
1460   */
LL_RTC_DATE_SetDay(RTC_TypeDef * RTCx,uint32_t Day)1461 __STATIC_INLINE void LL_RTC_DATE_SetDay(RTC_TypeDef *RTCx, uint32_t Day)
1462 {
1463   MODIFY_REG(RTCx->DR, (RTC_DR_DT | RTC_DR_DU),
1464              (((Day & 0xF0U) << (RTC_DR_DT_Pos - 4U)) | ((Day & 0x0FU) << RTC_DR_DU_Pos)));
1465 }
1466 
1467 /**
1468   * @brief  Get Day in BCD format
1469   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1470   *       before reading this bit
1471   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Day from BCD to Binary format
1472   * @rmtoll DR           DT            LL_RTC_DATE_GetDay\n
1473   *         DR           DU            LL_RTC_DATE_GetDay
1474   * @param  RTCx RTC Instance
1475   * @retval Value between Min_Data=0x01 and Max_Data=0x31
1476   */
LL_RTC_DATE_GetDay(RTC_TypeDef * RTCx)1477 __STATIC_INLINE uint32_t LL_RTC_DATE_GetDay(RTC_TypeDef *RTCx)
1478 {
1479   return (uint32_t)((READ_BIT(RTCx->DR, (RTC_DR_DT | RTC_DR_DU))) >> RTC_DR_DU_Pos);
1480 }
1481 
1482 /**
1483   * @brief  Set date (WeekDay, Day, Month and Year) in BCD format
1484   * @rmtoll DR           WDU           LL_RTC_DATE_Config\n
1485   *         DR           MT            LL_RTC_DATE_Config\n
1486   *         DR           MU            LL_RTC_DATE_Config\n
1487   *         DR           DT            LL_RTC_DATE_Config\n
1488   *         DR           DU            LL_RTC_DATE_Config\n
1489   *         DR           YT            LL_RTC_DATE_Config\n
1490   *         DR           YU            LL_RTC_DATE_Config
1491   * @param  RTCx RTC Instance
1492   * @param  WeekDay This parameter can be one of the following values:
1493   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
1494   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
1495   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
1496   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
1497   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
1498   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
1499   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
1500   * @param  Day Value between Min_Data=0x01 and Max_Data=0x31
1501   * @param  Month This parameter can be one of the following values:
1502   *         @arg @ref LL_RTC_MONTH_JANUARY
1503   *         @arg @ref LL_RTC_MONTH_FEBRUARY
1504   *         @arg @ref LL_RTC_MONTH_MARCH
1505   *         @arg @ref LL_RTC_MONTH_APRIL
1506   *         @arg @ref LL_RTC_MONTH_MAY
1507   *         @arg @ref LL_RTC_MONTH_JUNE
1508   *         @arg @ref LL_RTC_MONTH_JULY
1509   *         @arg @ref LL_RTC_MONTH_AUGUST
1510   *         @arg @ref LL_RTC_MONTH_SEPTEMBER
1511   *         @arg @ref LL_RTC_MONTH_OCTOBER
1512   *         @arg @ref LL_RTC_MONTH_NOVEMBER
1513   *         @arg @ref LL_RTC_MONTH_DECEMBER
1514   * @param  Year Value between Min_Data=0x00 and Max_Data=0x99
1515   * @retval None
1516   */
LL_RTC_DATE_Config(RTC_TypeDef * RTCx,uint32_t WeekDay,uint32_t Day,uint32_t Month,uint32_t Year)1517 __STATIC_INLINE void LL_RTC_DATE_Config(RTC_TypeDef *RTCx, uint32_t WeekDay, uint32_t Day, uint32_t Month, uint32_t Year)
1518 {
1519   uint32_t temp;
1520 
1521   temp = (  WeekDay                                                    << RTC_DR_WDU_Pos) | \
1522          (((Year  & 0xF0U) << (RTC_DR_YT_Pos - 4U)) | ((Year  & 0x0FU) << RTC_DR_YU_Pos)) | \
1523          (((Month & 0xF0U) << (RTC_DR_MT_Pos - 4U)) | ((Month & 0x0FU) << RTC_DR_MU_Pos)) | \
1524          (((Day   & 0xF0U) << (RTC_DR_DT_Pos - 4U)) | ((Day   & 0x0FU) << RTC_DR_DU_Pos));
1525 
1526   MODIFY_REG(RTCx->DR, (RTC_DR_WDU | RTC_DR_MT | RTC_DR_MU | RTC_DR_DT | RTC_DR_DU | RTC_DR_YT | RTC_DR_YU), temp);
1527 }
1528 
1529 /**
1530   * @brief  Get date (WeekDay, Day, Month and Year) in BCD format
1531   * @note if shadow mode is disabled (BYPSHAD=0), need to check if RSF flag is set
1532   *       before reading this bit
1533   * @note helper macros __LL_RTC_GET_WEEKDAY, __LL_RTC_GET_YEAR, __LL_RTC_GET_MONTH,
1534   * and __LL_RTC_GET_DAY are available to get independently each parameter.
1535   * @rmtoll DR           WDU           LL_RTC_DATE_Get\n
1536   *         DR           MT            LL_RTC_DATE_Get\n
1537   *         DR           MU            LL_RTC_DATE_Get\n
1538   *         DR           DT            LL_RTC_DATE_Get\n
1539   *         DR           DU            LL_RTC_DATE_Get\n
1540   *         DR           YT            LL_RTC_DATE_Get\n
1541   *         DR           YU            LL_RTC_DATE_Get
1542   * @param  RTCx RTC Instance
1543   * @retval Combination of WeekDay, Day, Month and Year (Format: 0xWWDDMMYY).
1544   */
LL_RTC_DATE_Get(RTC_TypeDef * RTCx)1545 __STATIC_INLINE uint32_t LL_RTC_DATE_Get(RTC_TypeDef *RTCx)
1546 {
1547   uint32_t temp;
1548 
1549   temp = READ_BIT(RTCx->DR, (RTC_DR_WDU | RTC_DR_MT | RTC_DR_MU | RTC_DR_DT | RTC_DR_DU | RTC_DR_YT | RTC_DR_YU));
1550 
1551   return (uint32_t)((((temp &              RTC_DR_WDU) >> RTC_DR_WDU_Pos) << RTC_OFFSET_WEEKDAY) | \
1552                     (((temp & (RTC_DR_DT | RTC_DR_DU)) >> RTC_DR_DU_Pos)  << RTC_OFFSET_DAY)     | \
1553                     (((temp & (RTC_DR_MT | RTC_DR_MU)) >> RTC_DR_MU_Pos)  << RTC_OFFSET_MONTH)   | \
1554                      ((temp & (RTC_DR_YT | RTC_DR_YU)) >> RTC_DR_YU_Pos));
1555 }
1556 
1557 /**
1558   * @}
1559   */
1560 
1561 /** @defgroup RTC_LL_EF_ALARMA ALARMA
1562   * @{
1563   */
1564 
1565 /**
1566   * @brief  Enable Alarm A
1567   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1568   * @rmtoll CR           ALRAE         LL_RTC_ALMA_Enable
1569   * @param  RTCx RTC Instance
1570   * @retval None
1571   */
LL_RTC_ALMA_Enable(RTC_TypeDef * RTCx)1572 __STATIC_INLINE void LL_RTC_ALMA_Enable(RTC_TypeDef *RTCx)
1573 {
1574   SET_BIT(RTCx->CR, RTC_CR_ALRAE);
1575 }
1576 
1577 /**
1578   * @brief  Disable Alarm A
1579   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1580   * @rmtoll CR           ALRAE         LL_RTC_ALMA_Disable
1581   * @param  RTCx RTC Instance
1582   * @retval None
1583   */
LL_RTC_ALMA_Disable(RTC_TypeDef * RTCx)1584 __STATIC_INLINE void LL_RTC_ALMA_Disable(RTC_TypeDef *RTCx)
1585 {
1586   CLEAR_BIT(RTCx->CR, RTC_CR_ALRAE);
1587 }
1588 
1589 /**
1590   * @brief  Specify the Alarm A masks.
1591   * @rmtoll ALRMAR       MSK4          LL_RTC_ALMA_SetMask\n
1592   *         ALRMAR       MSK3          LL_RTC_ALMA_SetMask\n
1593   *         ALRMAR       MSK2          LL_RTC_ALMA_SetMask\n
1594   *         ALRMAR       MSK1          LL_RTC_ALMA_SetMask
1595   * @param  RTCx RTC Instance
1596   * @param  Mask This parameter can be a combination of the following values:
1597   *         @arg @ref LL_RTC_ALMA_MASK_NONE
1598   *         @arg @ref LL_RTC_ALMA_MASK_DATEWEEKDAY
1599   *         @arg @ref LL_RTC_ALMA_MASK_HOURS
1600   *         @arg @ref LL_RTC_ALMA_MASK_MINUTES
1601   *         @arg @ref LL_RTC_ALMA_MASK_SECONDS
1602   *         @arg @ref LL_RTC_ALMA_MASK_ALL
1603   * @retval None
1604   */
LL_RTC_ALMA_SetMask(RTC_TypeDef * RTCx,uint32_t Mask)1605 __STATIC_INLINE void LL_RTC_ALMA_SetMask(RTC_TypeDef *RTCx, uint32_t Mask)
1606 {
1607   MODIFY_REG(RTCx->ALRMAR, RTC_ALRMAR_MSK4 | RTC_ALRMAR_MSK3 | RTC_ALRMAR_MSK2 | RTC_ALRMAR_MSK1, Mask);
1608 }
1609 
1610 /**
1611   * @brief  Get the Alarm A masks.
1612   * @rmtoll ALRMAR       MSK4          LL_RTC_ALMA_GetMask\n
1613   *         ALRMAR       MSK3          LL_RTC_ALMA_GetMask\n
1614   *         ALRMAR       MSK2          LL_RTC_ALMA_GetMask\n
1615   *         ALRMAR       MSK1          LL_RTC_ALMA_GetMask
1616   * @param  RTCx RTC Instance
1617   * @retval Returned value can be can be a combination of the following values:
1618   *         @arg @ref LL_RTC_ALMA_MASK_NONE
1619   *         @arg @ref LL_RTC_ALMA_MASK_DATEWEEKDAY
1620   *         @arg @ref LL_RTC_ALMA_MASK_HOURS
1621   *         @arg @ref LL_RTC_ALMA_MASK_MINUTES
1622   *         @arg @ref LL_RTC_ALMA_MASK_SECONDS
1623   *         @arg @ref LL_RTC_ALMA_MASK_ALL
1624   */
LL_RTC_ALMA_GetMask(RTC_TypeDef * RTCx)1625 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetMask(RTC_TypeDef *RTCx)
1626 {
1627   return (uint32_t)(READ_BIT(RTCx->ALRMAR, RTC_ALRMAR_MSK4 | RTC_ALRMAR_MSK3 | RTC_ALRMAR_MSK2 | RTC_ALRMAR_MSK1));
1628 }
1629 
1630 /**
1631   * @brief  Enable AlarmA Week day selection (DU[3:0] represents the week day. DT[1:0] is do not care)
1632   * @rmtoll ALRMAR       WDSEL         LL_RTC_ALMA_EnableWeekday
1633   * @param  RTCx RTC Instance
1634   * @retval None
1635   */
LL_RTC_ALMA_EnableWeekday(RTC_TypeDef * RTCx)1636 __STATIC_INLINE void LL_RTC_ALMA_EnableWeekday(RTC_TypeDef *RTCx)
1637 {
1638   SET_BIT(RTCx->ALRMAR, RTC_ALRMAR_WDSEL);
1639 }
1640 
1641 /**
1642   * @brief  Disable AlarmA Week day selection (DU[3:0] represents the date )
1643   * @rmtoll ALRMAR       WDSEL         LL_RTC_ALMA_DisableWeekday
1644   * @param  RTCx RTC Instance
1645   * @retval None
1646   */
LL_RTC_ALMA_DisableWeekday(RTC_TypeDef * RTCx)1647 __STATIC_INLINE void LL_RTC_ALMA_DisableWeekday(RTC_TypeDef *RTCx)
1648 {
1649   CLEAR_BIT(RTCx->ALRMAR, RTC_ALRMAR_WDSEL);
1650 }
1651 
1652 /**
1653   * @brief  Set ALARM A Day in BCD format
1654   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Day from binary to BCD format
1655   * @rmtoll ALRMAR       DT            LL_RTC_ALMA_SetDay\n
1656   *         ALRMAR       DU            LL_RTC_ALMA_SetDay
1657   * @param  RTCx RTC Instance
1658   * @param  Day Value between Min_Data=0x01 and Max_Data=0x31
1659   * @retval None
1660   */
LL_RTC_ALMA_SetDay(RTC_TypeDef * RTCx,uint32_t Day)1661 __STATIC_INLINE void LL_RTC_ALMA_SetDay(RTC_TypeDef *RTCx, uint32_t Day)
1662 {
1663   MODIFY_REG(RTCx->ALRMAR, (RTC_ALRMAR_DT | RTC_ALRMAR_DU),
1664              (((Day & 0xF0U) << (RTC_ALRMAR_DT_Pos - 4U)) | ((Day & 0x0FU) << RTC_ALRMAR_DU_Pos)));
1665 }
1666 
1667 /**
1668   * @brief  Get ALARM A Day in BCD format
1669   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Day from BCD to Binary format
1670   * @rmtoll ALRMAR       DT            LL_RTC_ALMA_GetDay\n
1671   *         ALRMAR       DU            LL_RTC_ALMA_GetDay
1672   * @param  RTCx RTC Instance
1673   * @retval Value between Min_Data=0x01 and Max_Data=0x31
1674   */
LL_RTC_ALMA_GetDay(RTC_TypeDef * RTCx)1675 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetDay(RTC_TypeDef *RTCx)
1676 {
1677   return (uint32_t)((READ_BIT(RTCx->ALRMAR, (RTC_ALRMAR_DT | RTC_ALRMAR_DU))) >> RTC_ALRMAR_DU_Pos);
1678 }
1679 
1680 /**
1681   * @brief  Set ALARM A Weekday
1682   * @rmtoll ALRMAR       DU            LL_RTC_ALMA_SetWeekDay
1683   * @param  RTCx RTC Instance
1684   * @param  WeekDay This parameter can be one of the following values:
1685   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
1686   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
1687   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
1688   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
1689   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
1690   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
1691   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
1692   * @retval None
1693   */
LL_RTC_ALMA_SetWeekDay(RTC_TypeDef * RTCx,uint32_t WeekDay)1694 __STATIC_INLINE void LL_RTC_ALMA_SetWeekDay(RTC_TypeDef *RTCx, uint32_t WeekDay)
1695 {
1696   MODIFY_REG(RTCx->ALRMAR, RTC_ALRMAR_DU, WeekDay << RTC_ALRMAR_DU_Pos);
1697 }
1698 
1699 /**
1700   * @brief  Get ALARM A Weekday
1701   * @rmtoll ALRMAR       DU            LL_RTC_ALMA_GetWeekDay
1702   * @param  RTCx RTC Instance
1703   * @retval Returned value can be one of the following values:
1704   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
1705   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
1706   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
1707   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
1708   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
1709   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
1710   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
1711   */
LL_RTC_ALMA_GetWeekDay(RTC_TypeDef * RTCx)1712 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetWeekDay(RTC_TypeDef *RTCx)
1713 {
1714   return (uint32_t)(READ_BIT(RTCx->ALRMAR, RTC_ALRMAR_DU) >> RTC_ALRMAR_DU_Pos);
1715 }
1716 
1717 /**
1718   * @brief  Set Alarm A time format (AM/24-hour or PM notation)
1719   * @rmtoll ALRMAR       PM            LL_RTC_ALMA_SetTimeFormat
1720   * @param  RTCx RTC Instance
1721   * @param  TimeFormat This parameter can be one of the following values:
1722   *         @arg @ref LL_RTC_ALMA_TIME_FORMAT_AM
1723   *         @arg @ref LL_RTC_ALMA_TIME_FORMAT_PM
1724   * @retval None
1725   */
LL_RTC_ALMA_SetTimeFormat(RTC_TypeDef * RTCx,uint32_t TimeFormat)1726 __STATIC_INLINE void LL_RTC_ALMA_SetTimeFormat(RTC_TypeDef *RTCx, uint32_t TimeFormat)
1727 {
1728   MODIFY_REG(RTCx->ALRMAR, RTC_ALRMAR_PM, TimeFormat);
1729 }
1730 
1731 /**
1732   * @brief  Get Alarm A time format (AM or PM notation)
1733   * @rmtoll ALRMAR       PM            LL_RTC_ALMA_GetTimeFormat
1734   * @param  RTCx RTC Instance
1735   * @retval Returned value can be one of the following values:
1736   *         @arg @ref LL_RTC_ALMA_TIME_FORMAT_AM
1737   *         @arg @ref LL_RTC_ALMA_TIME_FORMAT_PM
1738   */
LL_RTC_ALMA_GetTimeFormat(RTC_TypeDef * RTCx)1739 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetTimeFormat(RTC_TypeDef *RTCx)
1740 {
1741   return (uint32_t)(READ_BIT(RTCx->ALRMAR, RTC_ALRMAR_PM));
1742 }
1743 
1744 /**
1745   * @brief  Set ALARM A Hours in BCD format
1746   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Hours from binary to BCD format
1747   * @rmtoll ALRMAR       HT            LL_RTC_ALMA_SetHour\n
1748   *         ALRMAR       HU            LL_RTC_ALMA_SetHour
1749   * @param  RTCx RTC Instance
1750   * @param  Hours Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
1751   * @retval None
1752   */
LL_RTC_ALMA_SetHour(RTC_TypeDef * RTCx,uint32_t Hours)1753 __STATIC_INLINE void LL_RTC_ALMA_SetHour(RTC_TypeDef *RTCx, uint32_t Hours)
1754 {
1755   MODIFY_REG(RTCx->ALRMAR, (RTC_ALRMAR_HT | RTC_ALRMAR_HU),
1756              (((Hours & 0xF0U) << (RTC_ALRMAR_HT_Pos - 4U)) | ((Hours & 0x0FU) << RTC_ALRMAR_HU_Pos)));
1757 }
1758 
1759 /**
1760   * @brief  Get ALARM A Hours in BCD format
1761   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Hours from BCD to Binary format
1762   * @rmtoll ALRMAR       HT            LL_RTC_ALMA_GetHour\n
1763   *         ALRMAR       HU            LL_RTC_ALMA_GetHour
1764   * @param  RTCx RTC Instance
1765   * @retval Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
1766   */
LL_RTC_ALMA_GetHour(RTC_TypeDef * RTCx)1767 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetHour(RTC_TypeDef *RTCx)
1768 {
1769   return (uint32_t)((READ_BIT(RTCx->ALRMAR, (RTC_ALRMAR_HT | RTC_ALRMAR_HU))) >> RTC_ALRMAR_HU_Pos);
1770 }
1771 
1772 /**
1773   * @brief  Set ALARM A Minutes in BCD format
1774   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Minutes from binary to BCD format
1775   * @rmtoll ALRMAR       MNT           LL_RTC_ALMA_SetMinute\n
1776   *         ALRMAR       MNU           LL_RTC_ALMA_SetMinute
1777   * @param  RTCx RTC Instance
1778   * @param  Minutes Value between Min_Data=0x00 and Max_Data=0x59
1779   * @retval None
1780   */
LL_RTC_ALMA_SetMinute(RTC_TypeDef * RTCx,uint32_t Minutes)1781 __STATIC_INLINE void LL_RTC_ALMA_SetMinute(RTC_TypeDef *RTCx, uint32_t Minutes)
1782 {
1783   MODIFY_REG(RTCx->ALRMAR, (RTC_ALRMAR_MNT | RTC_ALRMAR_MNU),
1784              (((Minutes & 0xF0U) << (RTC_ALRMAR_MNT_Pos - 4U)) | ((Minutes & 0x0FU) << RTC_ALRMAR_MNU_Pos)));
1785 }
1786 
1787 /**
1788   * @brief  Get ALARM A Minutes in BCD format
1789   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Minutes from BCD to Binary format
1790   * @rmtoll ALRMAR       MNT           LL_RTC_ALMA_GetMinute\n
1791   *         ALRMAR       MNU           LL_RTC_ALMA_GetMinute
1792   * @param  RTCx RTC Instance
1793   * @retval Value between Min_Data=0x00 and Max_Data=0x59
1794   */
LL_RTC_ALMA_GetMinute(RTC_TypeDef * RTCx)1795 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetMinute(RTC_TypeDef *RTCx)
1796 {
1797   return (uint32_t)((READ_BIT(RTCx->ALRMAR, (RTC_ALRMAR_MNT | RTC_ALRMAR_MNU))) >> RTC_ALRMAR_MNU_Pos);
1798 }
1799 
1800 /**
1801   * @brief  Set ALARM A Seconds in BCD format
1802   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Seconds from binary to BCD format
1803   * @rmtoll ALRMAR       ST            LL_RTC_ALMA_SetSecond\n
1804   *         ALRMAR       SU            LL_RTC_ALMA_SetSecond
1805   * @param  RTCx RTC Instance
1806   * @param  Seconds Value between Min_Data=0x00 and Max_Data=0x59
1807   * @retval None
1808   */
LL_RTC_ALMA_SetSecond(RTC_TypeDef * RTCx,uint32_t Seconds)1809 __STATIC_INLINE void LL_RTC_ALMA_SetSecond(RTC_TypeDef *RTCx, uint32_t Seconds)
1810 {
1811   MODIFY_REG(RTCx->ALRMAR, (RTC_ALRMAR_ST | RTC_ALRMAR_SU),
1812              (((Seconds & 0xF0U) << (RTC_ALRMAR_ST_Pos - 4U)) | ((Seconds & 0x0FU) << RTC_ALRMAR_SU_Pos)));
1813 }
1814 
1815 /**
1816   * @brief  Get ALARM A Seconds in BCD format
1817   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Seconds from BCD to Binary format
1818   * @rmtoll ALRMAR       ST            LL_RTC_ALMA_GetSecond\n
1819   *         ALRMAR       SU            LL_RTC_ALMA_GetSecond
1820   * @param  RTCx RTC Instance
1821   * @retval Value between Min_Data=0x00 and Max_Data=0x59
1822   */
LL_RTC_ALMA_GetSecond(RTC_TypeDef * RTCx)1823 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetSecond(RTC_TypeDef *RTCx)
1824 {
1825   return (uint32_t)((READ_BIT(RTCx->ALRMAR, (RTC_ALRMAR_ST | RTC_ALRMAR_SU))) >> RTC_ALRMAR_SU_Pos);
1826 }
1827 
1828 /**
1829   * @brief  Set Alarm A Time (hour, minute and second) in BCD format
1830   * @rmtoll ALRMAR       PM            LL_RTC_ALMA_ConfigTime\n
1831   *         ALRMAR       HT            LL_RTC_ALMA_ConfigTime\n
1832   *         ALRMAR       HU            LL_RTC_ALMA_ConfigTime\n
1833   *         ALRMAR       MNT           LL_RTC_ALMA_ConfigTime\n
1834   *         ALRMAR       MNU           LL_RTC_ALMA_ConfigTime\n
1835   *         ALRMAR       ST            LL_RTC_ALMA_ConfigTime\n
1836   *         ALRMAR       SU            LL_RTC_ALMA_ConfigTime
1837   * @param  RTCx RTC Instance
1838   * @param  Format12_24 This parameter can be one of the following values:
1839   *         @arg @ref LL_RTC_ALMA_TIME_FORMAT_AM
1840   *         @arg @ref LL_RTC_ALMA_TIME_FORMAT_PM
1841   * @param  Hours Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
1842   * @param  Minutes Value between Min_Data=0x00 and Max_Data=0x59
1843   * @param  Seconds Value between Min_Data=0x00 and Max_Data=0x59
1844   * @retval None
1845   */
LL_RTC_ALMA_ConfigTime(RTC_TypeDef * RTCx,uint32_t Format12_24,uint32_t Hours,uint32_t Minutes,uint32_t Seconds)1846 __STATIC_INLINE void LL_RTC_ALMA_ConfigTime(RTC_TypeDef *RTCx, uint32_t Format12_24, uint32_t Hours, uint32_t Minutes, uint32_t Seconds)
1847 {
1848   uint32_t temp;
1849 
1850   temp = Format12_24                                                                                    | \
1851          (((Hours   & 0xF0U) << (RTC_ALRMAR_HT_Pos  - 4U)) | ((Hours   & 0x0FU) << RTC_ALRMAR_HU_Pos))  | \
1852          (((Minutes & 0xF0U) << (RTC_ALRMAR_MNT_Pos - 4U)) | ((Minutes & 0x0FU) << RTC_ALRMAR_MNU_Pos)) | \
1853          (((Seconds & 0xF0U) << (RTC_ALRMAR_ST_Pos  - 4U)) | ((Seconds & 0x0FU) << RTC_ALRMAR_SU_Pos));
1854 
1855   MODIFY_REG(RTCx->ALRMAR, RTC_ALRMAR_PM | RTC_ALRMAR_HT | RTC_ALRMAR_HU | RTC_ALRMAR_MNT | RTC_ALRMAR_MNU | RTC_ALRMAR_ST | RTC_ALRMAR_SU, temp);
1856 }
1857 
1858 /**
1859   * @brief  Get Alarm B Time (hour, minute and second) in BCD format
1860   * @note helper macros __LL_RTC_GET_HOUR, __LL_RTC_GET_MINUTE and __LL_RTC_GET_SECOND
1861   * are available to get independently each parameter.
1862   * @rmtoll ALRMAR       HT            LL_RTC_ALMA_GetTime\n
1863   *         ALRMAR       HU            LL_RTC_ALMA_GetTime\n
1864   *         ALRMAR       MNT           LL_RTC_ALMA_GetTime\n
1865   *         ALRMAR       MNU           LL_RTC_ALMA_GetTime\n
1866   *         ALRMAR       ST            LL_RTC_ALMA_GetTime\n
1867   *         ALRMAR       SU            LL_RTC_ALMA_GetTime
1868   * @param  RTCx RTC Instance
1869   * @retval Combination of hours, minutes and seconds.
1870   */
LL_RTC_ALMA_GetTime(RTC_TypeDef * RTCx)1871 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetTime(RTC_TypeDef *RTCx)
1872 {
1873   return (uint32_t)((LL_RTC_ALMA_GetHour(RTCx) << RTC_OFFSET_HOUR) | (LL_RTC_ALMA_GetMinute(RTCx) << RTC_OFFSET_MINUTE) | LL_RTC_ALMA_GetSecond(RTCx));
1874 }
1875 
1876 #if defined(RTC_SUBSECOND_SUPPORT)
1877 /**
1878   * @brief  Mask the most-significant bits of the subseconds field starting from
1879   *         the bit specified in parameter Mask
1880   * @note This register can be written only when ALRAE is reset in RTC_CR register,
1881   *       or in initialization mode.
1882   * @rmtoll ALRMASSR     MASKSS        LL_RTC_ALMA_SetSubSecondMask
1883   * @param  RTCx RTC Instance
1884   * @param  Mask Value between Min_Data=0x00 and Max_Data=0xF
1885   * @retval None
1886   */
LL_RTC_ALMA_SetSubSecondMask(RTC_TypeDef * RTCx,uint32_t Mask)1887 __STATIC_INLINE void LL_RTC_ALMA_SetSubSecondMask(RTC_TypeDef *RTCx, uint32_t Mask)
1888 {
1889   MODIFY_REG(RTCx->ALRMASSR, RTC_ALRMASSR_MASKSS, Mask << RTC_ALRMASSR_MASKSS_Pos);
1890 }
1891 
1892 /**
1893   * @brief  Get Alarm A subseconds mask
1894   * @rmtoll ALRMASSR     MASKSS        LL_RTC_ALMA_GetSubSecondMask
1895   * @param  RTCx RTC Instance
1896   * @retval Value between Min_Data=0x00 and Max_Data=0xF
1897   */
LL_RTC_ALMA_GetSubSecondMask(RTC_TypeDef * RTCx)1898 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetSubSecondMask(RTC_TypeDef *RTCx)
1899 {
1900   return (uint32_t)(READ_BIT(RTCx->ALRMASSR, RTC_ALRMASSR_MASKSS) >> RTC_ALRMASSR_MASKSS_Pos);
1901 }
1902 
1903 /**
1904   * @brief  Set Alarm A subseconds value
1905   * @rmtoll ALRMASSR     SS            LL_RTC_ALMA_SetSubSecond
1906   * @param  RTCx RTC Instance
1907   * @param  Subsecond Value between Min_Data=0x00 and Max_Data=0x7FFF
1908   * @retval None
1909   */
LL_RTC_ALMA_SetSubSecond(RTC_TypeDef * RTCx,uint32_t Subsecond)1910 __STATIC_INLINE void LL_RTC_ALMA_SetSubSecond(RTC_TypeDef *RTCx, uint32_t Subsecond)
1911 {
1912   MODIFY_REG(RTCx->ALRMASSR, RTC_ALRMASSR_SS, Subsecond);
1913 }
1914 
1915 /**
1916   * @brief  Get Alarm A subseconds value
1917   * @rmtoll ALRMASSR     SS            LL_RTC_ALMA_GetSubSecond
1918   * @param  RTCx RTC Instance
1919   * @retval Value between Min_Data=0x00 and Max_Data=0x7FFF
1920   */
LL_RTC_ALMA_GetSubSecond(RTC_TypeDef * RTCx)1921 __STATIC_INLINE uint32_t LL_RTC_ALMA_GetSubSecond(RTC_TypeDef *RTCx)
1922 {
1923   return (uint32_t)(READ_BIT(RTCx->ALRMASSR, RTC_ALRMASSR_SS));
1924 }
1925 #endif /* RTC_SUBSECOND_SUPPORT */
1926 
1927 /**
1928   * @}
1929   */
1930 
1931 /** @defgroup RTC_LL_EF_ALARMB ALARMB
1932   * @{
1933   */
1934 
1935 /**
1936   * @brief  Enable Alarm B
1937   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1938   * @rmtoll CR           ALRBE         LL_RTC_ALMB_Enable
1939   * @param  RTCx RTC Instance
1940   * @retval None
1941   */
LL_RTC_ALMB_Enable(RTC_TypeDef * RTCx)1942 __STATIC_INLINE void LL_RTC_ALMB_Enable(RTC_TypeDef *RTCx)
1943 {
1944   SET_BIT(RTCx->CR, RTC_CR_ALRBE);
1945 }
1946 
1947 /**
1948   * @brief  Disable Alarm B
1949   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
1950   * @rmtoll CR           ALRBE         LL_RTC_ALMB_Disable
1951   * @param  RTCx RTC Instance
1952   * @retval None
1953   */
LL_RTC_ALMB_Disable(RTC_TypeDef * RTCx)1954 __STATIC_INLINE void LL_RTC_ALMB_Disable(RTC_TypeDef *RTCx)
1955 {
1956   CLEAR_BIT(RTCx->CR, RTC_CR_ALRBE);
1957 }
1958 
1959 /**
1960   * @brief  Specify the Alarm B masks.
1961   * @rmtoll ALRMBR       MSK4          LL_RTC_ALMB_SetMask\n
1962   *         ALRMBR       MSK3          LL_RTC_ALMB_SetMask\n
1963   *         ALRMBR       MSK2          LL_RTC_ALMB_SetMask\n
1964   *         ALRMBR       MSK1          LL_RTC_ALMB_SetMask
1965   * @param  RTCx RTC Instance
1966   * @param  Mask This parameter can be a combination of the following values:
1967   *         @arg @ref LL_RTC_ALMB_MASK_NONE
1968   *         @arg @ref LL_RTC_ALMB_MASK_DATEWEEKDAY
1969   *         @arg @ref LL_RTC_ALMB_MASK_HOURS
1970   *         @arg @ref LL_RTC_ALMB_MASK_MINUTES
1971   *         @arg @ref LL_RTC_ALMB_MASK_SECONDS
1972   *         @arg @ref LL_RTC_ALMB_MASK_ALL
1973   * @retval None
1974   */
LL_RTC_ALMB_SetMask(RTC_TypeDef * RTCx,uint32_t Mask)1975 __STATIC_INLINE void LL_RTC_ALMB_SetMask(RTC_TypeDef *RTCx, uint32_t Mask)
1976 {
1977   MODIFY_REG(RTCx->ALRMBR, RTC_ALRMBR_MSK4 | RTC_ALRMBR_MSK3 | RTC_ALRMBR_MSK2 | RTC_ALRMBR_MSK1, Mask);
1978 }
1979 
1980 /**
1981   * @brief  Get the Alarm B masks.
1982   * @rmtoll ALRMBR       MSK4          LL_RTC_ALMB_GetMask\n
1983   *         ALRMBR       MSK3          LL_RTC_ALMB_GetMask\n
1984   *         ALRMBR       MSK2          LL_RTC_ALMB_GetMask\n
1985   *         ALRMBR       MSK1          LL_RTC_ALMB_GetMask
1986   * @param  RTCx RTC Instance
1987   * @retval Returned value can be can be a combination of the following values:
1988   *         @arg @ref LL_RTC_ALMB_MASK_NONE
1989   *         @arg @ref LL_RTC_ALMB_MASK_DATEWEEKDAY
1990   *         @arg @ref LL_RTC_ALMB_MASK_HOURS
1991   *         @arg @ref LL_RTC_ALMB_MASK_MINUTES
1992   *         @arg @ref LL_RTC_ALMB_MASK_SECONDS
1993   *         @arg @ref LL_RTC_ALMB_MASK_ALL
1994   */
LL_RTC_ALMB_GetMask(RTC_TypeDef * RTCx)1995 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetMask(RTC_TypeDef *RTCx)
1996 {
1997   return (uint32_t)(READ_BIT(RTCx->ALRMBR, RTC_ALRMBR_MSK4 | RTC_ALRMBR_MSK3 | RTC_ALRMBR_MSK2 | RTC_ALRMBR_MSK1));
1998 }
1999 
2000 /**
2001   * @brief  Enable AlarmB Week day selection (DU[3:0] represents the week day. DT[1:0] is do not care)
2002   * @rmtoll ALRMBR       WDSEL         LL_RTC_ALMB_EnableWeekday
2003   * @param  RTCx RTC Instance
2004   * @retval None
2005   */
LL_RTC_ALMB_EnableWeekday(RTC_TypeDef * RTCx)2006 __STATIC_INLINE void LL_RTC_ALMB_EnableWeekday(RTC_TypeDef *RTCx)
2007 {
2008   SET_BIT(RTCx->ALRMBR, RTC_ALRMBR_WDSEL);
2009 }
2010 
2011 /**
2012   * @brief  Disable AlarmB Week day selection (DU[3:0] represents the date )
2013   * @rmtoll ALRMBR       WDSEL         LL_RTC_ALMB_DisableWeekday
2014   * @param  RTCx RTC Instance
2015   * @retval None
2016   */
LL_RTC_ALMB_DisableWeekday(RTC_TypeDef * RTCx)2017 __STATIC_INLINE void LL_RTC_ALMB_DisableWeekday(RTC_TypeDef *RTCx)
2018 {
2019   CLEAR_BIT(RTCx->ALRMBR, RTC_ALRMBR_WDSEL);
2020 }
2021 
2022 /**
2023   * @brief  Set ALARM B Day in BCD format
2024   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Day from binary to BCD format
2025   * @rmtoll ALRMBR       DT            LL_RTC_ALMB_SetDay\n
2026   *         ALRMBR       DU            LL_RTC_ALMB_SetDay
2027   * @param  RTCx RTC Instance
2028   * @param  Day Value between Min_Data=0x01 and Max_Data=0x31
2029   * @retval None
2030   */
LL_RTC_ALMB_SetDay(RTC_TypeDef * RTCx,uint32_t Day)2031 __STATIC_INLINE void LL_RTC_ALMB_SetDay(RTC_TypeDef *RTCx, uint32_t Day)
2032 {
2033   MODIFY_REG(RTCx->ALRMBR, (RTC_ALRMBR_DT | RTC_ALRMBR_DU),
2034              (((Day & 0xF0U) << (RTC_ALRMBR_DT_Pos - 4U)) | ((Day & 0x0FU) << RTC_ALRMBR_DU_Pos)));
2035 }
2036 
2037 /**
2038   * @brief  Get ALARM B Day in BCD format
2039   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Day from BCD to Binary format
2040   * @rmtoll ALRMBR       DT            LL_RTC_ALMB_GetDay\n
2041   *         ALRMBR       DU            LL_RTC_ALMB_GetDay
2042   * @param  RTCx RTC Instance
2043   * @retval Value between Min_Data=0x01 and Max_Data=0x31
2044   */
LL_RTC_ALMB_GetDay(RTC_TypeDef * RTCx)2045 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetDay(RTC_TypeDef *RTCx)
2046 {
2047   return (uint32_t)((READ_BIT(RTCx->ALRMBR, (RTC_ALRMBR_DT | RTC_ALRMBR_DU))) >> RTC_ALRMBR_DU_Pos);
2048 }
2049 
2050 /**
2051   * @brief  Set ALARM B Weekday
2052   * @rmtoll ALRMBR       DU            LL_RTC_ALMB_SetWeekDay
2053   * @param  RTCx RTC Instance
2054   * @param  WeekDay This parameter can be one of the following values:
2055   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
2056   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
2057   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
2058   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
2059   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
2060   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
2061   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
2062   * @retval None
2063   */
LL_RTC_ALMB_SetWeekDay(RTC_TypeDef * RTCx,uint32_t WeekDay)2064 __STATIC_INLINE void LL_RTC_ALMB_SetWeekDay(RTC_TypeDef *RTCx, uint32_t WeekDay)
2065 {
2066   MODIFY_REG(RTCx->ALRMBR, RTC_ALRMBR_DU, WeekDay << RTC_ALRMBR_DU_Pos);
2067 }
2068 
2069 /**
2070   * @brief  Get ALARM B Weekday
2071   * @rmtoll ALRMBR       DU            LL_RTC_ALMB_GetWeekDay
2072   * @param  RTCx RTC Instance
2073   * @retval Returned value can be one of the following values:
2074   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
2075   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
2076   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
2077   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
2078   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
2079   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
2080   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
2081   */
LL_RTC_ALMB_GetWeekDay(RTC_TypeDef * RTCx)2082 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetWeekDay(RTC_TypeDef *RTCx)
2083 {
2084   return (uint32_t)(READ_BIT(RTCx->ALRMBR, RTC_ALRMBR_DU) >> RTC_ALRMBR_DU_Pos);
2085 }
2086 
2087 /**
2088   * @brief  Set ALARM B time format (AM/24-hour or PM notation)
2089   * @rmtoll ALRMBR       PM            LL_RTC_ALMB_SetTimeFormat
2090   * @param  RTCx RTC Instance
2091   * @param  TimeFormat This parameter can be one of the following values:
2092   *         @arg @ref LL_RTC_ALMB_TIME_FORMAT_AM
2093   *         @arg @ref LL_RTC_ALMB_TIME_FORMAT_PM
2094   * @retval None
2095   */
LL_RTC_ALMB_SetTimeFormat(RTC_TypeDef * RTCx,uint32_t TimeFormat)2096 __STATIC_INLINE void LL_RTC_ALMB_SetTimeFormat(RTC_TypeDef *RTCx, uint32_t TimeFormat)
2097 {
2098   MODIFY_REG(RTCx->ALRMBR, RTC_ALRMBR_PM, TimeFormat);
2099 }
2100 
2101 /**
2102   * @brief  Get ALARM B time format (AM or PM notation)
2103   * @rmtoll ALRMBR       PM            LL_RTC_ALMB_GetTimeFormat
2104   * @param  RTCx RTC Instance
2105   * @retval Returned value can be one of the following values:
2106   *         @arg @ref LL_RTC_ALMB_TIME_FORMAT_AM
2107   *         @arg @ref LL_RTC_ALMB_TIME_FORMAT_PM
2108   */
LL_RTC_ALMB_GetTimeFormat(RTC_TypeDef * RTCx)2109 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetTimeFormat(RTC_TypeDef *RTCx)
2110 {
2111   return (uint32_t)(READ_BIT(RTCx->ALRMBR, RTC_ALRMBR_PM));
2112 }
2113 
2114 /**
2115   * @brief  Set ALARM B Hours in BCD format
2116   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Hours from binary to BCD format
2117   * @rmtoll ALRMBR       HT            LL_RTC_ALMB_SetHour\n
2118   *         ALRMBR       HU            LL_RTC_ALMB_SetHour
2119   * @param  RTCx RTC Instance
2120   * @param  Hours Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
2121   * @retval None
2122   */
LL_RTC_ALMB_SetHour(RTC_TypeDef * RTCx,uint32_t Hours)2123 __STATIC_INLINE void LL_RTC_ALMB_SetHour(RTC_TypeDef *RTCx, uint32_t Hours)
2124 {
2125   MODIFY_REG(RTCx->ALRMBR, (RTC_ALRMBR_HT | RTC_ALRMBR_HU),
2126              (((Hours & 0xF0U) << (RTC_ALRMBR_HT_Pos - 4U)) | ((Hours & 0x0FU) << RTC_ALRMBR_HU_Pos)));
2127 }
2128 
2129 /**
2130   * @brief  Get ALARM B Hours in BCD format
2131   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Hours from BCD to Binary format
2132   * @rmtoll ALRMBR       HT            LL_RTC_ALMB_GetHour\n
2133   *         ALRMBR       HU            LL_RTC_ALMB_GetHour
2134   * @param  RTCx RTC Instance
2135   * @retval Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
2136   */
LL_RTC_ALMB_GetHour(RTC_TypeDef * RTCx)2137 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetHour(RTC_TypeDef *RTCx)
2138 {
2139   return (uint32_t)((READ_BIT(RTCx->ALRMBR, (RTC_ALRMBR_HT | RTC_ALRMBR_HU))) >> RTC_ALRMBR_HU_Pos);
2140 }
2141 
2142 /**
2143   * @brief  Set ALARM B Minutes in BCD format
2144   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Minutes from binary to BCD format
2145   * @rmtoll ALRMBR       MNT           LL_RTC_ALMB_SetMinute\n
2146   *         ALRMBR       MNU           LL_RTC_ALMB_SetMinute
2147   * @param  RTCx RTC Instance
2148   * @param  Minutes between Min_Data=0x00 and Max_Data=0x59
2149   * @retval None
2150   */
LL_RTC_ALMB_SetMinute(RTC_TypeDef * RTCx,uint32_t Minutes)2151 __STATIC_INLINE void LL_RTC_ALMB_SetMinute(RTC_TypeDef *RTCx, uint32_t Minutes)
2152 {
2153   MODIFY_REG(RTCx->ALRMBR, (RTC_ALRMBR_MNT | RTC_ALRMBR_MNU),
2154              (((Minutes & 0xF0U) << (RTC_ALRMBR_MNT_Pos - 4U)) | ((Minutes & 0x0FU) << RTC_ALRMBR_MNU_Pos)));
2155 }
2156 
2157 /**
2158   * @brief  Get ALARM B Minutes in BCD format
2159   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Minutes from BCD to Binary format
2160   * @rmtoll ALRMBR       MNT           LL_RTC_ALMB_GetMinute\n
2161   *         ALRMBR       MNU           LL_RTC_ALMB_GetMinute
2162   * @param  RTCx RTC Instance
2163   * @retval Value between Min_Data=0x00 and Max_Data=0x59
2164   */
LL_RTC_ALMB_GetMinute(RTC_TypeDef * RTCx)2165 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetMinute(RTC_TypeDef *RTCx)
2166 {
2167   return (uint32_t)((READ_BIT(RTCx->ALRMBR, (RTC_ALRMBR_MNT | RTC_ALRMBR_MNU))) >> RTC_ALRMBR_MNU_Pos);
2168 }
2169 
2170 /**
2171   * @brief  Set ALARM B Seconds in BCD format
2172   * @note helper macro __LL_RTC_CONVERT_BIN2BCD is available to convert Seconds from binary to BCD format
2173   * @rmtoll ALRMBR       ST            LL_RTC_ALMB_SetSecond\n
2174   *         ALRMBR       SU            LL_RTC_ALMB_SetSecond
2175   * @param  RTCx RTC Instance
2176   * @param  Seconds Value between Min_Data=0x00 and Max_Data=0x59
2177   * @retval None
2178   */
LL_RTC_ALMB_SetSecond(RTC_TypeDef * RTCx,uint32_t Seconds)2179 __STATIC_INLINE void LL_RTC_ALMB_SetSecond(RTC_TypeDef *RTCx, uint32_t Seconds)
2180 {
2181   MODIFY_REG(RTCx->ALRMBR, (RTC_ALRMBR_ST | RTC_ALRMBR_SU),
2182              (((Seconds & 0xF0U) << (RTC_ALRMBR_ST_Pos - 4U)) | ((Seconds & 0x0FU) << RTC_ALRMBR_SU_Pos)));
2183 }
2184 
2185 /**
2186   * @brief  Get ALARM B Seconds in BCD format
2187   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Seconds from BCD to Binary format
2188   * @rmtoll ALRMBR       ST            LL_RTC_ALMB_GetSecond\n
2189   *         ALRMBR       SU            LL_RTC_ALMB_GetSecond
2190   * @param  RTCx RTC Instance
2191   * @retval Value between Min_Data=0x00 and Max_Data=0x59
2192   */
LL_RTC_ALMB_GetSecond(RTC_TypeDef * RTCx)2193 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetSecond(RTC_TypeDef *RTCx)
2194 {
2195   return (uint32_t)((READ_BIT(RTCx->ALRMBR, (RTC_ALRMBR_ST | RTC_ALRMBR_SU))) >> RTC_ALRMBR_SU_Pos);
2196 }
2197 
2198 /**
2199   * @brief  Set Alarm B Time (hour, minute and second) in BCD format
2200   * @rmtoll ALRMBR       PM            LL_RTC_ALMB_ConfigTime\n
2201   *         ALRMBR       HT            LL_RTC_ALMB_ConfigTime\n
2202   *         ALRMBR       HU            LL_RTC_ALMB_ConfigTime\n
2203   *         ALRMBR       MNT           LL_RTC_ALMB_ConfigTime\n
2204   *         ALRMBR       MNU           LL_RTC_ALMB_ConfigTime\n
2205   *         ALRMBR       ST            LL_RTC_ALMB_ConfigTime\n
2206   *         ALRMBR       SU            LL_RTC_ALMB_ConfigTime
2207   * @param  RTCx RTC Instance
2208   * @param  Format12_24 This parameter can be one of the following values:
2209   *         @arg @ref LL_RTC_ALMB_TIME_FORMAT_AM
2210   *         @arg @ref LL_RTC_ALMB_TIME_FORMAT_PM
2211   * @param  Hours Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
2212   * @param  Minutes Value between Min_Data=0x00 and Max_Data=0x59
2213   * @param  Seconds Value between Min_Data=0x00 and Max_Data=0x59
2214   * @retval None
2215   */
LL_RTC_ALMB_ConfigTime(RTC_TypeDef * RTCx,uint32_t Format12_24,uint32_t Hours,uint32_t Minutes,uint32_t Seconds)2216 __STATIC_INLINE void LL_RTC_ALMB_ConfigTime(RTC_TypeDef *RTCx, uint32_t Format12_24, uint32_t Hours, uint32_t Minutes, uint32_t Seconds)
2217 {
2218   uint32_t temp;
2219 
2220   temp = Format12_24                                                                                    | \
2221          (((Hours   & 0xF0U) << (RTC_ALRMBR_HT_Pos  - 4U)) | ((Hours   & 0x0FU) << RTC_ALRMBR_HU_Pos))  | \
2222          (((Minutes & 0xF0U) << (RTC_ALRMBR_MNT_Pos - 4U)) | ((Minutes & 0x0FU) << RTC_ALRMBR_MNU_Pos)) | \
2223          (((Seconds & 0xF0U) << (RTC_ALRMBR_ST_Pos  - 4U)) | ((Seconds & 0x0FU) << RTC_ALRMBR_SU_Pos));
2224 
2225   MODIFY_REG(RTCx->ALRMBR, RTC_ALRMBR_PM | RTC_ALRMBR_HT | RTC_ALRMBR_HU | RTC_ALRMBR_MNT | RTC_ALRMBR_MNU | RTC_ALRMBR_ST | RTC_ALRMBR_SU, temp);
2226 }
2227 
2228 /**
2229   * @brief  Get Alarm B Time (hour, minute and second) in BCD format
2230   * @note helper macros __LL_RTC_GET_HOUR, __LL_RTC_GET_MINUTE and __LL_RTC_GET_SECOND
2231   * are available to get independently each parameter.
2232   * @rmtoll ALRMBR       HT            LL_RTC_ALMB_GetTime\n
2233   *         ALRMBR       HU            LL_RTC_ALMB_GetTime\n
2234   *         ALRMBR       MNT           LL_RTC_ALMB_GetTime\n
2235   *         ALRMBR       MNU           LL_RTC_ALMB_GetTime\n
2236   *         ALRMBR       ST            LL_RTC_ALMB_GetTime\n
2237   *         ALRMBR       SU            LL_RTC_ALMB_GetTime
2238   * @param  RTCx RTC Instance
2239   * @retval Combination of hours, minutes and seconds.
2240   */
LL_RTC_ALMB_GetTime(RTC_TypeDef * RTCx)2241 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetTime(RTC_TypeDef *RTCx)
2242 {
2243   return (uint32_t)((LL_RTC_ALMB_GetHour(RTCx) << RTC_OFFSET_HOUR) | (LL_RTC_ALMB_GetMinute(RTCx) << RTC_OFFSET_MINUTE) | LL_RTC_ALMB_GetSecond(RTCx));
2244 }
2245 
2246 #if defined(RTC_SUBSECOND_SUPPORT)
2247 /**
2248   * @brief  Mask the most-significant bits of the subseconds field starting from
2249   *         the bit specified in parameter Mask
2250   * @note This register can be written only when ALRBE is reset in RTC_CR register,
2251   *       or in initialization mode.
2252   * @rmtoll ALRMBSSR     MASKSS        LL_RTC_ALMB_SetSubSecondMask
2253   * @param  RTCx RTC Instance
2254   * @param  Mask Value between Min_Data=0x00 and Max_Data=0xF
2255   * @retval None
2256   */
LL_RTC_ALMB_SetSubSecondMask(RTC_TypeDef * RTCx,uint32_t Mask)2257 __STATIC_INLINE void LL_RTC_ALMB_SetSubSecondMask(RTC_TypeDef *RTCx, uint32_t Mask)
2258 {
2259   MODIFY_REG(RTCx->ALRMBSSR, RTC_ALRMBSSR_MASKSS, Mask << RTC_ALRMBSSR_MASKSS_Pos);
2260 }
2261 
2262 /**
2263   * @brief  Get Alarm B subseconds mask
2264   * @rmtoll ALRMBSSR     MASKSS        LL_RTC_ALMB_GetSubSecondMask
2265   * @param  RTCx RTC Instance
2266   * @retval Value between Min_Data=0x00 and Max_Data=0xF
2267   */
LL_RTC_ALMB_GetSubSecondMask(RTC_TypeDef * RTCx)2268 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetSubSecondMask(RTC_TypeDef *RTCx)
2269 {
2270   return (uint32_t)(READ_BIT(RTCx->ALRMBSSR, RTC_ALRMBSSR_MASKSS)  >> RTC_ALRMBSSR_MASKSS_Pos);
2271 }
2272 
2273 /**
2274   * @brief  Set Alarm B subseconds value
2275   * @rmtoll ALRMBSSR     SS            LL_RTC_ALMB_SetSubSecond
2276   * @param  RTCx RTC Instance
2277   * @param  Subsecond Value between Min_Data=0x00 and Max_Data=0x7FFF
2278   * @retval None
2279   */
LL_RTC_ALMB_SetSubSecond(RTC_TypeDef * RTCx,uint32_t Subsecond)2280 __STATIC_INLINE void LL_RTC_ALMB_SetSubSecond(RTC_TypeDef *RTCx, uint32_t Subsecond)
2281 {
2282   MODIFY_REG(RTCx->ALRMBSSR, RTC_ALRMBSSR_SS, Subsecond);
2283 }
2284 
2285 /**
2286   * @brief  Get Alarm B subseconds value
2287   * @rmtoll ALRMBSSR     SS            LL_RTC_ALMB_GetSubSecond
2288   * @param  RTCx RTC Instance
2289   * @retval Value between Min_Data=0x00 and Max_Data=0x7FFF
2290   */
LL_RTC_ALMB_GetSubSecond(RTC_TypeDef * RTCx)2291 __STATIC_INLINE uint32_t LL_RTC_ALMB_GetSubSecond(RTC_TypeDef *RTCx)
2292 {
2293   return (uint32_t)(READ_BIT(RTCx->ALRMBSSR, RTC_ALRMBSSR_SS));
2294 }
2295 #endif /* RTC_SUBSECOND_SUPPORT */
2296 
2297 /**
2298   * @}
2299   */
2300 
2301 /** @defgroup RTC_LL_EF_Timestamp Timestamp
2302   * @{
2303   */
2304 
2305 /**
2306   * @brief  Enable Timestamp
2307   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2308   * @rmtoll CR           TSE           LL_RTC_TS_Enable
2309   * @param  RTCx RTC Instance
2310   * @retval None
2311   */
LL_RTC_TS_Enable(RTC_TypeDef * RTCx)2312 __STATIC_INLINE void LL_RTC_TS_Enable(RTC_TypeDef *RTCx)
2313 {
2314   SET_BIT(RTCx->CR, RTC_CR_TSE);
2315 }
2316 
2317 /**
2318   * @brief  Disable Timestamp
2319   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2320   * @rmtoll CR           TSE           LL_RTC_TS_Disable
2321   * @param  RTCx RTC Instance
2322   * @retval None
2323   */
LL_RTC_TS_Disable(RTC_TypeDef * RTCx)2324 __STATIC_INLINE void LL_RTC_TS_Disable(RTC_TypeDef *RTCx)
2325 {
2326   CLEAR_BIT(RTCx->CR, RTC_CR_TSE);
2327 }
2328 
2329 /**
2330   * @brief  Set Time-stamp event active edge
2331   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2332   * @note TSE must be reset when TSEDGE is changed to avoid unwanted TSF setting
2333   * @rmtoll CR           TSEDGE        LL_RTC_TS_SetActiveEdge
2334   * @param  RTCx RTC Instance
2335   * @param  Edge This parameter can be one of the following values:
2336   *         @arg @ref LL_RTC_TIMESTAMP_EDGE_RISING
2337   *         @arg @ref LL_RTC_TIMESTAMP_EDGE_FALLING
2338   * @retval None
2339   */
LL_RTC_TS_SetActiveEdge(RTC_TypeDef * RTCx,uint32_t Edge)2340 __STATIC_INLINE void LL_RTC_TS_SetActiveEdge(RTC_TypeDef *RTCx, uint32_t Edge)
2341 {
2342   MODIFY_REG(RTCx->CR, RTC_CR_TSEDGE, Edge);
2343 }
2344 
2345 /**
2346   * @brief  Get Time-stamp event active edge
2347   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2348   * @rmtoll CR           TSEDGE        LL_RTC_TS_GetActiveEdge
2349   * @param  RTCx RTC Instance
2350   * @retval Returned value can be one of the following values:
2351   *         @arg @ref LL_RTC_TIMESTAMP_EDGE_RISING
2352   *         @arg @ref LL_RTC_TIMESTAMP_EDGE_FALLING
2353   */
LL_RTC_TS_GetActiveEdge(RTC_TypeDef * RTCx)2354 __STATIC_INLINE uint32_t LL_RTC_TS_GetActiveEdge(RTC_TypeDef *RTCx)
2355 {
2356   return (uint32_t)(READ_BIT(RTCx->CR, RTC_CR_TSEDGE));
2357 }
2358 
2359 /**
2360   * @brief  Get Timestamp AM/PM notation (AM or 24-hour format)
2361   * @rmtoll TSTR         PM            LL_RTC_TS_GetTimeFormat
2362   * @param  RTCx RTC Instance
2363   * @retval Returned value can be one of the following values:
2364   *         @arg @ref LL_RTC_TS_TIME_FORMAT_AM
2365   *         @arg @ref LL_RTC_TS_TIME_FORMAT_PM
2366   */
LL_RTC_TS_GetTimeFormat(RTC_TypeDef * RTCx)2367 __STATIC_INLINE uint32_t LL_RTC_TS_GetTimeFormat(RTC_TypeDef *RTCx)
2368 {
2369   return (uint32_t)(READ_BIT(RTCx->TSTR, RTC_TSTR_PM));
2370 }
2371 
2372 /**
2373   * @brief  Get Timestamp Hours in BCD format
2374   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Hours from BCD to Binary format
2375   * @rmtoll TSTR         HT            LL_RTC_TS_GetHour\n
2376   *         TSTR         HU            LL_RTC_TS_GetHour
2377   * @param  RTCx RTC Instance
2378   * @retval Value between Min_Data=0x01 and Max_Data=0x12 or between Min_Data=0x00 and Max_Data=0x23
2379   */
LL_RTC_TS_GetHour(RTC_TypeDef * RTCx)2380 __STATIC_INLINE uint32_t LL_RTC_TS_GetHour(RTC_TypeDef *RTCx)
2381 {
2382   return (uint32_t)(READ_BIT(RTCx->TSTR, RTC_TSTR_HT | RTC_TSTR_HU) >> RTC_TSTR_HU_Pos);
2383 }
2384 
2385 /**
2386   * @brief  Get Timestamp Minutes in BCD format
2387   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Minutes from BCD to Binary format
2388   * @rmtoll TSTR         MNT           LL_RTC_TS_GetMinute\n
2389   *         TSTR         MNU           LL_RTC_TS_GetMinute
2390   * @param  RTCx RTC Instance
2391   * @retval Value between Min_Data=0x00 and Max_Data=0x59
2392   */
LL_RTC_TS_GetMinute(RTC_TypeDef * RTCx)2393 __STATIC_INLINE uint32_t LL_RTC_TS_GetMinute(RTC_TypeDef *RTCx)
2394 {
2395   return (uint32_t)(READ_BIT(RTCx->TSTR, RTC_TSTR_MNT | RTC_TSTR_MNU) >> RTC_TSTR_MNU_Pos);
2396 }
2397 
2398 /**
2399   * @brief  Get Timestamp Seconds in BCD format
2400   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Seconds from BCD to Binary format
2401   * @rmtoll TSTR         ST            LL_RTC_TS_GetSecond\n
2402   *         TSTR         SU            LL_RTC_TS_GetSecond
2403   * @param  RTCx RTC Instance
2404   * @retval Value between Min_Data=0x00 and Max_Data=0x59
2405   */
LL_RTC_TS_GetSecond(RTC_TypeDef * RTCx)2406 __STATIC_INLINE uint32_t LL_RTC_TS_GetSecond(RTC_TypeDef *RTCx)
2407 {
2408   return (uint32_t)(READ_BIT(RTCx->TSTR, RTC_TSTR_ST | RTC_TSTR_SU));
2409 }
2410 
2411 /**
2412   * @brief  Get Timestamp time (hour, minute and second) in BCD format
2413   * @note helper macros __LL_RTC_GET_HOUR, __LL_RTC_GET_MINUTE and __LL_RTC_GET_SECOND
2414   * are available to get independently each parameter.
2415   * @rmtoll TSTR         HT            LL_RTC_TS_GetTime\n
2416   *         TSTR         HU            LL_RTC_TS_GetTime\n
2417   *         TSTR         MNT           LL_RTC_TS_GetTime\n
2418   *         TSTR         MNU           LL_RTC_TS_GetTime\n
2419   *         TSTR         ST            LL_RTC_TS_GetTime\n
2420   *         TSTR         SU            LL_RTC_TS_GetTime
2421   * @param  RTCx RTC Instance
2422   * @retval Combination of hours, minutes and seconds.
2423   */
LL_RTC_TS_GetTime(RTC_TypeDef * RTCx)2424 __STATIC_INLINE uint32_t LL_RTC_TS_GetTime(RTC_TypeDef *RTCx)
2425 {
2426   return (uint32_t)(READ_BIT(RTCx->TSTR,
2427                              RTC_TSTR_HT | RTC_TSTR_HU | RTC_TSTR_MNT | RTC_TSTR_MNU | RTC_TSTR_ST | RTC_TSTR_SU));
2428 }
2429 
2430 /**
2431   * @brief  Get Timestamp Week day
2432   * @rmtoll TSDR         WDU           LL_RTC_TS_GetWeekDay
2433   * @param  RTCx RTC Instance
2434   * @retval Returned value can be one of the following values:
2435   *         @arg @ref LL_RTC_WEEKDAY_MONDAY
2436   *         @arg @ref LL_RTC_WEEKDAY_TUESDAY
2437   *         @arg @ref LL_RTC_WEEKDAY_WEDNESDAY
2438   *         @arg @ref LL_RTC_WEEKDAY_THURSDAY
2439   *         @arg @ref LL_RTC_WEEKDAY_FRIDAY
2440   *         @arg @ref LL_RTC_WEEKDAY_SATURDAY
2441   *         @arg @ref LL_RTC_WEEKDAY_SUNDAY
2442   */
LL_RTC_TS_GetWeekDay(RTC_TypeDef * RTCx)2443 __STATIC_INLINE uint32_t LL_RTC_TS_GetWeekDay(RTC_TypeDef *RTCx)
2444 {
2445   return (uint32_t)(READ_BIT(RTCx->TSDR, RTC_TSDR_WDU) >> RTC_TSDR_WDU_Pos);
2446 }
2447 
2448 /**
2449   * @brief  Get Timestamp Month in BCD format
2450   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Month from BCD to Binary format
2451   * @rmtoll TSDR         MT            LL_RTC_TS_GetMonth\n
2452   *         TSDR         MU            LL_RTC_TS_GetMonth
2453   * @param  RTCx RTC Instance
2454   * @retval Returned value can be one of the following values:
2455   *         @arg @ref LL_RTC_MONTH_JANUARY
2456   *         @arg @ref LL_RTC_MONTH_FEBRUARY
2457   *         @arg @ref LL_RTC_MONTH_MARCH
2458   *         @arg @ref LL_RTC_MONTH_APRIL
2459   *         @arg @ref LL_RTC_MONTH_MAY
2460   *         @arg @ref LL_RTC_MONTH_JUNE
2461   *         @arg @ref LL_RTC_MONTH_JULY
2462   *         @arg @ref LL_RTC_MONTH_AUGUST
2463   *         @arg @ref LL_RTC_MONTH_SEPTEMBER
2464   *         @arg @ref LL_RTC_MONTH_OCTOBER
2465   *         @arg @ref LL_RTC_MONTH_NOVEMBER
2466   *         @arg @ref LL_RTC_MONTH_DECEMBER
2467   */
LL_RTC_TS_GetMonth(RTC_TypeDef * RTCx)2468 __STATIC_INLINE uint32_t LL_RTC_TS_GetMonth(RTC_TypeDef *RTCx)
2469 {
2470   return (uint32_t)(READ_BIT(RTCx->TSDR, RTC_TSDR_MT | RTC_TSDR_MU) >> RTC_TSDR_MU_Pos);
2471 }
2472 
2473 /**
2474   * @brief  Get Timestamp Day in BCD format
2475   * @note helper macro __LL_RTC_CONVERT_BCD2BIN is available to convert Day from BCD to Binary format
2476   * @rmtoll TSDR         DT            LL_RTC_TS_GetDay\n
2477   *         TSDR         DU            LL_RTC_TS_GetDay
2478   * @param  RTCx RTC Instance
2479   * @retval Value between Min_Data=0x01 and Max_Data=0x31
2480   */
LL_RTC_TS_GetDay(RTC_TypeDef * RTCx)2481 __STATIC_INLINE uint32_t LL_RTC_TS_GetDay(RTC_TypeDef *RTCx)
2482 {
2483   return (uint32_t)(READ_BIT(RTCx->TSDR, RTC_TSDR_DT | RTC_TSDR_DU));
2484 }
2485 
2486 /**
2487   * @brief  Get Timestamp date (WeekDay, Day and Month) in BCD format
2488   * @note helper macros __LL_RTC_GET_WEEKDAY, __LL_RTC_GET_MONTH,
2489   * and __LL_RTC_GET_DAY are available to get independently each parameter.
2490   * @rmtoll TSDR         WDU           LL_RTC_TS_GetDate\n
2491   *         TSDR         MT            LL_RTC_TS_GetDate\n
2492   *         TSDR         MU            LL_RTC_TS_GetDate\n
2493   *         TSDR         DT            LL_RTC_TS_GetDate\n
2494   *         TSDR         DU            LL_RTC_TS_GetDate
2495   * @param  RTCx RTC Instance
2496   * @retval Combination of Weekday, Day and Month
2497   */
LL_RTC_TS_GetDate(RTC_TypeDef * RTCx)2498 __STATIC_INLINE uint32_t LL_RTC_TS_GetDate(RTC_TypeDef *RTCx)
2499 {
2500   return (uint32_t)(READ_BIT(RTCx->TSDR, RTC_TSDR_WDU | RTC_TSDR_MT | RTC_TSDR_MU | RTC_TSDR_DT | RTC_TSDR_DU));
2501 }
2502 
2503 #if defined(RTC_SUBSECOND_SUPPORT)
2504 /**
2505   * @brief  Get time-stamp subseconds value
2506   * @rmtoll TSSSR        SS            LL_RTC_TS_GetSubSecond
2507   * @param  RTCx RTC Instance
2508   * @retval Value between Min_Data=0x00 and Max_Data=0xFFFF
2509   */
LL_RTC_TS_GetSubSecond(RTC_TypeDef * RTCx)2510 __STATIC_INLINE uint32_t LL_RTC_TS_GetSubSecond(RTC_TypeDef *RTCx)
2511 {
2512   return (uint32_t)(READ_BIT(RTCx->TSSSR, RTC_TSSSR_SS));
2513 }
2514 #endif /* RTC_SUBSECOND_SUPPORT */
2515 
2516 #if defined(RTC_TAFCR_TAMPTS)
2517 /**
2518   * @brief  Activate timestamp on tamper detection event
2519   * @rmtoll TAFCR       TAMPTS        LL_RTC_TS_EnableOnTamper
2520   * @param  RTCx RTC Instance
2521   * @retval None
2522   */
LL_RTC_TS_EnableOnTamper(RTC_TypeDef * RTCx)2523 __STATIC_INLINE void LL_RTC_TS_EnableOnTamper(RTC_TypeDef *RTCx)
2524 {
2525   SET_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPTS);
2526 }
2527 
2528 /**
2529   * @brief  Disable timestamp on tamper detection event
2530   * @rmtoll TAFCR       TAMPTS        LL_RTC_TS_DisableOnTamper
2531   * @param  RTCx RTC Instance
2532   * @retval None
2533   */
LL_RTC_TS_DisableOnTamper(RTC_TypeDef * RTCx)2534 __STATIC_INLINE void LL_RTC_TS_DisableOnTamper(RTC_TypeDef *RTCx)
2535 {
2536   CLEAR_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPTS);
2537 }
2538 #endif /* RTC_TAFCR_TAMPTS */
2539 
2540 /**
2541   * @}
2542   */
2543 
2544 /** @defgroup RTC_LL_EF_Tamper Tamper
2545   * @{
2546   */
2547 
2548 /**
2549   * @brief  Enable RTC_TAMPx input detection
2550   * @rmtoll TAFCR       TAMP1E        LL_RTC_TAMPER_Enable\n
2551   *         TAFCR       TAMP2E        LL_RTC_TAMPER_Enable\n
2552   *         TAFCR       TAMP3E        LL_RTC_TAMPER_Enable
2553   * @param  RTCx RTC Instance
2554   * @param  Tamper This parameter can be a combination of the following values:
2555   *         @arg @ref LL_RTC_TAMPER_1
2556   *         @arg @ref LL_RTC_TAMPER_2 (*)
2557   *         @arg @ref LL_RTC_TAMPER_3 (*)
2558   *
2559   *         (*) value not applicable to all devices.
2560   * @retval None
2561   */
LL_RTC_TAMPER_Enable(RTC_TypeDef * RTCx,uint32_t Tamper)2562 __STATIC_INLINE void LL_RTC_TAMPER_Enable(RTC_TypeDef *RTCx, uint32_t Tamper)
2563 {
2564   SET_BIT(RTCx->TAFCR, Tamper);
2565 }
2566 
2567 /**
2568   * @brief  Clear RTC_TAMPx input detection
2569   * @rmtoll TAFCR       TAMP1E        LL_RTC_TAMPER_Disable\n
2570   *         TAFCR       TAMP2E        LL_RTC_TAMPER_Disable\n
2571   *         TAFCR       TAMP3E        LL_RTC_TAMPER_Disable
2572   * @param  RTCx RTC Instance
2573   * @param  Tamper This parameter can be a combination of the following values:
2574   *         @arg @ref LL_RTC_TAMPER_1
2575   *         @arg @ref LL_RTC_TAMPER_2 (*)
2576   *         @arg @ref LL_RTC_TAMPER_3 (*)
2577   *
2578   *         (*) value not applicable to all devices.
2579   * @retval None
2580   */
LL_RTC_TAMPER_Disable(RTC_TypeDef * RTCx,uint32_t Tamper)2581 __STATIC_INLINE void LL_RTC_TAMPER_Disable(RTC_TypeDef *RTCx, uint32_t Tamper)
2582 {
2583   CLEAR_BIT(RTCx->TAFCR, Tamper);
2584 }
2585 
2586 #if defined(RTC_TAFCR_TAMPFLT)
2587 /**
2588   * @brief  Disable RTC_TAMPx pull-up disable (Disable precharge of RTC_TAMPx pins)
2589   * @rmtoll TAFCR       TAMPPUDIS     LL_RTC_TAMPER_DisablePullUp
2590   * @param  RTCx RTC Instance
2591   * @retval None
2592   */
LL_RTC_TAMPER_DisablePullUp(RTC_TypeDef * RTCx)2593 __STATIC_INLINE void LL_RTC_TAMPER_DisablePullUp(RTC_TypeDef *RTCx)
2594 {
2595   SET_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPPUDIS);
2596 }
2597 
2598 /**
2599   * @brief  Enable RTC_TAMPx pull-up disable ( Precharge RTC_TAMPx pins before sampling)
2600   * @rmtoll TAFCR       TAMPPUDIS     LL_RTC_TAMPER_EnablePullUp
2601   * @param  RTCx RTC Instance
2602   * @retval None
2603   */
LL_RTC_TAMPER_EnablePullUp(RTC_TypeDef * RTCx)2604 __STATIC_INLINE void LL_RTC_TAMPER_EnablePullUp(RTC_TypeDef *RTCx)
2605 {
2606   CLEAR_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPPUDIS);
2607 }
2608 
2609 /**
2610   * @brief  Set RTC_TAMPx precharge duration
2611   * @rmtoll TAFCR       TAMPPRCH      LL_RTC_TAMPER_SetPrecharge
2612   * @param  RTCx RTC Instance
2613   * @param  Duration This parameter can be one of the following values:
2614   *         @arg @ref LL_RTC_TAMPER_DURATION_1RTCCLK
2615   *         @arg @ref LL_RTC_TAMPER_DURATION_2RTCCLK
2616   *         @arg @ref LL_RTC_TAMPER_DURATION_4RTCCLK
2617   *         @arg @ref LL_RTC_TAMPER_DURATION_8RTCCLK
2618   * @retval None
2619   */
LL_RTC_TAMPER_SetPrecharge(RTC_TypeDef * RTCx,uint32_t Duration)2620 __STATIC_INLINE void LL_RTC_TAMPER_SetPrecharge(RTC_TypeDef *RTCx, uint32_t Duration)
2621 {
2622   MODIFY_REG(RTCx->TAFCR, RTC_TAFCR_TAMPPRCH, Duration);
2623 }
2624 
2625 /**
2626   * @brief  Get RTC_TAMPx precharge duration
2627   * @rmtoll TAFCR       TAMPPRCH      LL_RTC_TAMPER_GetPrecharge
2628   * @param  RTCx RTC Instance
2629   * @retval Returned value can be one of the following values:
2630   *         @arg @ref LL_RTC_TAMPER_DURATION_1RTCCLK
2631   *         @arg @ref LL_RTC_TAMPER_DURATION_2RTCCLK
2632   *         @arg @ref LL_RTC_TAMPER_DURATION_4RTCCLK
2633   *         @arg @ref LL_RTC_TAMPER_DURATION_8RTCCLK
2634   */
LL_RTC_TAMPER_GetPrecharge(RTC_TypeDef * RTCx)2635 __STATIC_INLINE uint32_t LL_RTC_TAMPER_GetPrecharge(RTC_TypeDef *RTCx)
2636 {
2637   return (uint32_t)(READ_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPPRCH));
2638 }
2639 
2640 /**
2641   * @brief  Set RTC_TAMPx filter count
2642   * @rmtoll TAFCR       TAMPFLT       LL_RTC_TAMPER_SetFilterCount
2643   * @param  RTCx RTC Instance
2644   * @param  FilterCount This parameter can be one of the following values:
2645   *         @arg @ref LL_RTC_TAMPER_FILTER_DISABLE
2646   *         @arg @ref LL_RTC_TAMPER_FILTER_2SAMPLE
2647   *         @arg @ref LL_RTC_TAMPER_FILTER_4SAMPLE
2648   *         @arg @ref LL_RTC_TAMPER_FILTER_8SAMPLE
2649   * @retval None
2650   */
LL_RTC_TAMPER_SetFilterCount(RTC_TypeDef * RTCx,uint32_t FilterCount)2651 __STATIC_INLINE void LL_RTC_TAMPER_SetFilterCount(RTC_TypeDef *RTCx, uint32_t FilterCount)
2652 {
2653   MODIFY_REG(RTCx->TAFCR, RTC_TAFCR_TAMPFLT, FilterCount);
2654 }
2655 
2656 /**
2657   * @brief  Get RTC_TAMPx filter count
2658   * @rmtoll TAFCR       TAMPFLT       LL_RTC_TAMPER_GetFilterCount
2659   * @param  RTCx RTC Instance
2660   * @retval Returned value can be one of the following values:
2661   *         @arg @ref LL_RTC_TAMPER_FILTER_DISABLE
2662   *         @arg @ref LL_RTC_TAMPER_FILTER_2SAMPLE
2663   *         @arg @ref LL_RTC_TAMPER_FILTER_4SAMPLE
2664   *         @arg @ref LL_RTC_TAMPER_FILTER_8SAMPLE
2665   */
LL_RTC_TAMPER_GetFilterCount(RTC_TypeDef * RTCx)2666 __STATIC_INLINE uint32_t LL_RTC_TAMPER_GetFilterCount(RTC_TypeDef *RTCx)
2667 {
2668   return (uint32_t)(READ_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPFLT));
2669 }
2670 
2671 /**
2672   * @brief  Set Tamper sampling frequency
2673   * @rmtoll TAFCR       TAMPFREQ      LL_RTC_TAMPER_SetSamplingFreq
2674   * @param  RTCx RTC Instance
2675   * @param  SamplingFreq This parameter can be one of the following values:
2676   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_32768
2677   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_16384
2678   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_8192
2679   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_4096
2680   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_2048
2681   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_1024
2682   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_512
2683   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_256
2684   * @retval None
2685   */
LL_RTC_TAMPER_SetSamplingFreq(RTC_TypeDef * RTCx,uint32_t SamplingFreq)2686 __STATIC_INLINE void LL_RTC_TAMPER_SetSamplingFreq(RTC_TypeDef *RTCx, uint32_t SamplingFreq)
2687 {
2688   MODIFY_REG(RTCx->TAFCR, RTC_TAFCR_TAMPFREQ, SamplingFreq);
2689 }
2690 
2691 /**
2692   * @brief  Get Tamper sampling frequency
2693   * @rmtoll TAFCR       TAMPFREQ      LL_RTC_TAMPER_GetSamplingFreq
2694   * @param  RTCx RTC Instance
2695   * @retval Returned value can be one of the following values:
2696   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_32768
2697   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_16384
2698   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_8192
2699   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_4096
2700   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_2048
2701   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_1024
2702   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_512
2703   *         @arg @ref LL_RTC_TAMPER_SAMPLFREQDIV_256
2704   */
LL_RTC_TAMPER_GetSamplingFreq(RTC_TypeDef * RTCx)2705 __STATIC_INLINE uint32_t LL_RTC_TAMPER_GetSamplingFreq(RTC_TypeDef *RTCx)
2706 {
2707   return (uint32_t)(READ_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPFREQ));
2708 }
2709 #endif /* RTC_TAFCR_TAMPFLT */
2710 
2711 /**
2712   * @brief  Enable Active level for Tamper input
2713   * @rmtoll TAFCR       TAMP1TRG      LL_RTC_TAMPER_EnableActiveLevel\n
2714   *         TAFCR       TAMP2TRG      LL_RTC_TAMPER_EnableActiveLevel\n
2715   *         TAFCR       TAMP3TRG      LL_RTC_TAMPER_EnableActiveLevel
2716   * @param  RTCx RTC Instance
2717   * @param  Tamper This parameter can be a combination of the following values:
2718   *         @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_TAMP1
2719   *         @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_TAMP2 (*)
2720   *         @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_TAMP3 (*)
2721   *
2722   *         (*) value not applicable to all devices.
2723   * @retval None
2724   */
LL_RTC_TAMPER_EnableActiveLevel(RTC_TypeDef * RTCx,uint32_t Tamper)2725 __STATIC_INLINE void LL_RTC_TAMPER_EnableActiveLevel(RTC_TypeDef *RTCx, uint32_t Tamper)
2726 {
2727   SET_BIT(RTCx->TAFCR, Tamper);
2728 }
2729 
2730 /**
2731   * @brief  Disable Active level for Tamper input
2732   * @rmtoll TAFCR       TAMP1TRG      LL_RTC_TAMPER_DisableActiveLevel\n
2733   *         TAFCR       TAMP2TRG      LL_RTC_TAMPER_DisableActiveLevel\n
2734   *         TAFCR       TAMP3TRG      LL_RTC_TAMPER_DisableActiveLevel
2735   * @param  RTCx RTC Instance
2736   * @param  Tamper This parameter can be a combination of the following values:
2737   *         @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_TAMP1
2738   *         @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_TAMP2 (*)
2739   *         @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_TAMP3 (*)
2740   *
2741   *         (*) value not applicable to all devices.
2742   * @retval None
2743   */
LL_RTC_TAMPER_DisableActiveLevel(RTC_TypeDef * RTCx,uint32_t Tamper)2744 __STATIC_INLINE void LL_RTC_TAMPER_DisableActiveLevel(RTC_TypeDef *RTCx, uint32_t Tamper)
2745 {
2746   CLEAR_BIT(RTCx->TAFCR, Tamper);
2747 }
2748 
2749 /**
2750   * @}
2751   */
2752 
2753 /** @defgroup RTC_LL_EF_Wakeup Wakeup
2754   * @{
2755   */
2756 
2757 /**
2758   * @brief  Enable Wakeup timer
2759   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2760   * @rmtoll CR           WUTE          LL_RTC_WAKEUP_Enable
2761   * @param  RTCx RTC Instance
2762   * @retval None
2763   */
LL_RTC_WAKEUP_Enable(RTC_TypeDef * RTCx)2764 __STATIC_INLINE void LL_RTC_WAKEUP_Enable(RTC_TypeDef *RTCx)
2765 {
2766   SET_BIT(RTCx->CR, RTC_CR_WUTE);
2767 }
2768 
2769 /**
2770   * @brief  Disable Wakeup timer
2771   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2772   * @rmtoll CR           WUTE          LL_RTC_WAKEUP_Disable
2773   * @param  RTCx RTC Instance
2774   * @retval None
2775   */
LL_RTC_WAKEUP_Disable(RTC_TypeDef * RTCx)2776 __STATIC_INLINE void LL_RTC_WAKEUP_Disable(RTC_TypeDef *RTCx)
2777 {
2778   CLEAR_BIT(RTCx->CR, RTC_CR_WUTE);
2779 }
2780 
2781 /**
2782   * @brief  Check if Wakeup timer is enabled or not
2783   * @rmtoll CR           WUTE          LL_RTC_WAKEUP_IsEnabled
2784   * @param  RTCx RTC Instance
2785   * @retval State of bit (1 or 0).
2786   */
LL_RTC_WAKEUP_IsEnabled(RTC_TypeDef * RTCx)2787 __STATIC_INLINE uint32_t LL_RTC_WAKEUP_IsEnabled(RTC_TypeDef *RTCx)
2788 {
2789   return ((READ_BIT(RTCx->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) ? 1UL : 0UL);
2790 }
2791 
2792 /**
2793   * @brief  Select Wakeup clock
2794   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2795   * @note   Bit can be written only when RTC_CR WUTE bit = 0 and RTC_ISR WUTWF bit = 1
2796   * @rmtoll CR           WUCKSEL       LL_RTC_WAKEUP_SetClock
2797   * @param  RTCx RTC Instance
2798   * @param  WakeupClock This parameter can be one of the following values:
2799   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_16
2800   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_8
2801   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_4
2802   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_2
2803   *         @arg @ref LL_RTC_WAKEUPCLOCK_CKSPRE
2804   *         @arg @ref LL_RTC_WAKEUPCLOCK_CKSPRE_WUT
2805   * @retval None
2806   */
LL_RTC_WAKEUP_SetClock(RTC_TypeDef * RTCx,uint32_t WakeupClock)2807 __STATIC_INLINE void LL_RTC_WAKEUP_SetClock(RTC_TypeDef *RTCx, uint32_t WakeupClock)
2808 {
2809   MODIFY_REG(RTCx->CR, RTC_CR_WUCKSEL, WakeupClock);
2810 }
2811 
2812 /**
2813   * @brief  Get Wakeup clock
2814   * @rmtoll CR           WUCKSEL       LL_RTC_WAKEUP_GetClock
2815   * @param  RTCx RTC Instance
2816   * @retval Returned value can be one of the following values:
2817   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_16
2818   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_8
2819   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_4
2820   *         @arg @ref LL_RTC_WAKEUPCLOCK_DIV_2
2821   *         @arg @ref LL_RTC_WAKEUPCLOCK_CKSPRE
2822   *         @arg @ref LL_RTC_WAKEUPCLOCK_CKSPRE_WUT
2823   */
LL_RTC_WAKEUP_GetClock(RTC_TypeDef * RTCx)2824 __STATIC_INLINE uint32_t LL_RTC_WAKEUP_GetClock(RTC_TypeDef *RTCx)
2825 {
2826   return (uint32_t)(READ_BIT(RTCx->CR, RTC_CR_WUCKSEL));
2827 }
2828 
2829 /**
2830   * @brief  Set Wakeup auto-reload value
2831   * @note   Bit can be written only when WUTWF is set to 1 in RTC_ISR
2832   * @rmtoll WUTR         WUT           LL_RTC_WAKEUP_SetAutoReload
2833   * @param  RTCx RTC Instance
2834   * @param  Value Value between Min_Data=0x00 and Max_Data=0xFFFF
2835   * @retval None
2836   */
LL_RTC_WAKEUP_SetAutoReload(RTC_TypeDef * RTCx,uint32_t Value)2837 __STATIC_INLINE void LL_RTC_WAKEUP_SetAutoReload(RTC_TypeDef *RTCx, uint32_t Value)
2838 {
2839   MODIFY_REG(RTCx->WUTR, RTC_WUTR_WUT, Value);
2840 }
2841 
2842 /**
2843   * @brief  Get Wakeup auto-reload value
2844   * @rmtoll WUTR         WUT           LL_RTC_WAKEUP_GetAutoReload
2845   * @param  RTCx RTC Instance
2846   * @retval Value between Min_Data=0x00 and Max_Data=0xFFFF
2847   */
LL_RTC_WAKEUP_GetAutoReload(RTC_TypeDef * RTCx)2848 __STATIC_INLINE uint32_t LL_RTC_WAKEUP_GetAutoReload(RTC_TypeDef *RTCx)
2849 {
2850   return (uint32_t)(READ_BIT(RTCx->WUTR, RTC_WUTR_WUT));
2851 }
2852 
2853 /**
2854   * @}
2855   */
2856 
2857 /** @defgroup RTC_LL_EF_Backup_Registers Backup_Registers
2858   * @{
2859   */
2860 
2861 /**
2862   * @brief  Writes a data in a specified RTC Backup data register.
2863   * @rmtoll BKPxR        BKP           LL_RTC_BAK_SetRegister
2864   * @param  RTCx RTC Instance
2865   * @param  BackupRegister This parameter can be one of the following values:
2866   *         @arg @ref LL_RTC_BKP_DR0
2867   *         @arg @ref LL_RTC_BKP_DR1
2868   *         @arg @ref LL_RTC_BKP_DR2
2869   *         @arg @ref LL_RTC_BKP_DR3
2870   *         @arg @ref LL_RTC_BKP_DR4
2871   *         @arg @ref LL_RTC_BKP_DR5 (*)
2872   *         @arg @ref LL_RTC_BKP_DR6 (*)
2873   *         @arg @ref LL_RTC_BKP_DR7 (*)
2874   *         @arg @ref LL_RTC_BKP_DR8 (*)
2875   *         @arg @ref LL_RTC_BKP_DR9 (*)
2876   *         @arg @ref LL_RTC_BKP_DR10 (*)
2877   *         @arg @ref LL_RTC_BKP_DR11 (*)
2878   *         @arg @ref LL_RTC_BKP_DR12 (*)
2879   *         @arg @ref LL_RTC_BKP_DR13 (*)
2880   *         @arg @ref LL_RTC_BKP_DR14 (*)
2881   *         @arg @ref LL_RTC_BKP_DR15 (*)
2882   *         @arg @ref LL_RTC_BKP_DR16 (*)
2883   *         @arg @ref LL_RTC_BKP_DR17 (*)
2884   *         @arg @ref LL_RTC_BKP_DR18 (*)
2885   *         @arg @ref LL_RTC_BKP_DR19 (*)
2886   *         @arg @ref LL_RTC_BKP_DR20 (*)
2887   *         @arg @ref LL_RTC_BKP_DR21 (*)
2888   *         @arg @ref LL_RTC_BKP_DR22 (*)
2889   *         @arg @ref LL_RTC_BKP_DR23 (*)
2890   *         @arg @ref LL_RTC_BKP_DR24 (*)
2891   *         @arg @ref LL_RTC_BKP_DR25 (*)
2892   *         @arg @ref LL_RTC_BKP_DR26 (*)
2893   *         @arg @ref LL_RTC_BKP_DR27 (*)
2894   *         @arg @ref LL_RTC_BKP_DR28 (*)
2895   *         @arg @ref LL_RTC_BKP_DR29 (*)
2896   *         @arg @ref LL_RTC_BKP_DR30 (*)
2897   *         @arg @ref LL_RTC_BKP_DR31 (*)
2898   *
2899   *         (*) value not applicable to all devices.
2900   * @param  Data Value between Min_Data=0x00 and Max_Data=0xFFFFFFFF
2901   * @retval None
2902   */
LL_RTC_BAK_SetRegister(RTC_TypeDef * RTCx,uint32_t BackupRegister,uint32_t Data)2903 __STATIC_INLINE void LL_RTC_BAK_SetRegister(RTC_TypeDef *RTCx, uint32_t BackupRegister, uint32_t Data)
2904 {
2905   uint32_t temp;
2906 
2907   temp = (uint32_t)(&(RTCx->BKP0R));
2908   temp += (BackupRegister * 4U);
2909 
2910   /* Write the specified register */
2911   *(__IO uint32_t *)temp = (uint32_t)Data;
2912 }
2913 
2914 /**
2915   * @brief  Reads data from the specified RTC Backup data Register.
2916   * @rmtoll BKPxR        BKP           LL_RTC_BAK_GetRegister
2917   * @param  RTCx RTC Instance
2918   * @param  BackupRegister This parameter can be one of the following values:
2919   *         @arg @ref LL_RTC_BKP_DR0
2920   *         @arg @ref LL_RTC_BKP_DR1
2921   *         @arg @ref LL_RTC_BKP_DR2
2922   *         @arg @ref LL_RTC_BKP_DR3
2923   *         @arg @ref LL_RTC_BKP_DR4
2924   *         @arg @ref LL_RTC_BKP_DR5 (*)
2925   *         @arg @ref LL_RTC_BKP_DR6 (*)
2926   *         @arg @ref LL_RTC_BKP_DR7 (*)
2927   *         @arg @ref LL_RTC_BKP_DR8 (*)
2928   *         @arg @ref LL_RTC_BKP_DR9 (*)
2929   *         @arg @ref LL_RTC_BKP_DR10 (*)
2930   *         @arg @ref LL_RTC_BKP_DR11 (*)
2931   *         @arg @ref LL_RTC_BKP_DR12 (*)
2932   *         @arg @ref LL_RTC_BKP_DR13 (*)
2933   *         @arg @ref LL_RTC_BKP_DR14 (*)
2934   *         @arg @ref LL_RTC_BKP_DR15 (*)
2935   *         @arg @ref LL_RTC_BKP_DR16 (*)
2936   *         @arg @ref LL_RTC_BKP_DR17 (*)
2937   *         @arg @ref LL_RTC_BKP_DR18 (*)
2938   *         @arg @ref LL_RTC_BKP_DR19 (*)
2939   *         @arg @ref LL_RTC_BKP_DR20 (*)
2940   *         @arg @ref LL_RTC_BKP_DR21 (*)
2941   *         @arg @ref LL_RTC_BKP_DR22 (*)
2942   *         @arg @ref LL_RTC_BKP_DR23 (*)
2943   *         @arg @ref LL_RTC_BKP_DR24 (*)
2944   *         @arg @ref LL_RTC_BKP_DR25 (*)
2945   *         @arg @ref LL_RTC_BKP_DR26 (*)
2946   *         @arg @ref LL_RTC_BKP_DR27 (*)
2947   *         @arg @ref LL_RTC_BKP_DR28 (*)
2948   *         @arg @ref LL_RTC_BKP_DR29 (*)
2949   *         @arg @ref LL_RTC_BKP_DR30 (*)
2950   *         @arg @ref LL_RTC_BKP_DR31 (*)
2951   *
2952   *         (*) value not applicable to all devices.
2953   * @retval Value between Min_Data=0x00 and Max_Data=0xFFFFFFFF
2954   */
LL_RTC_BAK_GetRegister(RTC_TypeDef * RTCx,uint32_t BackupRegister)2955 __STATIC_INLINE uint32_t LL_RTC_BAK_GetRegister(RTC_TypeDef *RTCx, uint32_t BackupRegister)
2956 {
2957   uint32_t temp;
2958 
2959   temp = (uint32_t)(&(RTCx->BKP0R));
2960   temp += (BackupRegister * 4U);
2961 
2962   /* Read the specified register */
2963   return (*(__IO uint32_t *)temp);
2964 }
2965 
2966 /**
2967   * @}
2968   */
2969 
2970 /** @defgroup RTC_LL_EF_Calibration Calibration
2971   * @{
2972   */
2973 
2974 /**
2975   * @brief  Set Calibration output frequency (1 Hz or 512 Hz)
2976   * @note Bits are write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
2977   * @rmtoll CR           COE           LL_RTC_CAL_SetOutputFreq\n
2978   *         CR           COSEL         LL_RTC_CAL_SetOutputFreq
2979   * @param  RTCx RTC Instance
2980   * @param  Frequency This parameter can be one of the following values:
2981   *         @arg @ref LL_RTC_CALIB_OUTPUT_NONE
2982   *         @arg @ref LL_RTC_CALIB_OUTPUT_1HZ (*)
2983   *         @arg @ref LL_RTC_CALIB_OUTPUT_512HZ
2984   *
2985   *         (*) value not applicable to all devices.
2986   * @retval None
2987   */
LL_RTC_CAL_SetOutputFreq(RTC_TypeDef * RTCx,uint32_t Frequency)2988 __STATIC_INLINE void LL_RTC_CAL_SetOutputFreq(RTC_TypeDef *RTCx, uint32_t Frequency)
2989 {
2990 #if defined(RTC_CR_COSEL)
2991   MODIFY_REG(RTCx->CR, RTC_CR_COE | RTC_CR_COSEL, Frequency);
2992 #else /* RTC_CR_COSEL */
2993   MODIFY_REG(RTCx->CR, RTC_CR_COE, Frequency);
2994 #endif /* RTC_CR_COSEL */
2995 }
2996 
2997 /**
2998   * @brief  Get Calibration output frequency (1 Hz or 512 Hz)
2999   * @rmtoll CR           COE           LL_RTC_CAL_GetOutputFreq\n
3000   *         CR           COSEL         LL_RTC_CAL_GetOutputFreq
3001   * @param  RTCx RTC Instance
3002   * @retval Returned value can be one of the following values:
3003   *         @arg @ref LL_RTC_CALIB_OUTPUT_NONE
3004   *         @arg @ref LL_RTC_CALIB_OUTPUT_1HZ (*)
3005   *         @arg @ref LL_RTC_CALIB_OUTPUT_512HZ
3006   *
3007   *         (*) value not applicable to all devices.
3008   */
LL_RTC_CAL_GetOutputFreq(RTC_TypeDef * RTCx)3009 __STATIC_INLINE uint32_t LL_RTC_CAL_GetOutputFreq(RTC_TypeDef *RTCx)
3010 {
3011 #if defined(RTC_CR_COSEL)
3012   return (uint32_t)(READ_BIT(RTCx->CR, RTC_CR_COE | RTC_CR_COSEL));
3013 #else /* RTC_CR_COSEL */
3014   return (uint32_t)(READ_BIT(RTCx->CR, RTC_CR_COE));
3015 #endif /* RTC_CR_COSEL */
3016 }
3017 
3018 /**
3019   * @brief  Enable Coarse digital calibration
3020   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3021   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
3022   * @rmtoll CR           DCE           LL_RTC_CAL_EnableCoarseDigital
3023   * @param  RTCx RTC Instance
3024   * @retval None
3025   */
LL_RTC_CAL_EnableCoarseDigital(RTC_TypeDef * RTCx)3026 __STATIC_INLINE void LL_RTC_CAL_EnableCoarseDigital(RTC_TypeDef *RTCx)
3027 {
3028   SET_BIT(RTCx->CR, RTC_CR_DCE);
3029 }
3030 
3031 /**
3032   * @brief  Disable Coarse digital calibration
3033   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3034   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
3035   * @rmtoll CR           DCE           LL_RTC_CAL_DisableCoarseDigital
3036   * @param  RTCx RTC Instance
3037   * @retval None
3038   */
LL_RTC_CAL_DisableCoarseDigital(RTC_TypeDef * RTCx)3039 __STATIC_INLINE void LL_RTC_CAL_DisableCoarseDigital(RTC_TypeDef  *RTCx)
3040 {
3041   CLEAR_BIT(RTCx->CR, RTC_CR_DCE);
3042 }
3043 
3044 /**
3045   * @brief  Set the coarse digital calibration
3046   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3047   * @note   It can be written in initialization mode only (@ref LL_RTC_EnableInitMode function)
3048   * @rmtoll CALIBR       DCS           LL_RTC_CAL_ConfigCoarseDigital\n
3049   *         CALIBR       DC            LL_RTC_CAL_ConfigCoarseDigital
3050   * @param  RTCx RTC Instance
3051   * @param  Sign This parameter can be one of the following values:
3052   *         @arg @ref LL_RTC_CALIB_SIGN_POSITIVE
3053   *         @arg @ref LL_RTC_CALIB_SIGN_NEGATIVE
3054   * @param  Value value of coarse calibration expressed in ppm (coded on 5 bits)
3055   * @note   This Calibration value should be between 0 and 63 when using negative sign with a 2-ppm step.
3056   * @note   This Calibration value should be between 0 and 126 when using positive sign with a 4-ppm step.
3057   * @retval None
3058   */
LL_RTC_CAL_ConfigCoarseDigital(RTC_TypeDef * RTCx,uint32_t Sign,uint32_t Value)3059 __STATIC_INLINE void LL_RTC_CAL_ConfigCoarseDigital(RTC_TypeDef *RTCx, uint32_t Sign, uint32_t Value)
3060 {
3061   MODIFY_REG(RTCx->CALIBR, RTC_CALIBR_DCS | RTC_CALIBR_DC, Sign | Value);
3062 }
3063 
3064 /**
3065   * @brief  Get the coarse digital calibration value
3066   * @rmtoll CALIBR       DC            LL_RTC_CAL_GetCoarseDigitalValue
3067   * @param  RTCx RTC Instance
3068   * @retval value of coarse calibration expressed in ppm (coded on 5 bits)
3069   */
LL_RTC_CAL_GetCoarseDigitalValue(RTC_TypeDef * RTCx)3070 __STATIC_INLINE uint32_t LL_RTC_CAL_GetCoarseDigitalValue(RTC_TypeDef *RTCx)
3071 {
3072   return (uint32_t)(READ_BIT(RTCx->CALIBR, RTC_CALIBR_DC));
3073 }
3074 
3075 /**
3076   * @brief  Get the coarse digital calibration sign
3077   * @rmtoll CALIBR       DCS           LL_RTC_CAL_GetCoarseDigitalSign
3078   * @param  RTCx RTC Instance
3079   * @retval Returned value can be one of the following values:
3080   *         @arg @ref LL_RTC_CALIB_SIGN_POSITIVE
3081   *         @arg @ref LL_RTC_CALIB_SIGN_NEGATIVE
3082   */
LL_RTC_CAL_GetCoarseDigitalSign(RTC_TypeDef * RTCx)3083 __STATIC_INLINE uint32_t LL_RTC_CAL_GetCoarseDigitalSign(RTC_TypeDef *RTCx)
3084 {
3085   return (uint32_t)(READ_BIT(RTCx->CALIBR, RTC_CALIBR_DCS));
3086 }
3087 
3088 #if defined(RTC_SMOOTHCALIB_SUPPORT)
3089 /**
3090   * @brief  Insert or not One RTCCLK pulse every 2exp11 pulses (frequency increased by 488.5 ppm)
3091   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3092   * @note   Bit can be written only when RECALPF is set to 0 in RTC_ISR
3093   * @rmtoll CALR         CALP          LL_RTC_CAL_SetPulse
3094   * @param  RTCx RTC Instance
3095   * @param  Pulse This parameter can be one of the following values:
3096   *         @arg @ref LL_RTC_CALIB_INSERTPULSE_NONE
3097   *         @arg @ref LL_RTC_CALIB_INSERTPULSE_SET
3098   * @retval None
3099   */
LL_RTC_CAL_SetPulse(RTC_TypeDef * RTCx,uint32_t Pulse)3100 __STATIC_INLINE void LL_RTC_CAL_SetPulse(RTC_TypeDef *RTCx, uint32_t Pulse)
3101 {
3102   MODIFY_REG(RTCx->CALR, RTC_CALR_CALP, Pulse);
3103 }
3104 
3105 /**
3106   * @brief  Check if one RTCCLK has been inserted or not every 2exp11 pulses (frequency increased by 488.5 ppm)
3107   * @rmtoll CALR         CALP          LL_RTC_CAL_IsPulseInserted
3108   * @param  RTCx RTC Instance
3109   * @retval State of bit (1 or 0).
3110   */
LL_RTC_CAL_IsPulseInserted(RTC_TypeDef * RTCx)3111 __STATIC_INLINE uint32_t LL_RTC_CAL_IsPulseInserted(RTC_TypeDef *RTCx)
3112 {
3113   return ((READ_BIT(RTCx->CALR, RTC_CALR_CALP) == (RTC_CALR_CALP)) ? 1UL : 0UL);
3114 }
3115 
3116 /**
3117   * @brief  Set smooth calibration cycle period
3118   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3119   * @note   Bit can be written only when RECALPF is set to 0 in RTC_ISR
3120   * @rmtoll CALR         CALW8         LL_RTC_CAL_SetPeriod\n
3121   *         CALR         CALW16        LL_RTC_CAL_SetPeriod
3122   * @param  RTCx RTC Instance
3123   * @param  Period This parameter can be one of the following values:
3124   *         @arg @ref LL_RTC_CALIB_PERIOD_32SEC
3125   *         @arg @ref LL_RTC_CALIB_PERIOD_16SEC
3126   *         @arg @ref LL_RTC_CALIB_PERIOD_8SEC
3127   * @retval None
3128   */
LL_RTC_CAL_SetPeriod(RTC_TypeDef * RTCx,uint32_t Period)3129 __STATIC_INLINE void LL_RTC_CAL_SetPeriod(RTC_TypeDef *RTCx, uint32_t Period)
3130 {
3131   MODIFY_REG(RTCx->CALR, RTC_CALR_CALW8 | RTC_CALR_CALW16, Period);
3132 }
3133 
3134 /**
3135   * @brief  Get smooth calibration cycle period
3136   * @rmtoll CALR         CALW8         LL_RTC_CAL_GetPeriod\n
3137   *         CALR         CALW16        LL_RTC_CAL_GetPeriod
3138   * @param  RTCx RTC Instance
3139   * @retval Returned value can be one of the following values:
3140   *         @arg @ref LL_RTC_CALIB_PERIOD_32SEC
3141   *         @arg @ref LL_RTC_CALIB_PERIOD_16SEC
3142   *         @arg @ref LL_RTC_CALIB_PERIOD_8SEC
3143   */
LL_RTC_CAL_GetPeriod(RTC_TypeDef * RTCx)3144 __STATIC_INLINE uint32_t LL_RTC_CAL_GetPeriod(RTC_TypeDef *RTCx)
3145 {
3146   return (uint32_t)(READ_BIT(RTCx->CALR, RTC_CALR_CALW8 | RTC_CALR_CALW16));
3147 }
3148 
3149 /**
3150   * @brief  Set smooth Calibration minus
3151   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3152   * @note   Bit can be written only when RECALPF is set to 0 in RTC_ISR
3153   * @rmtoll CALR         CALM          LL_RTC_CAL_SetMinus
3154   * @param  RTCx RTC Instance
3155   * @param  CalibMinus Value between Min_Data=0x00 and Max_Data=0x1FF
3156   * @retval None
3157   */
LL_RTC_CAL_SetMinus(RTC_TypeDef * RTCx,uint32_t CalibMinus)3158 __STATIC_INLINE void LL_RTC_CAL_SetMinus(RTC_TypeDef *RTCx, uint32_t CalibMinus)
3159 {
3160   MODIFY_REG(RTCx->CALR, RTC_CALR_CALM, CalibMinus);
3161 }
3162 
3163 /**
3164   * @brief  Get smooth Calibration minus
3165   * @rmtoll CALR         CALM          LL_RTC_CAL_GetMinus
3166   * @param  RTCx RTC Instance
3167   * @retval Value between Min_Data=0x00 and Max_Data= 0x1FF
3168   */
LL_RTC_CAL_GetMinus(RTC_TypeDef * RTCx)3169 __STATIC_INLINE uint32_t LL_RTC_CAL_GetMinus(RTC_TypeDef *RTCx)
3170 {
3171   return (uint32_t)(READ_BIT(RTCx->CALR, RTC_CALR_CALM));
3172 }
3173 #endif /* RTC_SMOOTHCALIB_SUPPORT */
3174 
3175 /**
3176   * @}
3177   */
3178 
3179 /** @defgroup RTC_LL_EF_FLAG_Management FLAG_Management
3180   * @{
3181   */
3182 
3183 #if defined(RTC_SMOOTHCALIB_SUPPORT)
3184 /**
3185   * @brief  Get Recalibration pending Flag
3186   * @rmtoll ISR          RECALPF       LL_RTC_IsActiveFlag_RECALP
3187   * @param  RTCx RTC Instance
3188   * @retval State of bit (1 or 0).
3189   */
LL_RTC_IsActiveFlag_RECALP(RTC_TypeDef * RTCx)3190 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_RECALP(RTC_TypeDef *RTCx)
3191 {
3192   return ((READ_BIT(RTCx->ISR, RTC_ISR_RECALPF) == (RTC_ISR_RECALPF)) ? 1UL : 0UL);
3193 }
3194 #endif /* RTC_SMOOTHCALIB_SUPPORT */
3195 
3196 #if defined(RTC_TAMPER3_SUPPORT)
3197 /**
3198   * @brief  Get RTC_TAMP3 detection flag
3199   * @rmtoll ISR          TAMP3F        LL_RTC_IsActiveFlag_TAMP3
3200   * @param  RTCx RTC Instance
3201   * @retval State of bit (1 or 0).
3202   */
LL_RTC_IsActiveFlag_TAMP3(RTC_TypeDef * RTCx)3203 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_TAMP3(RTC_TypeDef *RTCx)
3204 {
3205   return ((READ_BIT(RTCx->ISR, RTC_ISR_TAMP3F) == (RTC_ISR_TAMP3F)) ? 1UL : 0UL);
3206 }
3207 #endif /* RTC_TAMPER3_SUPPORT */
3208 
3209 #if defined(RTC_TAMPER2_SUPPORT)
3210 /**
3211   * @brief  Get RTC_TAMP2 detection flag
3212   * @rmtoll ISR          TAMP2F        LL_RTC_IsActiveFlag_TAMP2
3213   * @param  RTCx RTC Instance
3214   * @retval State of bit (1 or 0).
3215   */
LL_RTC_IsActiveFlag_TAMP2(RTC_TypeDef * RTCx)3216 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_TAMP2(RTC_TypeDef *RTCx)
3217 {
3218   return ((READ_BIT(RTCx->ISR, RTC_ISR_TAMP2F) == (RTC_ISR_TAMP2F)) ? 1UL : 0UL);
3219 }
3220 #endif /* RTC_TAMPER2_SUPPORT */
3221 
3222 /**
3223   * @brief  Get RTC_TAMP1 detection flag
3224   * @rmtoll ISR          TAMP1F        LL_RTC_IsActiveFlag_TAMP1
3225   * @param  RTCx RTC Instance
3226   * @retval State of bit (1 or 0).
3227   */
LL_RTC_IsActiveFlag_TAMP1(RTC_TypeDef * RTCx)3228 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_TAMP1(RTC_TypeDef *RTCx)
3229 {
3230   return ((READ_BIT(RTCx->ISR, RTC_ISR_TAMP1F) == (RTC_ISR_TAMP1F)) ? 1UL : 0UL);
3231 }
3232 
3233 /**
3234   * @brief  Get Time-stamp overflow flag
3235   * @rmtoll ISR          TSOVF         LL_RTC_IsActiveFlag_TSOV
3236   * @param  RTCx RTC Instance
3237   * @retval State of bit (1 or 0).
3238   */
LL_RTC_IsActiveFlag_TSOV(RTC_TypeDef * RTCx)3239 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_TSOV(RTC_TypeDef *RTCx)
3240 {
3241   return ((READ_BIT(RTCx->ISR, RTC_ISR_TSOVF) == (RTC_ISR_TSOVF)) ? 1UL : 0UL);
3242 }
3243 
3244 /**
3245   * @brief  Get Time-stamp flag
3246   * @rmtoll ISR          TSF           LL_RTC_IsActiveFlag_TS
3247   * @param  RTCx RTC Instance
3248   * @retval State of bit (1 or 0).
3249   */
LL_RTC_IsActiveFlag_TS(RTC_TypeDef * RTCx)3250 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_TS(RTC_TypeDef *RTCx)
3251 {
3252   return ((READ_BIT(RTCx->ISR, RTC_ISR_TSF) == (RTC_ISR_TSF)) ? 1UL : 0UL);
3253 }
3254 
3255 /**
3256   * @brief  Get Wakeup timer flag
3257   * @rmtoll ISR          WUTF          LL_RTC_IsActiveFlag_WUT
3258   * @param  RTCx RTC Instance
3259   * @retval State of bit (1 or 0).
3260   */
LL_RTC_IsActiveFlag_WUT(RTC_TypeDef * RTCx)3261 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_WUT(RTC_TypeDef *RTCx)
3262 {
3263   return ((READ_BIT(RTCx->ISR, RTC_ISR_WUTF) == (RTC_ISR_WUTF)) ? 1UL : 0UL);
3264 }
3265 
3266 /**
3267   * @brief  Get Alarm B flag
3268   * @rmtoll ISR          ALRBF         LL_RTC_IsActiveFlag_ALRB
3269   * @param  RTCx RTC Instance
3270   * @retval State of bit (1 or 0).
3271   */
LL_RTC_IsActiveFlag_ALRB(RTC_TypeDef * RTCx)3272 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_ALRB(RTC_TypeDef *RTCx)
3273 {
3274   return ((READ_BIT(RTCx->ISR, RTC_ISR_ALRBF) == (RTC_ISR_ALRBF)) ? 1UL : 0UL);
3275 }
3276 
3277 /**
3278   * @brief  Get Alarm A flag
3279   * @rmtoll ISR          ALRAF         LL_RTC_IsActiveFlag_ALRA
3280   * @param  RTCx RTC Instance
3281   * @retval State of bit (1 or 0).
3282   */
LL_RTC_IsActiveFlag_ALRA(RTC_TypeDef * RTCx)3283 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_ALRA(RTC_TypeDef *RTCx)
3284 {
3285   return ((READ_BIT(RTCx->ISR, RTC_ISR_ALRAF) == (RTC_ISR_ALRAF)) ? 1UL : 0UL);
3286 }
3287 
3288 #if defined(RTC_TAMPER3_SUPPORT)
3289 /**
3290   * @brief  Clear RTC_TAMP3 detection flag
3291   * @rmtoll ISR          TAMP3F        LL_RTC_ClearFlag_TAMP3
3292   * @param  RTCx RTC Instance
3293   * @retval None
3294   */
LL_RTC_ClearFlag_TAMP3(RTC_TypeDef * RTCx)3295 __STATIC_INLINE void LL_RTC_ClearFlag_TAMP3(RTC_TypeDef *RTCx)
3296 {
3297   WRITE_REG(RTCx->ISR, (~((RTC_ISR_TAMP3F | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3298 }
3299 #endif /* RTC_TAMPER3_SUPPORT */
3300 
3301 #if defined(RTC_TAMPER2_SUPPORT)
3302 /**
3303   * @brief  Clear RTC_TAMP2 detection flag
3304   * @rmtoll ISR          TAMP2F        LL_RTC_ClearFlag_TAMP2
3305   * @param  RTCx RTC Instance
3306   * @retval None
3307   */
LL_RTC_ClearFlag_TAMP2(RTC_TypeDef * RTCx)3308 __STATIC_INLINE void LL_RTC_ClearFlag_TAMP2(RTC_TypeDef *RTCx)
3309 {
3310   WRITE_REG(RTCx->ISR, (~((RTC_ISR_TAMP2F | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3311 }
3312 #endif /* RTC_TAMPER2_SUPPORT */
3313 
3314 /**
3315   * @brief  Clear RTC_TAMP1 detection flag
3316   * @rmtoll ISR          TAMP1F        LL_RTC_ClearFlag_TAMP1
3317   * @param  RTCx RTC Instance
3318   * @retval None
3319   */
LL_RTC_ClearFlag_TAMP1(RTC_TypeDef * RTCx)3320 __STATIC_INLINE void LL_RTC_ClearFlag_TAMP1(RTC_TypeDef *RTCx)
3321 {
3322   WRITE_REG(RTCx->ISR, (~((RTC_ISR_TAMP1F | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3323 }
3324 
3325 /**
3326   * @brief  Clear Time-stamp overflow flag
3327   * @rmtoll ISR          TSOVF         LL_RTC_ClearFlag_TSOV
3328   * @param  RTCx RTC Instance
3329   * @retval None
3330   */
LL_RTC_ClearFlag_TSOV(RTC_TypeDef * RTCx)3331 __STATIC_INLINE void LL_RTC_ClearFlag_TSOV(RTC_TypeDef *RTCx)
3332 {
3333   WRITE_REG(RTCx->ISR, (~((RTC_ISR_TSOVF | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3334 }
3335 
3336 /**
3337   * @brief  Clear Time-stamp flag
3338   * @rmtoll ISR          TSF           LL_RTC_ClearFlag_TS
3339   * @param  RTCx RTC Instance
3340   * @retval None
3341   */
LL_RTC_ClearFlag_TS(RTC_TypeDef * RTCx)3342 __STATIC_INLINE void LL_RTC_ClearFlag_TS(RTC_TypeDef *RTCx)
3343 {
3344   WRITE_REG(RTCx->ISR, (~((RTC_ISR_TSF | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3345 }
3346 
3347 /**
3348   * @brief  Clear Wakeup timer flag
3349   * @rmtoll ISR          WUTF          LL_RTC_ClearFlag_WUT
3350   * @param  RTCx RTC Instance
3351   * @retval None
3352   */
LL_RTC_ClearFlag_WUT(RTC_TypeDef * RTCx)3353 __STATIC_INLINE void LL_RTC_ClearFlag_WUT(RTC_TypeDef *RTCx)
3354 {
3355   WRITE_REG(RTCx->ISR, (~((RTC_ISR_WUTF | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3356 }
3357 
3358 /**
3359   * @brief  Clear Alarm B flag
3360   * @rmtoll ISR          ALRBF         LL_RTC_ClearFlag_ALRB
3361   * @param  RTCx RTC Instance
3362   * @retval None
3363   */
LL_RTC_ClearFlag_ALRB(RTC_TypeDef * RTCx)3364 __STATIC_INLINE void LL_RTC_ClearFlag_ALRB(RTC_TypeDef *RTCx)
3365 {
3366   WRITE_REG(RTCx->ISR, (~((RTC_ISR_ALRBF | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3367 }
3368 
3369 /**
3370   * @brief  Clear Alarm A flag
3371   * @rmtoll ISR          ALRAF         LL_RTC_ClearFlag_ALRA
3372   * @param  RTCx RTC Instance
3373   * @retval None
3374   */
LL_RTC_ClearFlag_ALRA(RTC_TypeDef * RTCx)3375 __STATIC_INLINE void LL_RTC_ClearFlag_ALRA(RTC_TypeDef *RTCx)
3376 {
3377   WRITE_REG(RTCx->ISR, (~((RTC_ISR_ALRAF | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3378 }
3379 
3380 /**
3381   * @brief  Get Initialization flag
3382   * @rmtoll ISR          INITF         LL_RTC_IsActiveFlag_INIT
3383   * @param  RTCx RTC Instance
3384   * @retval State of bit (1 or 0).
3385   */
LL_RTC_IsActiveFlag_INIT(RTC_TypeDef * RTCx)3386 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_INIT(RTC_TypeDef *RTCx)
3387 {
3388   return ((READ_BIT(RTCx->ISR, RTC_ISR_INITF) == (RTC_ISR_INITF)) ? 1UL : 0UL);
3389 }
3390 
3391 /**
3392   * @brief  Get Registers synchronization flag
3393   * @rmtoll ISR          RSF           LL_RTC_IsActiveFlag_RS
3394   * @param  RTCx RTC Instance
3395   * @retval State of bit (1 or 0).
3396   */
LL_RTC_IsActiveFlag_RS(RTC_TypeDef * RTCx)3397 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_RS(RTC_TypeDef *RTCx)
3398 {
3399   return ((READ_BIT(RTCx->ISR, RTC_ISR_RSF) == (RTC_ISR_RSF)) ? 1UL : 0UL);
3400 }
3401 
3402 /**
3403   * @brief  Clear Registers synchronization flag
3404   * @rmtoll ISR          RSF           LL_RTC_ClearFlag_RS
3405   * @param  RTCx RTC Instance
3406   * @retval None
3407   */
LL_RTC_ClearFlag_RS(RTC_TypeDef * RTCx)3408 __STATIC_INLINE void LL_RTC_ClearFlag_RS(RTC_TypeDef *RTCx)
3409 {
3410   WRITE_REG(RTCx->ISR, (~((RTC_ISR_RSF | RTC_ISR_INIT) & 0x0000FFFFU) | (RTCx->ISR & RTC_ISR_INIT)));
3411 }
3412 
3413 /**
3414   * @brief  Get Initialization status flag
3415   * @rmtoll ISR          INITS         LL_RTC_IsActiveFlag_INITS
3416   * @param  RTCx RTC Instance
3417   * @retval State of bit (1 or 0).
3418   */
LL_RTC_IsActiveFlag_INITS(RTC_TypeDef * RTCx)3419 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_INITS(RTC_TypeDef *RTCx)
3420 {
3421   return ((READ_BIT(RTCx->ISR, RTC_ISR_INITS) == (RTC_ISR_INITS)) ? 1UL : 0UL);
3422 }
3423 
3424 #if defined(RTC_SUBSECOND_SUPPORT)
3425 /**
3426   * @brief  Get Shift operation pending flag
3427   * @rmtoll ISR          SHPF          LL_RTC_IsActiveFlag_SHP
3428   * @param  RTCx RTC Instance
3429   * @retval State of bit (1 or 0).
3430   */
LL_RTC_IsActiveFlag_SHP(RTC_TypeDef * RTCx)3431 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_SHP(RTC_TypeDef *RTCx)
3432 {
3433   return ((READ_BIT(RTCx->ISR, RTC_ISR_SHPF) == (RTC_ISR_SHPF)) ? 1UL : 0UL);
3434 }
3435 #endif /* RTC_SUBSECOND_SUPPORT */
3436 
3437 /**
3438   * @brief  Get Wakeup timer write flag
3439   * @rmtoll ISR          WUTWF         LL_RTC_IsActiveFlag_WUTW
3440   * @param  RTCx RTC Instance
3441   * @retval State of bit (1 or 0).
3442   */
LL_RTC_IsActiveFlag_WUTW(RTC_TypeDef * RTCx)3443 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_WUTW(RTC_TypeDef *RTCx)
3444 {
3445   return ((READ_BIT(RTCx->ISR, RTC_ISR_WUTWF) == (RTC_ISR_WUTWF)) ? 1UL : 0UL);
3446 }
3447 
3448 /**
3449   * @brief  Get Alarm B write flag
3450   * @rmtoll ISR          ALRBWF        LL_RTC_IsActiveFlag_ALRBW
3451   * @param  RTCx RTC Instance
3452   * @retval State of bit (1 or 0).
3453   */
LL_RTC_IsActiveFlag_ALRBW(RTC_TypeDef * RTCx)3454 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_ALRBW(RTC_TypeDef *RTCx)
3455 {
3456   return ((READ_BIT(RTCx->ISR, RTC_ISR_ALRBWF) == (RTC_ISR_ALRBWF)) ? 1UL : 0UL);
3457 }
3458 
3459 /**
3460   * @brief  Get Alarm A write flag
3461   * @rmtoll ISR          ALRAWF        LL_RTC_IsActiveFlag_ALRAW
3462   * @param  RTCx RTC Instance
3463   * @retval State of bit (1 or 0).
3464   */
LL_RTC_IsActiveFlag_ALRAW(RTC_TypeDef * RTCx)3465 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_ALRAW(RTC_TypeDef *RTCx)
3466 {
3467   return ((READ_BIT(RTCx->ISR, RTC_ISR_ALRAWF) == (RTC_ISR_ALRAWF)) ? 1UL : 0UL);
3468 }
3469 
3470 /**
3471   * @}
3472   */
3473 
3474 /** @defgroup RTC_LL_EF_IT_Management IT_Management
3475   * @{
3476   */
3477 
3478 /**
3479   * @brief  Enable Time-stamp interrupt
3480   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3481   * @rmtoll CR           TSIE          LL_RTC_EnableIT_TS
3482   * @param  RTCx RTC Instance
3483   * @retval None
3484   */
LL_RTC_EnableIT_TS(RTC_TypeDef * RTCx)3485 __STATIC_INLINE void LL_RTC_EnableIT_TS(RTC_TypeDef *RTCx)
3486 {
3487   SET_BIT(RTCx->CR, RTC_CR_TSIE);
3488 }
3489 
3490 /**
3491   * @brief  Disable Time-stamp interrupt
3492   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3493   * @rmtoll CR           TSIE          LL_RTC_DisableIT_TS
3494   * @param  RTCx RTC Instance
3495   * @retval None
3496   */
LL_RTC_DisableIT_TS(RTC_TypeDef * RTCx)3497 __STATIC_INLINE void LL_RTC_DisableIT_TS(RTC_TypeDef *RTCx)
3498 {
3499   CLEAR_BIT(RTCx->CR, RTC_CR_TSIE);
3500 }
3501 
3502 /**
3503   * @brief  Enable Wakeup timer interrupt
3504   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3505   * @rmtoll CR           WUTIE         LL_RTC_EnableIT_WUT
3506   * @param  RTCx RTC Instance
3507   * @retval None
3508   */
LL_RTC_EnableIT_WUT(RTC_TypeDef * RTCx)3509 __STATIC_INLINE void LL_RTC_EnableIT_WUT(RTC_TypeDef *RTCx)
3510 {
3511   SET_BIT(RTCx->CR, RTC_CR_WUTIE);
3512 }
3513 
3514 /**
3515   * @brief  Disable Wakeup timer interrupt
3516   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3517   * @rmtoll CR           WUTIE         LL_RTC_DisableIT_WUT
3518   * @param  RTCx RTC Instance
3519   * @retval None
3520   */
LL_RTC_DisableIT_WUT(RTC_TypeDef * RTCx)3521 __STATIC_INLINE void LL_RTC_DisableIT_WUT(RTC_TypeDef *RTCx)
3522 {
3523   CLEAR_BIT(RTCx->CR, RTC_CR_WUTIE);
3524 }
3525 
3526 /**
3527   * @brief  Enable Alarm B interrupt
3528   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3529   * @rmtoll CR           ALRBIE        LL_RTC_EnableIT_ALRB
3530   * @param  RTCx RTC Instance
3531   * @retval None
3532   */
LL_RTC_EnableIT_ALRB(RTC_TypeDef * RTCx)3533 __STATIC_INLINE void LL_RTC_EnableIT_ALRB(RTC_TypeDef *RTCx)
3534 {
3535   SET_BIT(RTCx->CR, RTC_CR_ALRBIE);
3536 }
3537 
3538 /**
3539   * @brief  Disable Alarm B interrupt
3540   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3541   * @rmtoll CR           ALRBIE        LL_RTC_DisableIT_ALRB
3542   * @param  RTCx RTC Instance
3543   * @retval None
3544   */
LL_RTC_DisableIT_ALRB(RTC_TypeDef * RTCx)3545 __STATIC_INLINE void LL_RTC_DisableIT_ALRB(RTC_TypeDef *RTCx)
3546 {
3547   CLEAR_BIT(RTCx->CR, RTC_CR_ALRBIE);
3548 }
3549 
3550 /**
3551   * @brief  Enable Alarm A interrupt
3552   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3553   * @rmtoll CR           ALRAIE        LL_RTC_EnableIT_ALRA
3554   * @param  RTCx RTC Instance
3555   * @retval None
3556   */
LL_RTC_EnableIT_ALRA(RTC_TypeDef * RTCx)3557 __STATIC_INLINE void LL_RTC_EnableIT_ALRA(RTC_TypeDef *RTCx)
3558 {
3559   SET_BIT(RTCx->CR, RTC_CR_ALRAIE);
3560 }
3561 
3562 /**
3563   * @brief  Disable Alarm A interrupt
3564   * @note   Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
3565   * @rmtoll CR           ALRAIE        LL_RTC_DisableIT_ALRA
3566   * @param  RTCx RTC Instance
3567   * @retval None
3568   */
LL_RTC_DisableIT_ALRA(RTC_TypeDef * RTCx)3569 __STATIC_INLINE void LL_RTC_DisableIT_ALRA(RTC_TypeDef *RTCx)
3570 {
3571   CLEAR_BIT(RTCx->CR, RTC_CR_ALRAIE);
3572 }
3573 
3574 /**
3575   * @brief  Enable all Tamper Interrupt
3576   * @rmtoll TAFCR       TAMPIE        LL_RTC_EnableIT_TAMP
3577   * @param  RTCx RTC Instance
3578   * @retval None
3579   */
LL_RTC_EnableIT_TAMP(RTC_TypeDef * RTCx)3580 __STATIC_INLINE void LL_RTC_EnableIT_TAMP(RTC_TypeDef *RTCx)
3581 {
3582   SET_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPIE);
3583 }
3584 
3585 /**
3586   * @brief  Disable all Tamper Interrupt
3587   * @rmtoll TAFCR       TAMPIE        LL_RTC_DisableIT_TAMP
3588   * @param  RTCx RTC Instance
3589   * @retval None
3590   */
LL_RTC_DisableIT_TAMP(RTC_TypeDef * RTCx)3591 __STATIC_INLINE void LL_RTC_DisableIT_TAMP(RTC_TypeDef *RTCx)
3592 {
3593   CLEAR_BIT(RTCx->TAFCR, RTC_TAFCR_TAMPIE);
3594 }
3595 
3596 /**
3597   * @brief  Check if  Time-stamp interrupt is enabled or not
3598   * @rmtoll CR           TSIE          LL_RTC_IsEnabledIT_TS
3599   * @param  RTCx RTC Instance
3600   * @retval State of bit (1 or 0).
3601   */
LL_RTC_IsEnabledIT_TS(RTC_TypeDef * RTCx)3602 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_TS(RTC_TypeDef *RTCx)
3603 {
3604   return ((READ_BIT(RTCx->CR, RTC_CR_TSIE) == (RTC_CR_TSIE)) ? 1UL : 0UL);
3605 }
3606 
3607 /**
3608   * @brief  Check if  Wakeup timer interrupt is enabled or not
3609   * @rmtoll CR           WUTIE         LL_RTC_IsEnabledIT_WUT
3610   * @param  RTCx RTC Instance
3611   * @retval State of bit (1 or 0).
3612   */
LL_RTC_IsEnabledIT_WUT(RTC_TypeDef * RTCx)3613 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_WUT(RTC_TypeDef *RTCx)
3614 {
3615   return ((READ_BIT(RTCx->CR, RTC_CR_WUTIE) == (RTC_CR_WUTIE)) ? 1UL : 0UL);
3616 }
3617 
3618 /**
3619   * @brief  Check if  Alarm B interrupt is enabled or not
3620   * @rmtoll CR           ALRBIE        LL_RTC_IsEnabledIT_ALRB
3621   * @param  RTCx RTC Instance
3622   * @retval State of bit (1 or 0).
3623   */
LL_RTC_IsEnabledIT_ALRB(RTC_TypeDef * RTCx)3624 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_ALRB(RTC_TypeDef *RTCx)
3625 {
3626   return ((READ_BIT(RTCx->CR, RTC_CR_ALRBIE) == (RTC_CR_ALRBIE)) ? 1UL : 0UL);
3627 }
3628 
3629 /**
3630   * @brief  Check if  Alarm A interrupt is enabled or not
3631   * @rmtoll CR           ALRAIE        LL_RTC_IsEnabledIT_ALRA
3632   * @param  RTCx RTC Instance
3633   * @retval State of bit (1 or 0).
3634   */
LL_RTC_IsEnabledIT_ALRA(RTC_TypeDef * RTCx)3635 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_ALRA(RTC_TypeDef *RTCx)
3636 {
3637   return ((READ_BIT(RTCx->CR, RTC_CR_ALRAIE) == (RTC_CR_ALRAIE)) ? 1UL : 0UL);
3638 }
3639 
3640 /**
3641   * @brief  Check if all the TAMPER interrupts are enabled or not
3642   * @rmtoll TAFCR       TAMPIE        LL_RTC_IsEnabledIT_TAMP
3643   * @param  RTCx RTC Instance
3644   * @retval State of bit (1 or 0).
3645   */
LL_RTC_IsEnabledIT_TAMP(RTC_TypeDef * RTCx)3646 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_TAMP(RTC_TypeDef *RTCx)
3647 {
3648   return ((READ_BIT(RTCx->TAFCR,
3649                     RTC_TAFCR_TAMPIE) == (RTC_TAFCR_TAMPIE)) ? 1UL : 0UL);
3650 }
3651 
3652 /**
3653   * @}
3654   */
3655 
3656 #if defined(USE_FULL_LL_DRIVER)
3657 /** @defgroup RTC_LL_EF_Init Initialization and de-initialization functions
3658   * @{
3659   */
3660 
3661 ErrorStatus LL_RTC_DeInit(RTC_TypeDef *RTCx);
3662 ErrorStatus LL_RTC_Init(RTC_TypeDef *RTCx, LL_RTC_InitTypeDef *RTC_InitStruct);
3663 void        LL_RTC_StructInit(LL_RTC_InitTypeDef *RTC_InitStruct);
3664 ErrorStatus LL_RTC_TIME_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_TimeTypeDef *RTC_TimeStruct);
3665 void        LL_RTC_TIME_StructInit(LL_RTC_TimeTypeDef *RTC_TimeStruct);
3666 ErrorStatus LL_RTC_DATE_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_DateTypeDef *RTC_DateStruct);
3667 void        LL_RTC_DATE_StructInit(LL_RTC_DateTypeDef *RTC_DateStruct);
3668 ErrorStatus LL_RTC_ALMA_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct);
3669 ErrorStatus LL_RTC_ALMB_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct);
3670 void        LL_RTC_ALMA_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct);
3671 void        LL_RTC_ALMB_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct);
3672 ErrorStatus LL_RTC_EnterInitMode(RTC_TypeDef *RTCx);
3673 ErrorStatus LL_RTC_ExitInitMode(RTC_TypeDef *RTCx);
3674 ErrorStatus LL_RTC_WaitForSynchro(RTC_TypeDef *RTCx);
3675 
3676 /**
3677   * @}
3678   */
3679 #endif /* USE_FULL_LL_DRIVER */
3680 
3681 /**
3682   * @}
3683   */
3684 
3685 /**
3686   * @}
3687   */
3688 
3689 #endif /* defined(RTC) */
3690 
3691 /**
3692   * @}
3693   */
3694 
3695 #ifdef __cplusplus
3696 }
3697 #endif
3698 
3699 #endif /* STM32L1xx_LL_RTC_H */
3700