1 /**
2   ******************************************************************************
3   * @file    stm32wbxx_hal_rtc_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of RTC HAL Extended module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32WBxx_HAL_RTC_EX_H
22 #define STM32WBxx_HAL_RTC_EX_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32wbxx_hal_def.h"
30 
31 /** @addtogroup STM32WBxx_HAL_Driver
32   * @{
33   */
34 
35 /** @defgroup RTCEx RTCEx
36   * @{
37   */
38 
39 /* Exported types ------------------------------------------------------------*/
40 
41 /** @defgroup RTCEx_Exported_Types RTCEx Exported Types
42   * @{
43   */
44 
45 /**
46   * @brief  RTC Tamper structure definition
47   */
48 typedef struct
49 {
50   uint32_t Tamper;                      /*!< Specifies the Tamper Pin.
51                                              This parameter can be a value of @ref  RTCEx_Tamper_Pins_Definitions */
52 
53   uint32_t Interrupt;                   /*!< Specifies the Tamper Interrupt.
54                                              This parameter can be a value of @ref  RTCEx_Tamper_Interrupt_Definitions */
55 
56   uint32_t Trigger;                     /*!< Specifies the Tamper Trigger.
57                                              This parameter can be a value of @ref  RTCEx_Tamper_Trigger_Definitions */
58 
59   uint32_t NoErase;                     /*!< Specifies the Tamper no erase mode.
60                                              This parameter can be a value of @ref  RTCEx_Tamper_EraseBackUp_Definitions */
61 
62   uint32_t MaskFlag;                     /*!< Specifies the Tamper Flag masking.
63                                              This parameter can be a value of @ref RTCEx_Tamper_MaskFlag_Definitions   */
64 
65   uint32_t Filter;                      /*!< Specifies the RTC Filter Tamper.
66                                              This parameter can be a value of @ref RTCEx_Tamper_Filter_Definitions */
67 
68   uint32_t SamplingFrequency;           /*!< Specifies the sampling frequency.
69                                              This parameter can be a value of @ref RTCEx_Tamper_Sampling_Frequencies_Definitions */
70 
71   uint32_t PrechargeDuration;           /*!< Specifies the Precharge Duration .
72                                              This parameter can be a value of @ref RTCEx_Tamper_Pin_Precharge_Duration_Definitions */
73 
74   uint32_t TamperPullUp;                /*!< Specifies the Tamper PullUp .
75                                              This parameter can be a value of @ref RTCEx_Tamper_Pull_UP_Definitions */
76 
77   uint32_t TimeStampOnTamperDetection;  /*!< Specifies the TimeStampOnTamperDetection.
78                                              This parameter can be a value of @ref RTCEx_Tamper_TimeStampOnTamperDetection_Definitions */
79 }RTC_TamperTypeDef;
80 /**
81   * @}
82   */
83 
84 /* Exported constants --------------------------------------------------------*/
85 /** @defgroup RTCEx_Exported_Constants RTCEx Exported Constants
86   * @{
87   */
88 
89 /** @defgroup RTCEx_Output_selection_Definitions RTCEx Output Selection Definition
90   * @{
91   */
92 #define RTC_OUTPUT_DISABLE             ((uint32_t)0x00000000U)
93 #define RTC_OUTPUT_ALARMA              ((uint32_t)RTC_CR_OSEL_0)
94 #define RTC_OUTPUT_ALARMB              ((uint32_t)RTC_CR_OSEL_1)
95 #define RTC_OUTPUT_WAKEUP              ((uint32_t)RTC_CR_OSEL)
96 
97 /**
98   * @}
99   */
100 
101 /** @defgroup RTCEx_Backup_Registers_Definitions RTCEx Backup Registers Definition
102   * @{
103   */
104 #define RTC_BKP_DR0                       ((uint32_t)0x00000000U)
105 #define RTC_BKP_DR1                       ((uint32_t)0x00000001U)
106 #define RTC_BKP_DR2                       ((uint32_t)0x00000002U)
107 #define RTC_BKP_DR3                       ((uint32_t)0x00000003U)
108 #define RTC_BKP_DR4                       ((uint32_t)0x00000004U)
109 #define RTC_BKP_DR5                       ((uint32_t)0x00000005U)
110 #define RTC_BKP_DR6                       ((uint32_t)0x00000006U)
111 #define RTC_BKP_DR7                       ((uint32_t)0x00000007U)
112 #define RTC_BKP_DR8                       ((uint32_t)0x00000008U)
113 #define RTC_BKP_DR9                       ((uint32_t)0x00000009U)
114 #define RTC_BKP_DR10                      ((uint32_t)0x0000000AU)
115 #define RTC_BKP_DR11                      ((uint32_t)0x0000000BU)
116 #define RTC_BKP_DR12                      ((uint32_t)0x0000000CU)
117 #define RTC_BKP_DR13                      ((uint32_t)0x0000000DU)
118 #define RTC_BKP_DR14                      ((uint32_t)0x0000000EU)
119 #define RTC_BKP_DR15                      ((uint32_t)0x0000000FU)
120 #define RTC_BKP_DR16                      ((uint32_t)0x00000010U)
121 #define RTC_BKP_DR17                      ((uint32_t)0x00000011U)
122 #define RTC_BKP_DR18                      ((uint32_t)0x00000012U)
123 #define RTC_BKP_DR19                      ((uint32_t)0x00000013U)
124 
125 /**
126   * @}
127   */
128 
129 
130 /** @defgroup RTCEx_Time_Stamp_Edges_definitions RTCEx Time Stamp Edges definition
131   * @{
132   */
133 #define RTC_TIMESTAMPEDGE_RISING        ((uint32_t)0x00000000U)
134 #define RTC_TIMESTAMPEDGE_FALLING       RTC_CR_TSEDGE
135 
136 /**
137   * @}
138   */
139 
140 /** @defgroup RTCEx_TimeStamp_Pin_Selections RTCEx TimeStamp Pin Selection
141   * @{
142   */
143 #define RTC_TIMESTAMPPIN_DEFAULT              ((uint32_t)0x00000000U)
144 
145 /**
146   * @}
147   */
148 
149 
150 /** @defgroup RTCEx_Tamper_Pins_Definitions RTCEx Tamper Pins Definition
151   * @{
152   */
153 #if defined(RTC_TAMPER1_SUPPORT)
154 #define RTC_TAMPER_1                       RTC_TAMPCR_TAMP1E
155 #endif /* RTC_TAMPER1_SUPPORT */
156 
157 #define RTC_TAMPER_2                       RTC_TAMPCR_TAMP2E
158 
159 #if defined(RTC_TAMPER3_SUPPORT)
160 #define RTC_TAMPER_3                       RTC_TAMPCR_TAMP3E
161 #endif /* RTC_TAMPER3_SUPPORT */
162 /**
163   * @}
164   */
165 
166 
167 /** @defgroup RTCEx_Tamper_Interrupt_Definitions RTCEx Tamper Interrupt Definitions
168   * @{
169   */
170 #if defined(RTC_TAMPER1_SUPPORT)
171 #define RTC_TAMPER1_INTERRUPT              RTC_TAMPCR_TAMP1IE
172 #endif /* RTC_TAMPER1_SUPPORT */
173 
174 
175 #define RTC_TAMPER2_INTERRUPT              RTC_TAMPCR_TAMP2IE
176 
177 #if defined(RTC_TAMPER3_SUPPORT)
178 #define RTC_TAMPER3_INTERRUPT              RTC_TAMPCR_TAMP3IE
179 #endif /* RTC_TAMPER3_SUPPORT */
180 #define RTC_ALL_TAMPER_INTERRUPT             RTC_TAMPCR_TAMPIE
181 /**
182   * @}
183   */
184 
185 /** @defgroup RTCEx_Tamper_Trigger_Definitions RTCEx Tamper Trigger Definitions
186   * @{
187   */
188 #define RTC_TAMPERTRIGGER_RISINGEDGE       ((uint32_t)0x00000000U)
189 #define RTC_TAMPERTRIGGER_FALLINGEDGE      ((uint32_t)0x00000002U)
190 #define RTC_TAMPERTRIGGER_LOWLEVEL         RTC_TAMPERTRIGGER_RISINGEDGE
191 #define RTC_TAMPERTRIGGER_HIGHLEVEL        RTC_TAMPERTRIGGER_FALLINGEDGE
192 
193 /**
194   * @}
195   */
196 
197 /** @defgroup RTCEx_Tamper_EraseBackUp_Definitions RTCEx Tamper EraseBackUp Definitions
198 * @{
199 */
200 #define RTC_TAMPER_ERASE_BACKUP_ENABLE               ((uint32_t)0x00000000U)
201 #define RTC_TAMPER_ERASE_BACKUP_DISABLE              ((uint32_t)0x00020000U)
202 /**
203   * @}
204   */
205 
206 /** @defgroup RTCEx_Tamper_MaskFlag_Definitions RTCEx Tamper MaskFlag Definitions
207 * @{
208 */
209 #define RTC_TAMPERMASK_FLAG_DISABLE               ((uint32_t)0x00000000U)
210 #define RTC_TAMPERMASK_FLAG_ENABLE                ((uint32_t)0x00040000U)
211 
212 /**
213   * @}
214   */
215 
216 /** @defgroup RTCEx_Tamper_Filter_Definitions RTCEx Tamper Filter Definitions
217   * @{
218   */
219 #define RTC_TAMPERFILTER_DISABLE   ((uint32_t)0x00000000U)  /*!< Tamper filter is disabled */
220 
221 #define RTC_TAMPERFILTER_2SAMPLE   RTC_TAMPCR_TAMPFLT_0    /*!< Tamper is activated after 2
222                                                                 consecutive samples at the active level */
223 #define RTC_TAMPERFILTER_4SAMPLE   RTC_TAMPCR_TAMPFLT_1    /*!< Tamper is activated after 4
224                                                                 consecutive samples at the active level */
225 #define RTC_TAMPERFILTER_8SAMPLE   RTC_TAMPCR_TAMPFLT      /*!< Tamper is activated after 8
226                                                                 consecutive samples at the active leve. */
227 
228 /**
229   * @}
230   */
231 
232 /** @defgroup RTCEx_Tamper_Sampling_Frequencies_Definitions RTCEx Tamper Sampling Frequencies Definitions
233   * @{
234   */
235 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768  ((uint32_t)0x00000000U)                                         /*!< Each of the tamper inputs are sampled
236                                                                                                                     with a frequency =  RTCCLK / 32768 */
237 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV16384  RTC_TAMPCR_TAMPFREQ_0                                          /*!< Each of the tamper inputs are sampled
238                                                                                                                     with a frequency =  RTCCLK / 16384 */
239 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV8192   RTC_TAMPCR_TAMPFREQ_1                                          /*!< Each of the tamper inputs are sampled
240                                                                                                                     with a frequency =  RTCCLK / 8192  */
241 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV4096   ((uint32_t) (RTC_TAMPCR_TAMPFREQ_0 | RTC_TAMPCR_TAMPFREQ_1))   /*!< Each of the tamper inputs are sampled
242                                                                                                                     with a frequency =  RTCCLK / 4096  */
243 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV2048   RTC_TAMPCR_TAMPFREQ_2                                          /*!< Each of the tamper inputs are sampled
244                                                                                                                     with a frequency =  RTCCLK / 2048  */
245 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV1024   ((uint32_t) (RTC_TAMPCR_TAMPFREQ_0 | RTC_TAMPCR_TAMPFREQ_2))   /*!< Each of the tamper inputs are sampled
246                                                                                                                     with a frequency =  RTCCLK / 1024  */
247 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV512    ((uint32_t) (RTC_TAMPCR_TAMPFREQ_1 | RTC_TAMPCR_TAMPFREQ_2))   /*!< Each of the tamper inputs are sampled
248                                                                                                                     with a frequency =  RTCCLK / 512   */
249 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV256    ((uint32_t) (RTC_TAMPCR_TAMPFREQ_0 | RTC_TAMPCR_TAMPFREQ_1 | \
250                                                  RTC_TAMPCR_TAMPFREQ_2))                                       /*!< Each of the tamper inputs are sampled
251                                                                                                                     with a frequency =  RTCCLK / 256   */
252 
253 /**
254   * @}
255   */
256 
257 /** @defgroup RTCEx_Tamper_Pin_Precharge_Duration_Definitions RTCEx Tamper Pin Precharge Duration Definitions
258   * @{
259   */
260 #define RTC_TAMPERPRECHARGEDURATION_1RTCCLK  ((uint32_t)0x00000000U)                                     /*!< Tamper pins are pre-charged before
261                                                                                                             sampling during 1 RTCCLK cycle  */
262 #define RTC_TAMPERPRECHARGEDURATION_2RTCCLK  RTC_TAMPCR_TAMPPRCH_0                                      /*!< Tamper pins are pre-charged before
263                                                                                                              sampling during 2 RTCCLK cycles */
264 #define RTC_TAMPERPRECHARGEDURATION_4RTCCLK  RTC_TAMPCR_TAMPPRCH_1                                      /*!< Tamper pins are pre-charged before
265                                                                                                              sampling during 4 RTCCLK cycles */
266 #define RTC_TAMPERPRECHARGEDURATION_8RTCCLK ((uint32_t)(RTC_TAMPCR_TAMPPRCH_0 | RTC_TAMPCR_TAMPPRCH_1)) /*!< Tamper pins are pre-charged before
267                                                                                                              sampling during 8 RTCCLK cycles */
268 
269 /**
270   * @}
271   */
272 
273 /** @defgroup RTCEx_Tamper_TimeStampOnTamperDetection_Definitions RTCEx Tamper TimeStampOnTamperDetection Definitions
274   * @{
275   */
276 #define RTC_TIMESTAMPONTAMPERDETECTION_ENABLE  RTC_TAMPCR_TAMPTS       /*!< TimeStamp on Tamper Detection event saved        */
277 #define RTC_TIMESTAMPONTAMPERDETECTION_DISABLE ((uint32_t)0x00000000U)  /*!< TimeStamp on Tamper Detection event is not saved */
278 
279 /**
280   * @}
281   */
282 
283 /** @defgroup RTCEx_Tamper_Pull_UP_Definitions RTCEx Tamper Pull UP Definitions
284   * @{
285   */
286 #define RTC_TAMPER_PULLUP_ENABLE  ((uint32_t)0x00000000U)  /*!< Tamper pins are pre-charged before sampling */
287 #define RTC_TAMPER_PULLUP_DISABLE  RTC_TAMPCR_TAMPPUDIS   /*!< Tamper pins pre-charge is disabled          */
288 
289 /**
290   * @}
291   */
292 
293 /** @defgroup RTCEx_Wakeup_Timer_Definitions RTCEx Wakeup Timer Definitions
294   * @{
295   */
296 #define RTC_WAKEUPCLOCK_RTCCLK_DIV16        ((uint32_t)0x00000000U)
297 #define RTC_WAKEUPCLOCK_RTCCLK_DIV8         RTC_CR_WUCKSEL_0
298 #define RTC_WAKEUPCLOCK_RTCCLK_DIV4         RTC_CR_WUCKSEL_1
299 #define RTC_WAKEUPCLOCK_RTCCLK_DIV2         ((uint32_t) (RTC_CR_WUCKSEL_0 | RTC_CR_WUCKSEL_1))
300 #define RTC_WAKEUPCLOCK_CK_SPRE_16BITS      RTC_CR_WUCKSEL_2
301 #define RTC_WAKEUPCLOCK_CK_SPRE_17BITS      ((uint32_t) (RTC_CR_WUCKSEL_1 | RTC_CR_WUCKSEL_2))
302 /**
303   * @}
304   */
305 
306 /** @defgroup RTCEx_Smooth_calib_period_Definitions RTCEx Smooth calib period Definitions
307   * @{
308   */
309 #define RTC_SMOOTHCALIB_PERIOD_32SEC   ((uint32_t)0x00000000U)   /*!< If RTCCLK = 32768 Hz, Smooth calibation
310                                                                      period is 32s,  else 2exp20 RTCCLK pulses */
311 #define RTC_SMOOTHCALIB_PERIOD_16SEC   RTC_CALR_CALW16          /*!< If RTCCLK = 32768 Hz, Smooth calibation
312                                                                      period is 16s, else 2exp19 RTCCLK pulses */
313 #define RTC_SMOOTHCALIB_PERIOD_8SEC    RTC_CALR_CALW8           /*!< If RTCCLK = 32768 Hz, Smooth calibation
314                                                                      period is 8s, else 2exp18 RTCCLK pulses */
315 
316 /**
317   * @}
318   */
319 
320 /** @defgroup RTCEx_Smooth_calib_Plus_pulses_Definitions RTCEx Smooth calib Plus pulses Definitions
321   * @{
322   */
323 #define RTC_SMOOTHCALIB_PLUSPULSES_SET    RTC_CALR_CALP            /*!< The number of RTCCLK pulses added
324                                                                         during a X -second window = Y - CALM[8:0]
325                                                                         with Y = 512, 256, 128 when X = 32, 16, 8 */
326 #define RTC_SMOOTHCALIB_PLUSPULSES_RESET  ((uint32_t)0x00000000U)   /*!< The number of RTCCLK pulses subbstited
327                                                                         during a 32-second window = CALM[8:0] */
328 
329 /**
330   * @}
331   */
332  /** @defgroup RTCEx_Calib_Output_selection_Definitions RTCEx Calib Output selection Definitions
333   * @{
334   */
335 #define RTC_CALIBOUTPUT_512HZ            ((uint32_t)0x00000000U)
336 #define RTC_CALIBOUTPUT_1HZ              RTC_CR_COSEL
337 
338 /**
339   * @}
340   */
341 
342 
343 /** @defgroup RTCEx_Add_1_Second_Parameter_Definition RTCEx Add 1 Second Parameter Definitions
344   * @{
345   */
346 #define RTC_SHIFTADD1S_RESET      ((uint32_t)0x00000000U)
347 #define RTC_SHIFTADD1S_SET        RTC_SHIFTR_ADD1S
348 /**
349   * @}
350   */
351   /** @defgroup RTCEx_Interrupts_Definitions RTCEx Interrupts Definitions
352   * @{
353   */
354 #if defined(RTC_TAMPER3_SUPPORT)
355 #define RTC_IT_TAMP3                      ((uint32_t)RTC_TAMPCR_TAMP3IE)  /*!< Enable Tamper 3 Interrupt     */
356 #endif
357 /**
358   * @}
359   */
360 
361 /** @defgroup RTCEx_Flags_Definitions RTCEx Flags Definitions
362   * @{
363   */
364 #if defined(RTC_TAMPER3_SUPPORT)
365 #define RTC_FLAG_TAMP3F                   ((uint32_t)RTC_ISR_TAMP3F)
366 #endif
367 /**
368   * @}
369   */
370 
371 /**
372   * @}
373   */
374 
375 /* Exported macros -----------------------------------------------------------*/
376 /** @defgroup RTCEx_Exported_Macros RTCEx Exported Macros
377   * @{
378   */
379 
380 /* ---------------------------------WAKEUPTIMER---------------------------------*/
381 /** @defgroup RTCEx_WakeUp_Timer RTC WakeUp Timer
382   * @{
383   */
384 /**
385   * @brief  Enable the RTC WakeUp Timer peripheral.
386   * @param __HANDLE__ specifies the RTC handle.
387   * @retval None
388   */
389 #define __HAL_RTC_WAKEUPTIMER_ENABLE(__HANDLE__)                      ((__HANDLE__)->Instance->CR |= (RTC_CR_WUTE))
390 
391 /**
392   * @brief  Disable the RTC WakeUp Timer peripheral.
393   * @param __HANDLE__ specifies the RTC handle.
394   * @retval None
395   */
396 #define __HAL_RTC_WAKEUPTIMER_DISABLE(__HANDLE__)                     ((__HANDLE__)->Instance->CR &= ~(RTC_CR_WUTE))
397 
398 /**
399   * @brief  Enable the RTC WakeUpTimer interrupt.
400   * @param __HANDLE__ specifies the RTC handle.
401   * @param __INTERRUPT__ specifies the RTC WakeUpTimer interrupt sources to be enabled.
402   *         This parameter can be:
403   *            @arg RTC_IT_WUT: WakeUpTimer interrupt
404   * @retval None
405   */
406 #define __HAL_RTC_WAKEUPTIMER_ENABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->CR |= (__INTERRUPT__))
407 
408 /**
409   * @brief  Disable the RTC WakeUpTimer interrupt.
410   * @param __HANDLE__ specifies the RTC handle.
411   * @param __INTERRUPT__ specifies the RTC WakeUpTimer interrupt sources to be disabled.
412   *         This parameter can be:
413   *            @arg RTC_IT_WUT: WakeUpTimer interrupt
414   * @retval None
415   */
416 #define __HAL_RTC_WAKEUPTIMER_DISABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__))
417 
418 /**
419   * @brief  Check whether the specified RTC WakeUpTimer interrupt has occurred or not.
420   * @param __HANDLE__ specifies the RTC handle.
421   * @param __INTERRUPT__ specifies the RTC WakeUpTimer interrupt to check.
422   *         This parameter can be:
423   *            @arg RTC_IT_WUT:  WakeUpTimer interrupt
424   * @retval None
425   */
426 #define __HAL_RTC_WAKEUPTIMER_GET_IT(__HANDLE__, __INTERRUPT__)       (((((__HANDLE__)->Instance->ISR) & ((__INTERRUPT__)>> 4U)) != 0U) ? 1U : 0U)
427 
428 /**
429   * @brief  Check whether the specified RTC Wake Up timer interrupt has been enabled or not.
430   * @param __HANDLE__ specifies the RTC handle.
431   * @param __INTERRUPT__ specifies the RTC Wake Up timer interrupt sources to check.
432   *         This parameter can be:
433   *            @arg RTC_IT_WUT:  WakeUpTimer interrupt
434   * @retval None
435   */
436 #define __HAL_RTC_WAKEUPTIMER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)   (((((__HANDLE__)->Instance->CR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
437 
438 /**
439   * @brief  Get the selected RTC WakeUpTimer's flag status.
440   * @param __HANDLE__ specifies the RTC handle.
441   * @param __FLAG__ specifies the RTC WakeUpTimer Flag is pending or not.
442   *          This parameter can be:
443   *             @arg RTC_FLAG_WUTF
444   *             @arg RTC_FLAG_WUTWF
445   * @retval None
446   */
447 #define __HAL_RTC_WAKEUPTIMER_GET_FLAG(__HANDLE__, __FLAG__)   (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U)
448 
449 /**
450   * @brief  Clear the RTC Wake Up timer's pending flags.
451   * @param __HANDLE__ specifies the RTC handle.
452   * @param __FLAG__ specifies the RTC WakeUpTimer Flag to clear.
453   *         This parameter can be:
454   *            @arg RTC_FLAG_WUTF
455   * @retval None
456   */
457 #define __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT))
458 
459 /**
460   * @brief  Enable interrupt on the RTC WakeUp Timer associated Exti line of core 1.
461   * @retval None
462   */
463 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT()       (EXTI->IMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
464 
465 /**
466   * @brief  Disable interrupt on the RTC WakeUp Timer associated Exti line of core 1.
467   * @retval None
468   */
469 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT()      (EXTI->IMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
470 
471 
472 /**
473   * @brief  Enable interrupt on the RTC WakeUp Timer associated Exti line of core 2.
474   * @retval None
475   */
476 #define __HAL_RTC_WAKEUPTIMER_EXTIC2_ENABLE_IT()       (EXTI->C2IMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
477 
478 /**
479   * @brief  Disable interrupt on the RTC WakeUp Timer associated Exti line of core 2.
480   * @retval None
481   */
482 #define __HAL_RTC_WAKEUPTIMER_EXTIC2_DISABLE_IT()      (EXTI->C2IMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
483 
484 
485 /**
486   * @brief  Enable event on the RTC WakeUp Timer associated Exti line of core 1.
487   * @retval None.
488   */
489 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_EVENT()    (EXTI->EMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
490 
491 /**
492   * @brief  Enable event on the RTC WakeUp Timer associated Exti line of core 2.
493   * @retval None.
494   */
495 #define __HAL_RTC_WAKEUPTIMER_EXTIC2_ENABLE_EVENT()    (EXTI->C2EMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
496 
497 
498 /**
499   * @brief  Disable event on the RTC WakeUp Timer associated Exti line of core 1.
500   * @retval None.
501   */
502 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_EVENT()   (EXTI->EMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
503 
504 /**
505   * @brief  Disable event on the RTC WakeUp Timer associated Exti line of core 2.
506   * @retval None.
507   */
508 #define __HAL_RTC_WAKEUPTIMER_EXTIC2_DISABLE_EVENT()   (EXTI->C2EMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
509 
510 
511 /*---------------*/
512 /**
513   * @brief  Enable falling edge trigger on the RTC WakeUp Timer associated Exti line.
514   * @retval None.
515   */
516 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_FALLING_EDGE()   (EXTI->FTSR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
517 
518 /**
519   * @brief  Disable falling edge trigger on the RTC WakeUp Timer associated Exti line.
520   * @retval None.
521   */
522 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_FALLING_EDGE()  (EXTI->FTSR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
523 
524 /**
525   * @brief  Enable rising edge trigger on the RTC WakeUp Timer associated Exti line.
526   * @retval None.
527   */
528 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE()    (EXTI->RTSR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
529 
530 /**
531   * @brief  Disable rising edge trigger on the RTC WakeUp Timer associated Exti line.
532   * @retval None.
533   */
534 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_RISING_EDGE()   (EXTI->RTSR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
535 
536 
537 /**
538   * @brief  Enable rising & falling edge trigger on the RTC WakeUp Timer associated Exti line.
539   * @retval None
540   */
541 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_FALLING_EDGE()  do { \
542                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE();  \
543                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_FALLING_EDGE(); \
544                                                                  } while(0U)
545 
546 /**
547   * @brief  Disable rising & falling edge trigger on the RTC WakeUp Timer associated Exti line.
548   * This parameter can be:
549   * @retval None
550   */
551 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_RISING_FALLING_EDGE()  do { \
552                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_RISING_EDGE();  \
553                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_FALLING_EDGE(); \
554                                                                   } while(0U)
555 
556 /**
557   * @brief Check whether the RTC WakeUp Timer associated Exti line interrupt flag is set or not of core 1.
558   * @retval Line Status.
559   */
560 #define __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG()              (EXTI->PR1 & RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
561 
562 /**
563   * @brief Check whether the RTC WakeUp Timer associated Exti line interrupt flag is set or not of core 2.
564   * @retval Line Status.
565   */
566 #define __HAL_RTC_WAKEUPTIMER_EXTIC2_GET_FLAG()            (EXTI->PR1 & RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
567 
568 
569 
570 /**
571   * @brief Clear the RTC WakeUp Timer associated Exti line flag of core 1.
572   * @retval None.
573   */
574 #define __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG()            (EXTI->PR1 = RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
575 
576 /**
577   * @brief Clear the RTC WakeUp Timer associated Exti line flag of core 2.
578   * @retval None.
579   */
580 #define __HAL_RTC_WAKEUPTIMER_EXTIC2_CLEAR_FLAG()          (EXTI->PR1 = RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
581 
582 
583 /*---------------*/
584 /**
585   * @brief Generate a Software interrupt on the RTC WakeUp Timer associated Exti line.
586   * @retval None.
587   */
588 #define __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT()         (EXTI->SWIER1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
589 /*---------------*/
590 
591 /**
592   * @}
593   */
594 
595 /* ---------------------------------TIMESTAMP---------------------------------*/
596 /** @defgroup RTCEx_Timestamp RTC Timestamp
597   * @{
598   */
599 /**
600   * @brief  Enable the RTC TimeStamp peripheral.
601   * @param __HANDLE__ specifies the RTC handle.
602   * @retval None
603   */
604 #define __HAL_RTC_TIMESTAMP_ENABLE(__HANDLE__)                       ((__HANDLE__)->Instance->CR |= (RTC_CR_TSE))
605 
606 /**
607   * @brief  Disable the RTC TimeStamp peripheral.
608   * @param __HANDLE__ specifies the RTC handle.
609   * @retval None
610   */
611 #define __HAL_RTC_TIMESTAMP_DISABLE(__HANDLE__)                      ((__HANDLE__)->Instance->CR &= ~(RTC_CR_TSE))
612 
613 /**
614   * @brief  Enable the RTC TimeStamp interrupt.
615   * @param __HANDLE__ specifies the RTC handle.
616   * @param __INTERRUPT__ specifies the RTC TimeStamp interrupt source to be enabled.
617   *         This parameter can be:
618   *            @arg RTC_IT_TS: TimeStamp interrupt
619   * @retval None
620   */
621 #define __HAL_RTC_TIMESTAMP_ENABLE_IT(__HANDLE__, __INTERRUPT__)     ((__HANDLE__)->Instance->CR |= (__INTERRUPT__))
622 
623 /**
624   * @brief  Disable the RTC TimeStamp interrupt.
625   * @param __HANDLE__ specifies the RTC handle.
626   * @param __INTERRUPT__ specifies the RTC TimeStamp interrupt source to be disabled.
627   *         This parameter can be:
628   *            @arg RTC_IT_TS: TimeStamp interrupt
629   * @retval None
630   */
631 #define __HAL_RTC_TIMESTAMP_DISABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__))
632 
633 /**
634   * @brief  Check whether the specified RTC TimeStamp interrupt has occurred or not.
635   * @param __HANDLE__ specifies the RTC handle.
636   * @param __INTERRUPT__ specifies the RTC TimeStamp interrupt to check.
637   *         This parameter can be:
638   *            @arg RTC_IT_TS: TimeStamp interrupt
639   * @retval None
640   */
641 #define __HAL_RTC_TIMESTAMP_GET_IT(__HANDLE__, __INTERRUPT__)        (((((__HANDLE__)->Instance->ISR) & ((__INTERRUPT__)>> 4U)) != 0U) ? 1U : 0U)
642 
643 /**
644   * @brief  Check whether the specified RTC Time Stamp interrupt has been enabled or not.
645   * @param __HANDLE__ specifies the RTC handle.
646   * @param __INTERRUPT__ specifies the RTC Time Stamp interrupt source to check.
647   *         This parameter can be:
648   *            @arg RTC_IT_TS: TimeStamp interrupt
649   * @retval None
650   */
651 #define __HAL_RTC_TIMESTAMP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)     (((((__HANDLE__)->Instance->CR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
652 
653 /**
654   * @brief  Get the selected RTC TimeStamp's flag status.
655   * @param __HANDLE__ specifies the RTC handle.
656   * @param __FLAG__ specifies the RTC TimeStamp Flag is pending or not.
657   *         This parameter can be:
658   *            @arg RTC_FLAG_TSF
659   *            @arg RTC_FLAG_TSOVF
660   * @retval None
661   */
662 #define __HAL_RTC_TIMESTAMP_GET_FLAG(__HANDLE__, __FLAG__)     (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U)
663 
664 /**
665   * @brief  Clear the RTC Time Stamp's pending flags.
666   * @param __HANDLE__ specifies the RTC handle.
667   * @param __FLAG__ specifies the RTC TimeStamp Flag to clear.
668   *          This parameter can be:
669   *             @arg RTC_FLAG_TSF
670   *             @arg RTC_FLAG_TSOVF
671   * @retval None
672   */
673 #define __HAL_RTC_TIMESTAMP_CLEAR_FLAG(__HANDLE__, __FLAG__)   ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT))
674 
675 
676 /**
677   * @}
678   */
679 
680 /* ---------------------------------TAMPER------------------------------------*/
681 /** @defgroup RTCEx_Tamper RTC Tamper
682   * @{
683   */
684 
685 #if defined(RTC_TAMPER1_SUPPORT)
686 /**
687   * @brief  Enable the RTC Tamper1 input detection.
688   * @param __HANDLE__ specifies the RTC handle.
689   * @retval None
690   */
691 #define __HAL_RTC_TAMPER1_ENABLE(__HANDLE__)                         ((__HANDLE__)->Instance->TAMPCR |= (RTC_TAMPCR_TAMP1E))
692 
693 /**
694   * @brief  Disable the RTC Tamper1 input detection.
695   * @param __HANDLE__ specifies the RTC handle.
696   * @retval None
697   */
698 #define __HAL_RTC_TAMPER1_DISABLE(__HANDLE__)                        ((__HANDLE__)->Instance->TAMPCR &= ~(RTC_TAMPCR_TAMP1E))
699 #endif /* RTC_TAMPER1_SUPPORT */
700 
701 /**
702   * @brief  Enable the RTC Tamper2 input detection.
703   * @param __HANDLE__ specifies the RTC handle.
704   * @retval None
705   */
706 #define __HAL_RTC_TAMPER2_ENABLE(__HANDLE__)                         ((__HANDLE__)->Instance->TAMPCR |= (RTC_TAMPCR_TAMP2E))
707 
708 /**
709   * @brief  Disable the RTC Tamper2 input detection.
710   * @param __HANDLE__ specifies the RTC handle.
711   * @retval None
712   */
713 #define __HAL_RTC_TAMPER2_DISABLE(__HANDLE__)                        ((__HANDLE__)->Instance->TAMPCR &= ~(RTC_TAMPCR_TAMP2E))
714 
715 #if defined(RTC_TAMPER3_SUPPORT)
716 /**
717   * @brief  Enable the RTC Tamper3 input detection.
718   * @param __HANDLE__ specifies the RTC handle.
719   * @retval None
720   */
721 #define __HAL_RTC_TAMPER3_ENABLE(__HANDLE__)                         ((__HANDLE__)->Instance->TAMPCR |= (RTC_TAMPCR_TAMP3E))
722 
723 /**
724   * @brief  Disable the RTC Tamper3 input detection.
725   * @param __HANDLE__ specifies the RTC handle.
726   * @retval None
727   */
728 #define __HAL_RTC_TAMPER3_DISABLE(__HANDLE__)                        ((__HANDLE__)->Instance->TAMPCR &= ~(RTC_TAMPCR_TAMP3E))
729 #endif /* RTC_TAMPER3_SUPPORT */
730 
731 
732 /**************************************************************************************************/
733 
734 /**
735   * @brief  Enable the RTC Tamper interrupt.
736   * @param __HANDLE__ specifies the RTC handle.
737   * @param __INTERRUPT__ specifies the RTC Tamper interrupt sources to be enabled.
738   *          This parameter can be any combination of the following values:
739   *             @arg  RTC_IT_TAMP: All tampers interrupts
740   *             @arg  RTC_IT_TAMP1: Tamper1 interrupt (*)
741   *             @arg  RTC_IT_TAMP2: Tamper2 interrupt
742   *             @arg  RTC_IT_TAMP3: Tamper3 interrupt (*)
743   *
744   *         (*)  Value not defined in all devices. \n
745   *
746   * @retval None
747   */
748 #define __HAL_RTC_TAMPER_ENABLE_IT(__HANDLE__, __INTERRUPT__)        ((__HANDLE__)->Instance->TAMPCR |= (__INTERRUPT__))
749 
750 /**
751   * @brief  Disable the RTC Tamper interrupt.
752   * @param __HANDLE__ specifies the RTC handle.
753   * @param __INTERRUPT__ specifies the RTC Tamper interrupt sources to be disabled.
754   *         This parameter can be any combination of the following values:
755   *             @arg  RTC_IT_TAMP: All tampers interrupts
756   *             @arg  RTC_IT_TAMP1: Tamper1 interrupt (*)
757   *             @arg  RTC_IT_TAMP2: Tamper2 interrupt
758   *             @arg  RTC_IT_TAMP3: Tamper3 interrupt (*)
759   *
760   *         (*)  Value not defined in all devices. \n
761   *
762   * @retval None
763   */
764 #define __HAL_RTC_TAMPER_DISABLE_IT(__HANDLE__, __INTERRUPT__)       ((__HANDLE__)->Instance->TAMPCR &= ~(__INTERRUPT__))
765 
766 /**************************************************************************************************/
767 
768 /**
769   * @brief  Check whether the specified RTC Tamper interrupt has occurred or not.
770   * @param __HANDLE__ specifies the RTC handle.
771   * @param __INTERRUPT__ specifies the RTC Tamper interrupt to check.
772   *         This parameter can be:
773   *             @arg  RTC_IT_TAMP1: Tamper1 interrupt (*)
774   *             @arg  RTC_IT_TAMP2: Tamper2 interrupt
775   *             @arg  RTC_IT_TAMP3: Tamper3 interrupt (*)
776   *
777   *         (*)  Value not defined in all devices. \n
778   *
779   * @retval None
780   */
781 #if defined(RTC_TAMPER1_SUPPORT) && defined(RTC_TAMPER3_SUPPORT)
782 #define __HAL_RTC_TAMPER_GET_IT(__HANDLE__, __INTERRUPT__)    (((__INTERRUPT__) == RTC_IT_TAMP1) ? (((((__HANDLE__)->Instance->ISR) & ((__INTERRUPT__)>> 3U)) != 0U) ? 1U : 0U) : \
783                                                                ((__INTERRUPT__) == RTC_IT_TAMP2) ? (((((__HANDLE__)->Instance->ISR) & ((__INTERRUPT__)>> 5U)) != 0U) ? 1U : 0U) : \
784                                                                ((__INTERRUPT__) == RTC_IT_TAMP3) ? (((((__HANDLE__)->Instance->ISR) & ((__INTERRUPT__)>> 7U)) != 0U) ? 1U : 0U))
785 #else
786 #define __HAL_RTC_TAMPER_GET_IT(__HANDLE__, __INTERRUPT__)    (((__INTERRUPT__) == RTC_IT_TAMP1) ? (((((__HANDLE__)->Instance->ISR) & ((__INTERRUPT__)>> 3U)) != 0U) ? 1U : 0U))
787 #endif
788 
789 /**************************************************************************************************/
790 
791 /**
792   * @brief  Check whether the specified RTC Tamper interrupt has been enabled or not.
793   * @param __HANDLE__ specifies the RTC handle.
794   * @param __INTERRUPT__ specifies the RTC Tamper interrupt source to check.
795   *         This parameter can be:
796   *            @arg  RTC_IT_TAMP: All tampers interrupts
797   *             @arg  RTC_IT_TAMP1: Tamper1 interrupt (*)
798   *             @arg  RTC_IT_TAMP2: Tamper2 interrupt
799   *             @arg  RTC_IT_TAMP3: Tamper3 interrupt (*)
800   *
801   *         (*)  Value not defined in all devices. \n
802   *
803   * @retval None
804   */
805 #define __HAL_RTC_TAMPER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)    (((((__HANDLE__)->Instance->TAMPCR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
806 
807 
808 /**
809   * @brief  Get the selected RTC Tamper's flag status.
810   * @param __HANDLE__ specifies the RTC handle.
811   * @param __FLAG__ specifies the RTC Tamper Flag is pending or not.
812   *          This parameter can be:
813   *             @arg RTC_FLAG_TAMP1F: Tamper1 flag (*)
814   *             @arg RTC_FLAG_TAMP2F: Tamper2 flag
815   *             @arg RTC_FLAG_TAMP3F: Tamper3 flag (*)
816   *
817   *         (*)  Value not defined in all devices. \n
818   *
819   * @retval None
820   */
821 #define __HAL_RTC_TAMPER_GET_FLAG(__HANDLE__, __FLAG__)        (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U)
822 
823 /**
824   * @brief  Clear the RTC Tamper's pending flags.
825   * @param __HANDLE__ specifies the RTC handle.
826   * @param __FLAG__ specifies the RTC Tamper Flag to clear.
827   *          This parameter can be:
828   *             @arg RTC_FLAG_TAMP1F: Tamper1 flag (*)
829   *             @arg RTC_FLAG_TAMP2F: Tamper2 flag
830   *             @arg RTC_FLAG_TAMP3F: Tamper3 flag (*)
831   *
832   *         (*)  Value not defined in all devices. \n
833   *
834   * @retval None
835   */
836 #define __HAL_RTC_TAMPER_CLEAR_FLAG(__HANDLE__, __FLAG__)      ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT))
837 
838 
839 /**************************************************************************************************/
840 
841 
842 #if defined(RTC_INTERNALTS_SUPPORT)
843 /**
844   * @brief  Enable the RTC internal TimeStamp peripheral.
845   * @param __HANDLE__ specifies the RTC handle.
846   * @retval None
847   */
848 #define __HAL_RTC_INTERNAL_TIMESTAMP_ENABLE(__HANDLE__)                ((__HANDLE__)->Instance->CR |= (RTC_CR_ITSE))
849 
850 /**
851   * @brief  Disable the RTC internal TimeStamp peripheral.
852   * @param __HANDLE__ specifies the RTC handle.
853   * @retval None
854   */
855 #define __HAL_RTC_INTERNAL_TIMESTAMP_DISABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR &= ~(RTC_CR_ITSE))
856 
857 /**
858   * @brief  Get the selected RTC Internal Time Stamp's flag status.
859   * @param __HANDLE__ specifies the RTC handle.
860   * @param __FLAG__ specifies the RTC Internal Time Stamp Flag is pending or not.
861   *         This parameter can be:
862   *            @arg RTC_FLAG_ITSF
863   * @retval None
864   */
865 #define __HAL_RTC_INTERNAL_TIMESTAMP_GET_FLAG(__HANDLE__, __FLAG__)    (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U)
866 
867 /**
868   * @brief  Clear the RTC Internal Time Stamp's pending flags.
869   * @param __HANDLE__ specifies the RTC handle.
870   * @param __FLAG__ specifies the RTC Internal Time Stamp Flag source to clear.
871   *          This parameter can be:
872   *             @arg RTC_FLAG_ITSF
873   * @retval None
874   */
875 #define __HAL_RTC_INTERNAL_TIMESTAMP_CLEAR_FLAG(__HANDLE__, __FLAG__)  ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT))
876 #endif
877 /**************************************************************************************************/
878 
879 /**
880   * @}
881   */
882 
883 /* --------------------------TAMPER/TIMESTAMP---------------------------------*/
884 /** @defgroup RTCEx_Tamper_Timestamp EXTI RTC Tamper Timestamp EXTI
885   * @{
886   */
887 
888 /* TAMPER TIMESTAMP EXTI */
889 /* --------------------- */
890 
891 /**
892   * @brief  Enable interrupt on the RTC Tamper and Timestamp associated Exti line of core 1.
893   * @retval None
894   */
895 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT()        (EXTI->IMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
896 
897 /**
898   * @brief  Enable interrupt on the RTC Tamper and Timestamp associated Exti line of core 2.
899   * @retval None
900   */
901 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTIC2_ENABLE_IT()      (EXTI->C2IMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
902 
903 /**
904   * @brief  Disable interrupt on the RTC Tamper and Timestamp associated Exti line of core 1.
905   * @retval None
906   */
907 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT()       (EXTI->IMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
908 
909 /**
910   * @brief  Disable interrupt on the RTC Tamper and Timestamp associated Exti line of core 2.
911   * @retval None
912   */
913 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTIC2_DISABLE_IT()     (EXTI->C2IMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
914 
915 /**
916   * @brief  Enable event on the RTC Tamper and Timestamp associated Exti line of core 1.
917   * @retval None.
918   */
919 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_EVENT()    (EXTI->EMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
920 
921 /**
922   * @brief  Enable event on the RTC Tamper and Timestamp associated Exti line of core 2.
923   * @retval None.
924   */
925 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTIC2_ENABLE_EVENT()  (EXTI->C2EMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
926 
927 /**
928   * @brief  Disable event on the RTC Tamper and Timestamp associated Exti line of core 1.
929   * @retval None.
930   */
931 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_EVENT()   (EXTI->EMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
932 
933 /**
934   * @brief  Disable event on the RTC Tamper and Timestamp associated Exti line of core 2.
935   * @retval None.
936   */
937 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTIC2_DISABLE_EVENT() (EXTI->C2EMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
938 
939 /*-----------------*/
940 /**
941   * @brief  Enable falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
942   * @retval None.
943   */
944 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_FALLING_EDGE()   (EXTI->FTSR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
945 
946 /**
947   * @brief  Disable falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
948   * @retval None.
949   */
950 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_FALLING_EDGE()  (EXTI->FTSR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
951 
952 /**
953   * @brief  Enable rising edge trigger on the RTC Tamper and Timestamp associated Exti line.
954   * @retval None.
955   */
956 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_RISING_EDGE()    (EXTI->RTSR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
957 
958 /**
959   * @brief  Disable rising edge trigger on the RTC Tamper and Timestamp associated Exti line.
960   * @retval None.
961   */
962 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_RISING_EDGE()   (EXTI->RTSR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
963 
964 
965 /**
966   * @brief  Enable rising & falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
967   * @retval None.
968   */
969 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_RISING_FALLING_EDGE()  do { \
970                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_RISING_EDGE();  \
971                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_FALLING_EDGE(); \
972                                                                       } while(0U)
973 
974 /**
975   * @brief  Disable rising & falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
976   * This parameter can be:
977   * @retval None.
978   */
979 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_RISING_FALLING_EDGE()  do { \
980                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_RISING_EDGE();  \
981                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_FALLING_EDGE(); \
982                                                                        } while(0U)
983 
984 /**
985   * @brief Check whether the RTC Tamper and Timestamp associated Exti line interrupt flag is set or not of core 1.
986   * @retval Line Status.
987   */
988 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG()         (EXTI->PR1 & RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
989 
990 /**
991   * @brief Check whether the RTC Tamper and Timestamp associated Exti line interrupt flag is set or not of core 2.
992   * @retval Line Status.
993   */
994 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTIC2_GET_FLAG()       (EXTI->PR2 & RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
995 
996 /**
997   * @brief Clear the RTC Tamper and Timestamp associated Exti line flag of core 1.
998   * @retval None.
999   */
1000 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG()       (EXTI->PR1 = RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1001 
1002 /**
1003   * @brief Clear the RTC Tamper and Timestamp associated Exti line flag of core 2.
1004   * @retval None.
1005   */
1006 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTIC2_CLEAR_FLAG()     (EXTI->PR1 = RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1007 
1008 /**
1009   * @brief Generate a Software interrupt on the RTC Tamper and Timestamp associated Exti line
1010   * @retval None.
1011   */
1012 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT()    (EXTI->SWIER1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1013 
1014 
1015 
1016 /**
1017   * @}
1018   */
1019 
1020 /* ------------------------------Calibration----------------------------------*/
1021 /** @defgroup RTCEx_Calibration RTC Calibration
1022   * @{
1023   */
1024 
1025 /**
1026   * @brief  Enable the RTC calibration output.
1027   * @param __HANDLE__ specifies the RTC handle.
1028   * @retval None
1029   */
1030 #define __HAL_RTC_CALIBRATION_OUTPUT_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR |= (RTC_CR_COE))
1031 
1032 /**
1033   * @brief  Disable the calibration output.
1034   * @param __HANDLE__ specifies the RTC handle.
1035   * @retval None
1036   */
1037 #define __HAL_RTC_CALIBRATION_OUTPUT_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->CR &= ~(RTC_CR_COE))
1038 
1039 
1040 /**
1041   * @brief  Enable the clock reference detection.
1042   * @param __HANDLE__ specifies the RTC handle.
1043   * @retval None
1044   */
1045 #define __HAL_RTC_CLOCKREF_DETECTION_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR |= (RTC_CR_REFCKON))
1046 
1047 /**
1048   * @brief  Disable the clock reference detection.
1049   * @param __HANDLE__ specifies the RTC handle.
1050   * @retval None
1051   */
1052 #define __HAL_RTC_CLOCKREF_DETECTION_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->CR &= ~(RTC_CR_REFCKON))
1053 
1054 
1055 /**
1056   * @brief  Get the selected RTC shift operation's flag status.
1057   * @param __HANDLE__ specifies the RTC handle.
1058   * @param __FLAG__ specifies the RTC shift operation Flag is pending or not.
1059   *          This parameter can be:
1060   *             @arg RTC_FLAG_SHPF
1061   * @retval None
1062   */
1063 #define __HAL_RTC_SHIFT_GET_FLAG(__HANDLE__, __FLAG__)                (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U)? 1U : 0U)
1064 /**
1065   * @}
1066   */
1067 
1068 /**
1069   * @}
1070   */
1071 
1072 /* Exported functions --------------------------------------------------------*/
1073 /** @defgroup RTCEx_Exported_Functions RTCEx Exported Functions
1074   * @{
1075   */
1076 
1077 /* RTC TimeStamp and Tamper functions *****************************************/
1078 /** @defgroup RTCEx_Exported_Functions_Group1 Extended RTC TimeStamp and Tamper functions
1079  * @{
1080  */
1081 
1082 HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin);
1083 HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp_IT(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin);
1084 HAL_StatusTypeDef HAL_RTCEx_DeactivateTimeStamp(RTC_HandleTypeDef *hrtc);
1085 #if defined(RTC_INTERNALTS_SUPPORT)
1086 HAL_StatusTypeDef HAL_RTCEx_SetInternalTimeStamp(RTC_HandleTypeDef *hrtc);
1087 HAL_StatusTypeDef HAL_RTCEx_DeactivateInternalTimeStamp(RTC_HandleTypeDef *hrtc);
1088 #endif
1089 HAL_StatusTypeDef HAL_RTCEx_GetTimeStamp(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTimeStamp, RTC_DateTypeDef *sTimeStampDate, uint32_t Format);
1090 
1091 HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef* sTamper);
1092 HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef* sTamper);
1093 HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper);
1094 void              HAL_RTCEx_TamperTimeStampIRQHandler(RTC_HandleTypeDef *hrtc);
1095 
1096 #if defined(RTC_TAMPER1_SUPPORT)
1097 void              HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc);
1098 #endif /* RTC_TAMPER1_SUPPORT */
1099 void              HAL_RTCEx_Tamper2EventCallback(RTC_HandleTypeDef *hrtc);
1100 #if defined(RTC_TAMPER3_SUPPORT)
1101 void              HAL_RTCEx_Tamper3EventCallback(RTC_HandleTypeDef *hrtc);
1102 #endif /* RTC_TAMPER3_SUPPORT */
1103 void              HAL_RTCEx_TimeStampEventCallback(RTC_HandleTypeDef *hrtc);
1104 HAL_StatusTypeDef HAL_RTCEx_PollForTimeStampEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1105 #if defined(RTC_TAMPER1_SUPPORT)
1106 HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1107 #endif /* RTC_TAMPER1_SUPPORT */
1108 HAL_StatusTypeDef HAL_RTCEx_PollForTamper2Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1109 #if defined(RTC_TAMPER3_SUPPORT)
1110 HAL_StatusTypeDef HAL_RTCEx_PollForTamper3Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1111 #endif /* RTC_TAMPER3_SUPPORT */
1112 /**
1113   * @}
1114   */
1115 
1116 /* RTC Wake-up functions ******************************************************/
1117 /** @defgroup RTCEx_Exported_Functions_Group2 Extended RTC Wake-up functions
1118  * @{
1119  */
1120 
1121 HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock);
1122 HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock);
1123 HAL_StatusTypeDef HAL_RTCEx_DeactivateWakeUpTimer(RTC_HandleTypeDef *hrtc);
1124 uint32_t          HAL_RTCEx_GetWakeUpTimer(RTC_HandleTypeDef *hrtc);
1125 void              HAL_RTCEx_WakeUpTimerIRQHandler(RTC_HandleTypeDef *hrtc);
1126 void              HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc);
1127 HAL_StatusTypeDef HAL_RTCEx_PollForWakeUpTimerEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1128 /**
1129   * @}
1130   */
1131 
1132 /* Extended Control functions ************************************************/
1133 /** @defgroup RTCEx_Exported_Functions_Group3 Extended Peripheral Control functions
1134  * @{
1135  */
1136 
1137 void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data);
1138 uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister);
1139 
1140 HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmoothCalibMinusPulsesValue);
1141 HAL_StatusTypeDef HAL_RTCEx_SetSynchroShift(RTC_HandleTypeDef *hrtc, uint32_t ShiftAdd1S, uint32_t ShiftSubFS);
1142 HAL_StatusTypeDef HAL_RTCEx_SetCalibrationOutPut(RTC_HandleTypeDef *hrtc, uint32_t CalibOutput);
1143 HAL_StatusTypeDef HAL_RTCEx_DeactivateCalibrationOutPut(RTC_HandleTypeDef *hrtc);
1144 HAL_StatusTypeDef HAL_RTCEx_SetRefClock(RTC_HandleTypeDef *hrtc);
1145 HAL_StatusTypeDef HAL_RTCEx_DeactivateRefClock(RTC_HandleTypeDef *hrtc);
1146 HAL_StatusTypeDef HAL_RTCEx_EnableBypassShadow(RTC_HandleTypeDef *hrtc);
1147 HAL_StatusTypeDef HAL_RTCEx_DisableBypassShadow(RTC_HandleTypeDef *hrtc);
1148 /**
1149   * @}
1150   */
1151 
1152 /* Extended RTC features functions *******************************************/
1153 /** @defgroup RTCEx_Exported_Functions_Group4 Extended features functions
1154  * @{
1155  */
1156 void              HAL_RTCEx_AlarmBEventCallback(RTC_HandleTypeDef *hrtc);
1157 HAL_StatusTypeDef HAL_RTCEx_PollForAlarmBEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1158 /**
1159   * @}
1160   */
1161 
1162 /**
1163   * @}
1164   */
1165 
1166 /* Private types -------------------------------------------------------------*/
1167 /* Private variables ---------------------------------------------------------*/
1168 /* Private constants ---------------------------------------------------------*/
1169 /** @defgroup RTCEx_Private_Constants RTCEx Private Constants
1170   * @{
1171   */
1172 
1173 /* Masks Definition */
1174 
1175 #if defined(RTC_TAMPER1_SUPPORT) && defined(RTC_TAMPER3_SUPPORT)
1176 
1177 #define RTC_FLAGS_MASK          ((uint32_t) (RTC_FLAG_RECALPF | RTC_FLAG_TAMP3F | RTC_FLAG_TAMP2F | \
1178                                              RTC_FLAG_TAMP1F| RTC_FLAG_TSOVF | RTC_FLAG_TSF       | \
1179                                              RTC_FLAG_WUTF | RTC_FLAG_ALRBF | RTC_FLAG_ALRAF      | \
1180                                              RTC_FLAG_INITF | RTC_FLAG_RSF                        | \
1181                                              RTC_FLAG_INITS | RTC_FLAG_SHPF | RTC_FLAG_WUTWF      | \
1182                                              RTC_FLAG_ALRBWF | RTC_FLAG_ALRAWF))
1183 
1184 #define RTC_TAMPCR_TAMPXE     ((uint32_t) (RTC_TAMPCR_TAMP3E | RTC_TAMPCR_TAMP2E | RTC_TAMPCR_TAMP1E))
1185 #define RTC_TAMPCR_TAMPXIE    ((uint32_t) (RTC_TAMPER1_INTERRUPT | RTC_TAMPER2_INTERRUPT | \
1186                                            RTC_TAMPER3_INTERRUPT | RTC_ALL_TAMPER_INTERRUPT))
1187 
1188 #else
1189 
1190 #define RTC_FLAGS_MASK          ((uint32_t) (RTC_FLAG_RECALPF | RTC_FLAG_TAMP2F                  |  \
1191                                              RTC_FLAG_TSOVF | RTC_FLAG_TSF | RTC_FLAG_WUTF       | \
1192                                              RTC_FLAG_ALRBF | RTC_FLAG_ALRAF                     | \
1193                                              RTC_FLAG_INITF | RTC_FLAG_RSF | RTC_FLAG_INITS      | \
1194                                              RTC_FLAG_SHPF | RTC_FLAG_WUTWF |RTC_FLAG_ALRBWF     | \
1195                                              RTC_FLAG_ALRAWF))
1196 
1197 #define RTC_TAMPCR_TAMPXE     ((uint32_t) (RTC_TAMPCR_TAMP2E))
1198 #define RTC_TAMPCR_TAMPXIE    ((uint32_t) (RTC_TAMPER2_INTERRUPT | RTC_ALL_TAMPER_INTERRUPT))
1199 
1200 #endif
1201 
1202 #define RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT  (EXTI_IMR1_IM18)    /*!< External interrupt line 18 Connected to the RTC Tamper and Time Stamp events */
1203 #define RTC_EXTI_LINE_WAKEUPTIMER_EVENT       (EXTI_IMR1_IM19)    /*!< External interrupt line 19 Connected to the RTC Wakeup event */
1204 
1205 /**
1206   * @}
1207   */
1208 
1209 /* Private macros ------------------------------------------------------------*/
1210 /** @defgroup RTCEx_Private_Macros RTCEx Private Macros
1211   * @{
1212   */
1213 
1214 /** @defgroup RTCEx_IS_RTC_Definitions Private macros to check input parameters
1215   * @{
1216   */
1217 
1218 #define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_OUTPUT_DISABLE) || \
1219                                ((OUTPUT) == RTC_OUTPUT_ALARMA)  || \
1220                                ((OUTPUT) == RTC_OUTPUT_ALARMB)  || \
1221                                ((OUTPUT) == RTC_OUTPUT_WAKEUP))
1222 
1223 #define IS_RTC_BKP(BKP)                   ((BKP) < (uint32_t) RTC_BKP_NUMBER)
1224 
1225 #define IS_TIMESTAMP_EDGE(EDGE) (((EDGE) == RTC_TIMESTAMPEDGE_RISING) || \
1226                                  ((EDGE) == RTC_TIMESTAMPEDGE_FALLING))
1227 
1228 #define  IS_RTC_TAMPER(TAMPER)  ((((TAMPER) & ((uint32_t)(0xFFFFFFFFU ^ RTC_TAMPCR_TAMPXE))) == 0x00U) && ((TAMPER) != 0U))
1229 
1230 #define IS_RTC_TAMPER_INTERRUPT(INTERRUPT) ((((INTERRUPT) & (uint32_t)(0xFFFFFFFFU ^ RTC_TAMPCR_TAMPXIE)) == 0x00U) && ((INTERRUPT) != 0U))
1231 
1232 #define IS_RTC_TIMESTAMP_PIN(PIN)  (((PIN) == RTC_TIMESTAMPPIN_DEFAULT))
1233 
1234 #define IS_RTC_TAMPER_TRIGGER(TRIGGER) (((TRIGGER) == RTC_TAMPERTRIGGER_RISINGEDGE) || \
1235                                         ((TRIGGER) == RTC_TAMPERTRIGGER_FALLINGEDGE) || \
1236                                         ((TRIGGER) == RTC_TAMPERTRIGGER_LOWLEVEL) || \
1237                                         ((TRIGGER) == RTC_TAMPERTRIGGER_HIGHLEVEL))
1238 
1239 #define IS_RTC_TAMPER_ERASE_MODE(MODE)             (((MODE) == RTC_TAMPER_ERASE_BACKUP_ENABLE) || \
1240                                                     ((MODE) == RTC_TAMPER_ERASE_BACKUP_DISABLE))
1241 
1242 #define IS_RTC_TAMPER_MASKFLAG_STATE(STATE)        (((STATE) == RTC_TAMPERMASK_FLAG_ENABLE) || \
1243                                                     ((STATE) == RTC_TAMPERMASK_FLAG_DISABLE))
1244 
1245 #define IS_RTC_TAMPER_FILTER(FILTER)  (((FILTER) == RTC_TAMPERFILTER_DISABLE) || \
1246                                        ((FILTER) == RTC_TAMPERFILTER_2SAMPLE) || \
1247                                        ((FILTER) == RTC_TAMPERFILTER_4SAMPLE) || \
1248                                        ((FILTER) == RTC_TAMPERFILTER_8SAMPLE))
1249 
1250 #define IS_RTC_TAMPER_SAMPLING_FREQ(FREQ) (((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768)|| \
1251                                            ((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV16384)|| \
1252                                            ((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV8192) || \
1253                                            ((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV4096) || \
1254                                            ((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV2048) || \
1255                                            ((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV1024) || \
1256                                            ((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV512)  || \
1257                                           ((FREQ) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV256))
1258 
1259 #define IS_RTC_TAMPER_PRECHARGE_DURATION(DURATION) (((DURATION) == RTC_TAMPERPRECHARGEDURATION_1RTCCLK) || \
1260                                                     ((DURATION) == RTC_TAMPERPRECHARGEDURATION_2RTCCLK) || \
1261                                                     ((DURATION) == RTC_TAMPERPRECHARGEDURATION_4RTCCLK) || \
1262                                                    ((DURATION) == RTC_TAMPERPRECHARGEDURATION_8RTCCLK))
1263 
1264 #define IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION(DETECTION) (((DETECTION) == RTC_TIMESTAMPONTAMPERDETECTION_ENABLE) || \
1265                                                               ((DETECTION) == RTC_TIMESTAMPONTAMPERDETECTION_DISABLE))
1266 
1267 #define IS_RTC_TAMPER_PULLUP_STATE(STATE) (((STATE) == RTC_TAMPER_PULLUP_ENABLE) || \
1268                                            ((STATE) == RTC_TAMPER_PULLUP_DISABLE))
1269 
1270 #define IS_RTC_WAKEUP_CLOCK(CLOCK) (((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV16)   || \
1271                                     ((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV8)    || \
1272                                     ((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV4)    || \
1273                                     ((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV2)    || \
1274                                     ((CLOCK) == RTC_WAKEUPCLOCK_CK_SPRE_16BITS) || \
1275                                     ((CLOCK) == RTC_WAKEUPCLOCK_CK_SPRE_17BITS))
1276 
1277 #define IS_RTC_WAKEUP_COUNTER(COUNTER)  ((COUNTER) <= RTC_WUTR_WUT)
1278 
1279 #define IS_RTC_SMOOTH_CALIB_PERIOD(PERIOD) (((PERIOD) == RTC_SMOOTHCALIB_PERIOD_32SEC) || \
1280                                             ((PERIOD) == RTC_SMOOTHCALIB_PERIOD_16SEC) || \
1281                                             ((PERIOD) == RTC_SMOOTHCALIB_PERIOD_8SEC))
1282 
1283 #define IS_RTC_SMOOTH_CALIB_PLUS(PLUS) (((PLUS) == RTC_SMOOTHCALIB_PLUSPULSES_SET) || \
1284                                         ((PLUS) == RTC_SMOOTHCALIB_PLUSPULSES_RESET))
1285 
1286 
1287 /** @defgroup RTCEx_Smooth_calib_Minus_pulses_Definitions RTCEx Smooth calib Minus pulses Definitions
1288   * @{
1289   */
1290 #define  IS_RTC_SMOOTH_CALIB_MINUS(VALUE) ((VALUE) <= RTC_CALR_CALM)
1291 /**
1292   * @}
1293   */
1294 
1295 
1296 #define IS_RTC_SHIFT_ADD1S(SEL) (((SEL) == RTC_SHIFTADD1S_RESET) || \
1297                                  ((SEL) == RTC_SHIFTADD1S_SET))
1298 
1299 
1300 
1301 /** @defgroup RTCEx_Substract_Fraction_Of_Second_Value RTCEx Substract Fraction Of Second Value
1302   * @{
1303   */
1304 #define IS_RTC_SHIFT_SUBFS(FS) ((FS) <= RTC_SHIFTR_SUBFS)
1305 /**
1306   * @}
1307   */
1308 #define IS_RTC_CALIB_OUTPUT(OUTPUT)  (((OUTPUT) == RTC_CALIBOUTPUT_512HZ) || \
1309                                       ((OUTPUT) == RTC_CALIBOUTPUT_1HZ))
1310 
1311 /**
1312   * @}
1313   */
1314 
1315 /**
1316   * @}
1317   */
1318 
1319 
1320 
1321 /**
1322   * @}
1323   */
1324 
1325 /**
1326   * @}
1327   */
1328 
1329 #ifdef __cplusplus
1330 }
1331 #endif
1332 
1333 #endif /* STM32WBxx_HAL_RTC_EX_H */
1334 
1335 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
1336