1 /**
2   ******************************************************************************
3   * @file    stm32h7xx_hal_rtc_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of RTC HAL Extension module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2017 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 STM32H7xx_HAL_RTC_EX_H
21 #define STM32H7xx_HAL_RTC_EX_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif /* __cplusplus */
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32h7xx_hal_def.h"
29 
30 /** @addtogroup STM32H7xx_HAL_Driver
31   * @{
32   */
33 
34 /** @defgroup RTCEx RTCEx
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 
40 /** @defgroup RTCEx_Exported_Types RTCEx Exported Types
41   * @{
42   */
43 
44 /** @defgroup RTCEx_Tamper_structure_definition RTC Tamper structure definition
45   * @{
46   */
47 typedef struct
48 {
49   uint32_t Tamper;                      /*!< Specifies the Tamper Pin.
50                                              This parameter can be a value of @ref RTCEx_Tamper_Pins_Definitions */
51 
52   uint32_t Interrupt;                   /*!< Specifies the Tamper Interrupt.
53                                              This parameter can be a value of @ref  RTCEx_Tamper_Interrupt_Definitions */
54 
55   uint32_t Trigger;                     /*!< Specifies the Tamper Trigger.
56                                              This parameter can be a value of @ref RTCEx_Tamper_Trigger_Definitions */
57 
58   uint32_t NoErase;                     /*!< Specifies the Tamper no erase mode.
59                                              This parameter can be a value of @ref RTCEx_Tamper_EraseBackUp_Definitions */
60 
61   uint32_t MaskFlag;                     /*!< Specifies the Tamper Flag masking.
62                                              This parameter can be a value of @ref RTCEx_Tamper_MaskFlag_Definitions   */
63 
64   uint32_t Filter;                      /*!< Specifies the TAMP Filter Tamper.
65                                              This parameter can be a value of @ref RTCEx_Tamper_Filter_Definitions */
66 
67   uint32_t SamplingFrequency;           /*!< Specifies the sampling frequency.
68                                              This parameter can be a value of @ref RTCEx_Tamper_Sampling_Frequencies_Definitions */
69 
70   uint32_t PrechargeDuration;           /*!< Specifies the Precharge Duration .
71                                              This parameter can be a value of @ref RTCEx_Tamper_Pin_Precharge_Duration_Definitions */
72 
73   uint32_t TamperPullUp;                /*!< Specifies the Tamper PullUp .
74                                              This parameter can be a value of @ref RTCEx_Tamper_Pull_UP_Definitions */
75 
76   uint32_t TimeStampOnTamperDetection;  /*!< Specifies the TimeStampOnTamperDetection.
77                                              This parameter can be a value of @ref RTCEx_Tamper_TimeStampOnTamperDetection_Definitions */
78 } RTC_TamperTypeDef;
79 /**
80   * @}
81   */
82 
83 #if defined(TAMP)
84 /** @defgroup RTCEx_Internal_Tamper_structure_definition RTCEx Internal Tamper structure definition
85   * @{
86   */
87 typedef struct
88 {
89   uint32_t IntTamper;                   /*!< Specifies the Internal Tamper Pin.
90                                              This parameter can be a value of @ref RTCEx_Internal_Tamper_Pins_Definitions */
91 
92   uint32_t TimeStampOnTamperDetection;  /*!< Specifies the TimeStampOnTamperDetection.
93                                              This parameter can be a value of @ref RTCEx_Tamper_TimeStampOnTamperDetection_Definitions */
94 } RTC_InternalTamperTypeDef;
95 /**
96   * @}
97   */
98 
99 /** @defgroup RTCEx_Active_Seed_Size Seed size Definitions
100   * @{
101   */
102 #define RTC_ATAMP_SEED_NB_UINT32        4U
103 /**
104   * @}
105   */
106 
107 /** @defgroup RTCEx_Active_Tampers_Number Active Tampers number Definitions
108   * @{
109   */
110 #define RTC_TAMP_NB                     3u
111 /**
112   * @}
113   */
114 
115 /** @defgroup RTCEx_ActiveTamper_structures_definition RTC Active Tamper structures definitions
116   * @{
117   */
118 typedef struct
119 {
120   uint32_t Enable;                      /*!< Specifies the Tamper input is active.
121                                              This parameter can be a value of @ref RTCEx_ActiveTamper_Enable */
122 
123   uint32_t Interrupt;                    /*!< Specifies the interrupt mode
124                                              This parameter can be a value of @ref RTCEx_ActiveTamper_Interrupt */
125 
126   uint32_t Output;                      /*!< Specifies the TAMP output to be compared with.
127                                              The same output can be used for several tamper inputs.
128                                              This parameter can be a value of @ref RTCEx_ActiveTamper_Sel */
129 
130   uint32_t NoErase;                     /*!< Specifies the Tamper no erase mode.
131                                              This parameter can be a value of @ref RTCEx_Tamper_EraseBackUp_Definitions */
132 
133   uint32_t MaskFlag;                    /*!< Specifies the Tamper Flag masking.
134                                              This parameter can be a value of @ref RTCEx_Tamper_MaskFlag_Definitions */
135 
136 } RTC_ATampInputTypeDef;
137 
138 
139 typedef struct
140 {
141   uint32_t ActiveFilter;                /*!< Specifies the Active tamper filter enable.
142                                              This parameter can be a value of @ref RTCEx_ActiveTamper_Filter */
143 
144   uint32_t ActiveAsyncPrescaler;        /*!< Specifies the Active Tamper asynchronous Prescaler clock.
145                                              This parameter can be a value of @ref RTCEx_ActiveTamper_Async_prescaler */
146 
147   uint32_t TimeStampOnTamperDetection;  /*!< Specifies the timeStamp on tamper detection.
148                                              This parameter can be a value of @ref RTCEx_Tamper_TimeStampOnTamperDetection_Definitions */
149 
150   uint32_t ActiveOutputChangePeriod;    /*!< Specifies the Active Tamper output change period .
151                                              This parameter can be a value from 0 to 7. */
152 
153   uint32_t Seed[RTC_ATAMP_SEED_NB_UINT32];
154   /*!< Specifies the Active Tamper RNG Seed value .
155        This parameter can be a value from 0 to (2^32-1) */
156 
157   RTC_ATampInputTypeDef TampInput[RTC_TAMP_NB];
158   /*!< Specifies configuration of all active tampers.
159        The index of TampInput[RTC_TAMP_NB] can be a value of RTCEx_ActiveTamper_Sel */
160 } RTC_ActiveTampersTypeDef;
161 
162 /**
163   * @}
164   */
165 #endif /* TAMP */
166 
167 /**
168   * @}
169   */
170 
171 /* Exported constants --------------------------------------------------------*/
172 
173 /** @defgroup RTCEx_Exported_Constants RTC Exported Constants
174   * @{
175   */
176 
177 /* ========================================================================== */
178 /*         ##### Extended RTC Backup registers exported constants #####       */
179 /* ========================================================================== */
180 
181 /** @defgroup RTCEx_Backup_Registers_Number_Definitions RTC Backup Registers Number Definitions
182   * @{
183   */
184 #if defined(TAMP)
185 #define BKP_REG_NUMBER                       TAMP_BKP_NUMBER
186 #else
187 #define BKP_REG_NUMBER                       RTC_BKP_NUMBER
188 #endif /* TAMP */
189 /**
190   * @}
191   */
192 
193 /** @defgroup RTCEx_Backup_Registers_Definitions RTC Backup Registers Definitions
194   * @{
195   */
196 #define RTC_BKP_DR0                       0x00u
197 #define RTC_BKP_DR1                       0x01u
198 #define RTC_BKP_DR2                       0x02u
199 #define RTC_BKP_DR3                       0x03u
200 #define RTC_BKP_DR4                       0x04u
201 #define RTC_BKP_DR5                       0x05u
202 #define RTC_BKP_DR6                       0x06u
203 #define RTC_BKP_DR7                       0x07u
204 #define RTC_BKP_DR8                       0x08u
205 #define RTC_BKP_DR9                       0x09u
206 #define RTC_BKP_DR10                      0x0Au
207 #define RTC_BKP_DR11                      0x0Bu
208 #define RTC_BKP_DR12                      0x0Cu
209 #define RTC_BKP_DR13                      0x0Du
210 #define RTC_BKP_DR14                      0x0Eu
211 #define RTC_BKP_DR15                      0x0Fu
212 #define RTC_BKP_DR16                      0x10u
213 #define RTC_BKP_DR17                      0x11u
214 #define RTC_BKP_DR18                      0x12u
215 #define RTC_BKP_DR19                      0x13u
216 #define RTC_BKP_DR20                      0x14u
217 #define RTC_BKP_DR21                      0x15u
218 #define RTC_BKP_DR22                      0x16u
219 #define RTC_BKP_DR23                      0x17u
220 #define RTC_BKP_DR24                      0x18u
221 #define RTC_BKP_DR25                      0x19u
222 #define RTC_BKP_DR26                      0x1Au
223 #define RTC_BKP_DR27                      0x1Bu
224 #define RTC_BKP_DR28                      0x1Cu
225 #define RTC_BKP_DR29                      0x1Du
226 #define RTC_BKP_DR30                      0x1Eu
227 #define RTC_BKP_DR31                      0x1Fu
228 /**
229   * @}
230   */
231 
232 /* ========================================================================== */
233 /*                 ##### RTC TimeStamp exported constants #####               */
234 /* ========================================================================== */
235 
236 /** @defgroup RTCEx_TimeStamp_Edges_definitions RTC TimeStamp Edges Definitions
237   *
238   * @{
239   */
240 #define RTC_TIMESTAMPEDGE_RISING            0x00000000u
241 #define RTC_TIMESTAMPEDGE_FALLING           RTC_CR_TSEDGE
242 /**
243   * @}
244   */
245 
246 /** @defgroup RTCEx_TimeStamp_Pin_Selection RTC TimeStamp Pin Selection
247   * @{
248   */
249 #define RTC_TIMESTAMPPIN_DEFAULT              0x00000000u
250 /**
251   * @}
252   */
253 
254 
255 /* ========================================================================== */
256 /*                    ##### RTC Tamper exported constants #####               */
257 /* ========================================================================== */
258 
259 /** @defgroup RTCEx_Tamper_Pins_Definitions RTC Tamper Pins Definitions
260   * @{
261   */
262 #if defined(TAMP)
263 #define RTC_TAMPER_1                       TAMP_CR1_TAMP1E
264 #define RTC_TAMPER_2                       TAMP_CR1_TAMP2E
265 #define RTC_TAMPER_3                       TAMP_CR1_TAMP3E
266 #else
267 #define RTC_TAMPER_1                       RTC_TAMPCR_TAMP1E
268 #define RTC_TAMPER_2                       RTC_TAMPCR_TAMP2E
269 #define RTC_TAMPER_3                       RTC_TAMPCR_TAMP3E
270 #endif /* TAMP */
271 
272 #define RTC_TAMPER_ALL                     (RTC_TAMPER_1 | RTC_TAMPER_2 | RTC_TAMPER_3)
273 /**
274   * @}
275   */
276 
277 /** @defgroup RTCEx_Tamper_Interrupt_Definitions RTC Tamper Interrupts Definitions
278   * @{
279   */
280 #if defined(TAMP)
281 #define RTC_IT_TAMP1                      TAMP_IER_TAMP1IE    /*!< Enable Tamper 1 Interrupt                */
282 #define RTC_IT_TAMP2                      TAMP_IER_TAMP2IE    /*!< Enable Tamper 2 Interrupt                */
283 #define RTC_IT_TAMP3                      TAMP_IER_TAMP3IE    /*!< Enable Tamper 3 Interrupt                */
284 #else
285 #define RTC_IT_TAMP1                      RTC_TAMPCR_TAMP1IE  /*!< Enable Tamper 1 Interrupt                */
286 #define RTC_IT_TAMP2                      RTC_TAMPCR_TAMP2IE  /*!< Enable Tamper 2 Interrupt                */
287 #define RTC_IT_TAMP3                      RTC_TAMPCR_TAMP3IE  /*!< Enable Tamper 3 Interrupt                */
288 #endif /* TAMP */
289 
290 #if defined(TAMP)
291 #define RTC_IT_TAMP                       0x00000000u         /*!< No such feature in RTC3                   */
292 #define RTC_IT_TAMPALL                    (RTC_IT_TAMP1 | RTC_IT_TAMP2 | RTC_IT_TAMP3)
293 #else
294 #define RTC_IT_TAMP                       RTC_TAMPCR_TAMPIE   /*!< Enable all Tamper Interrupts              */
295 #define RTC_IT_TAMPALL                    RTC_IT_TAMP
296 #endif /* TAMP */
297 /**
298   * @}
299   */
300 
301 /** @defgroup RTCEx_Internal_Tamper_Pins_Definitions  RTCEx Internal Tamper Pins Definition
302   * @{
303   */
304 #if defined(TAMP)
305 #define RTC_INT_TAMPER_1                    TAMP_CR1_ITAMP1E
306 #define RTC_INT_TAMPER_2                    TAMP_CR1_ITAMP2E
307 #define RTC_INT_TAMPER_3                    TAMP_CR1_ITAMP3E
308 #define RTC_INT_TAMPER_4                    TAMP_CR1_ITAMP4E
309 #define RTC_INT_TAMPER_5                    TAMP_CR1_ITAMP5E
310 #define RTC_INT_TAMPER_6                    TAMP_CR1_ITAMP6E
311 #define RTC_INT_TAMPER_8                    TAMP_CR1_ITAMP8E
312 
313 #define RTC_INT_TAMPER_ALL                  (RTC_INT_TAMPER_1 | RTC_INT_TAMPER_2 |\
314                                              RTC_INT_TAMPER_3 | RTC_INT_TAMPER_4 |\
315                                              RTC_INT_TAMPER_5 | RTC_INT_TAMPER_6 |\
316                                              RTC_INT_TAMPER_8)
317 #endif /* TAMP */
318 /**
319   * @}
320   */
321 
322 /** @defgroup RTCEx_Internal_Tamper_Interrupt_Definitions  RTC Internal Tamper Interrupt
323   * @{
324   */
325 #if defined(TAMP)
326 #define RTC_INTERNAL_TAMPER1_INTERRUPT     TAMP_IER_ITAMP1IE  /*!< Enable Internal Tamper 1 Interrupt   */
327 #define RTC_INTERNAL_TAMPER2_INTERRUPT     TAMP_IER_ITAMP2IE  /*!< Enable Internal Tamper 2 Interrupt   */
328 #define RTC_INTERNAL_TAMPER3_INTERRUPT     TAMP_IER_ITAMP3IE  /*!< Enable Internal Tamper 3 Interrupt   */
329 #define RTC_INTERNAL_TAMPER4_INTERRUPT     TAMP_IER_ITAMP4IE  /*!< Enable Internal Tamper 4 Interrupt   */
330 #define RTC_INTERNAL_TAMPER5_INTERRUPT     TAMP_IER_ITAMP5IE  /*!< Enable Internal Tamper 5 Interrupt   */
331 #define RTC_INTERNAL_TAMPER6_INTERRUPT     TAMP_IER_ITAMP6IE  /*!< Enable Internal Tamper 6 Interrupt   */
332 #define RTC_INTERNAL_TAMPER8_INTERRUPT     TAMP_IER_ITAMP8IE  /*!< Enable Internal Tamper 8 Interrupt   */
333 #endif /* TAMP */
334 /**
335   * @}
336   */
337 
338 /** @defgroup RTCEx_Tamper_Trigger_Definitions RTC Tamper Triggers Definitions
339   * @{
340   */
341 #define RTC_TAMPERTRIGGER_RISINGEDGE        0x01u  /*!< Warning : Filter must be RTC_TAMPERFILTER_DISABLE     */
342 #define RTC_TAMPERTRIGGER_FALLINGEDGE       0x02u  /*!< Warning : Filter must be RTC_TAMPERFILTER_DISABLE     */
343 #define RTC_TAMPERTRIGGER_LOWLEVEL          0x04u  /*!< Warning : Filter must not be RTC_TAMPERFILTER_DISABLE */
344 #define RTC_TAMPERTRIGGER_HIGHLEVEL         0x08u  /*!< Warning : Filter must not be RTC_TAMPERFILTER_DISABLE */
345 
346 #if defined(TAMP)
347 #define RTC_TAMPER_1_TRIGGER                TAMP_CR2_TAMP1TRG
348 #define RTC_TAMPER_2_TRIGGER                TAMP_CR2_TAMP2TRG
349 #define RTC_TAMPER_3_TRIGGER                TAMP_CR2_TAMP3TRG
350 #else
351 #define RTC_TAMPER_1_TRIGGER                RTC_TAMPCR_TAMP1TRG
352 #define RTC_TAMPER_2_TRIGGER                RTC_TAMPCR_TAMP2TRG
353 #define RTC_TAMPER_3_TRIGGER                RTC_TAMPCR_TAMP3TRG
354 #endif /* TAMP */
355 
356 #define RTC_TAMPER_X_TRIGGER                (RTC_TAMPER_1_TRIGGER |\
357                                              RTC_TAMPER_2_TRIGGER |\
358                                              RTC_TAMPER_3_TRIGGER)
359 /**
360   * @}
361   */
362 
363 /** @defgroup RTCEx_Tamper_EraseBackUp_Definitions RTC Tamper EraseBackUp Definitions
364 * @{
365 */
366 #if defined(TAMP)
367 #define RTC_TAMPER_ERASE_BACKUP_ENABLE     0x00u
368 #define RTC_TAMPER_ERASE_BACKUP_DISABLE    0x01u
369 #else
370 #define RTC_TAMPER_ERASE_BACKUP_ENABLE     0x00000000u
371 #define RTC_TAMPER_ERASE_BACKUP_DISABLE    RTC_TAMPCR_TAMP1NOERASE
372 #endif /* TAMP */
373 
374 #if defined(TAMP)
375 #define RTC_DISABLE_BKP_ERASE_ON_TAMPER_1  TAMP_CR2_TAMP1NOERASE
376 #define RTC_DISABLE_BKP_ERASE_ON_TAMPER_2  TAMP_CR2_TAMP2NOERASE
377 #define RTC_DISABLE_BKP_ERASE_ON_TAMPER_3  TAMP_CR2_TAMP3NOERASE
378 #else
379 #define RTC_DISABLE_BKP_ERASE_ON_TAMPER_1  RTC_TAMPCR_TAMP1NOERASE
380 #define RTC_DISABLE_BKP_ERASE_ON_TAMPER_2  RTC_TAMPCR_TAMP2NOERASE
381 #define RTC_DISABLE_BKP_ERASE_ON_TAMPER_3  RTC_TAMPCR_TAMP3NOERASE
382 #endif /* TAMP */
383 
384 #define RTC_DISABLE_BKP_ERASE_ON_TAMPER_MASK (RTC_DISABLE_BKP_ERASE_ON_TAMPER_1 |\
385                                               RTC_DISABLE_BKP_ERASE_ON_TAMPER_2 |\
386                                               RTC_DISABLE_BKP_ERASE_ON_TAMPER_3)
387 /**
388   * @}
389   */
390 
391 /** @defgroup RTCEx_Tamper_MaskFlag_Definitions RTC Tamper Mask Flag Definitions
392 * @{
393 */
394 #if defined(TAMP)
395 #define RTC_TAMPERMASK_FLAG_DISABLE        0x00u
396 #define RTC_TAMPERMASK_FLAG_ENABLE         0x01u
397 #else
398 #define RTC_TAMPERMASK_FLAG_DISABLE        0x00000000u
399 #define RTC_TAMPERMASK_FLAG_ENABLE         RTC_TAMPCR_TAMP1MF
400 #endif /* TAMP */
401 
402 #if defined(TAMP)
403 #define RTC_TAMPER_1_MASK_FLAG             TAMP_CR2_TAMP1MSK
404 #define RTC_TAMPER_2_MASK_FLAG             TAMP_CR2_TAMP2MSK
405 #define RTC_TAMPER_3_MASK_FLAG             TAMP_CR2_TAMP3MSK
406 #else
407 #define RTC_TAMPER_1_MASK_FLAG             RTC_TAMPCR_TAMP1MF
408 #define RTC_TAMPER_2_MASK_FLAG             RTC_TAMPCR_TAMP2MF
409 #define RTC_TAMPER_3_MASK_FLAG             RTC_TAMPCR_TAMP3MF
410 #endif /* TAMP */
411 
412 #define RTC_TAMPER_X_MASK_FLAG             (RTC_TAMPER_1_MASK_FLAG |\
413                                             RTC_TAMPER_2_MASK_FLAG |\
414                                             RTC_TAMPER_3_MASK_FLAG)
415 /**
416   * @}
417   */
418 
419 /** @defgroup RTCEx_Tamper_Filter_Definitions RTC Tamper Filter Definitions
420   * @{
421   */
422 #if defined(TAMP)
423 #define RTC_TAMPERFILTER_DISABLE   0x00000000U             /*!< Tamper filter is disabled */
424 
425 #define RTC_TAMPERFILTER_2SAMPLE   TAMP_FLTCR_TAMPFLT_0    /*!< Tamper is activated after 2
426                                                                  consecutive samples at the active level */
427 #define RTC_TAMPERFILTER_4SAMPLE   TAMP_FLTCR_TAMPFLT_1    /*!< Tamper is activated after 4
428                                                                  consecutive samples at the active level */
429 #define RTC_TAMPERFILTER_8SAMPLE   TAMP_FLTCR_TAMPFLT      /*!< Tamper is activated after 8
430                                                                  consecutive samples at the active level */
431 #define RTC_TAMPERFILTER_MASK      TAMP_FLTCR_TAMPFLT      /*!< Masking all bits except those of
432                                                                  field TAMPFLT[1:0]. */
433 #else
434 #define RTC_TAMPERFILTER_DISABLE   0x00000000u             /*!< Tamper filter is disabled */
435 
436 #define RTC_TAMPERFILTER_2SAMPLE   RTC_TAMPCR_TAMPFLT_0    /*!< Tamper is activated after 2
437                                                                  consecutive samples at the active level */
438 #define RTC_TAMPERFILTER_4SAMPLE   RTC_TAMPCR_TAMPFLT_1    /*!< Tamper is activated after 4
439                                                                  consecutive samples at the active level */
440 #define RTC_TAMPERFILTER_8SAMPLE   RTC_TAMPCR_TAMPFLT      /*!< Tamper is activated after 8
441                                                                  consecutive samples at the active level. */
442 #define RTC_TAMPERFILTER_MASK      RTC_TAMPCR_TAMPFLT      /*!< Masking all bits except those of
443                                                                  field TAMPFLT[1:0]. */
444 #endif /* TAMP */
445 /**
446   * @}
447   */
448 
449 /** @defgroup RTCEx_Tamper_Sampling_Frequencies_Definitions RTC Tamper Sampling Frequencies Definitions
450   * @{
451   */
452 #if defined(TAMP)
453 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768  0x00000000U                                     /*!< Each of the tamper inputs are sampled
454                                                                                                       with a frequency =  RTCCLK / 32768 */
455 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV16384  TAMP_FLTCR_TAMPFREQ_0                           /*!< Each of the tamper inputs are sampled
456                                                                                                       with a frequency =  RTCCLK / 16384 */
457 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV8192   TAMP_FLTCR_TAMPFREQ_1                           /*!< Each of the tamper inputs are sampled
458                                                                                                       with a frequency =  RTCCLK / 8192  */
459 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV4096   (TAMP_FLTCR_TAMPFREQ_0 | TAMP_FLTCR_TAMPFREQ_1) /*!< Each of the tamper inputs are sampled
460                                                                                                       with a frequency =  RTCCLK / 4096  */
461 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV2048   TAMP_FLTCR_TAMPFREQ_2                           /*!< Each of the tamper inputs are sampled
462                                                                                                       with a frequency =  RTCCLK / 2048  */
463 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV1024   (TAMP_FLTCR_TAMPFREQ_0 | TAMP_FLTCR_TAMPFREQ_2) /*!< Each of the tamper inputs are sampled
464                                                                                                       with a frequency =  RTCCLK / 1024  */
465 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV512    (TAMP_FLTCR_TAMPFREQ_1 | TAMP_FLTCR_TAMPFREQ_2) /*!< Each of the tamper inputs are sampled
466                                                                                                       with a frequency =  RTCCLK / 512   */
467 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV256    TAMP_FLTCR_TAMPFREQ                             /*!< Each of the tamper inputs are sampled
468                                                                                                       with a frequency =  RTCCLK / 256   */
469 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_MASK      TAMP_FLTCR_TAMPFREQ                             /*!< Masking all bits except those of
470                                                                                                       field TAMPFREQ[2:0]*/
471 #else
472 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768  0x00000000u                                     /*!< Each of the tamper inputs are sampled
473                                                                                                       with a frequency =  RTCCLK / 32768 */
474 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV16384  RTC_TAMPCR_TAMPFREQ_0                           /*!< Each of the tamper inputs are sampled
475                                                                                                       with a frequency =  RTCCLK / 16384 */
476 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV8192   RTC_TAMPCR_TAMPFREQ_1                           /*!< Each of the tamper inputs are sampled
477                                                                                                       with a frequency =  RTCCLK / 8192  */
478 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV4096   (RTC_TAMPCR_TAMPFREQ_0 | RTC_TAMPCR_TAMPFREQ_1) /*!< Each of the tamper inputs are sampled
479                                                                                                       with a frequency =  RTCCLK / 4096  */
480 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV2048   RTC_TAMPCR_TAMPFREQ_2                           /*!< Each of the tamper inputs are sampled
481                                                                                                       with a frequency =  RTCCLK / 2048  */
482 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV1024   (RTC_TAMPCR_TAMPFREQ_0 | RTC_TAMPCR_TAMPFREQ_2)  /*!< Each of the tamper inputs are sampled
483                                                                                                       with a frequency =  RTCCLK / 1024  */
484 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV512    (RTC_TAMPCR_TAMPFREQ_1 | RTC_TAMPCR_TAMPFREQ_2)  /*!< Each of the tamper inputs are sampled
485                                                                                                       with a frequency =  RTCCLK / 512   */
486 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV256    RTC_TAMPCR_TAMPFREQ                              /*!< Each of the tamper inputs are sampled
487                                                                                                       with a frequency =  RTCCLK / 256   */
488 #define RTC_TAMPERSAMPLINGFREQ_RTCCLK_MASK      RTC_TAMPCR_TAMPFREQ                             /*!< Masking all bits except those of
489                                                                                                       field TAMPFREQ[2:0]*/
490 #endif /* TAMP */
491 /**
492   * @}
493   */
494 
495 /** @defgroup RTCEx_Tamper_Pin_Precharge_Duration_Definitions RTC Tamper Pin Precharge Duration Definitions
496   * @{
497   */
498 #if defined(TAMP)
499 #define RTC_TAMPERPRECHARGEDURATION_1RTCCLK     0x00000000U             /*!< Tamper pins are pre-charged before
500                                                                               sampling during 1 RTCCLK cycle  */
501 #define RTC_TAMPERPRECHARGEDURATION_2RTCCLK     TAMP_FLTCR_TAMPPRCH_0   /*!< Tamper pins are pre-charged before
502                                                                               sampling during 2 RTCCLK cycles */
503 #define RTC_TAMPERPRECHARGEDURATION_4RTCCLK     TAMP_FLTCR_TAMPPRCH_1   /*!< Tamper pins are pre-charged before
504                                                                               sampling during 4 RTCCLK cycles */
505 #define RTC_TAMPERPRECHARGEDURATION_8RTCCLK     TAMP_FLTCR_TAMPPRCH     /*!< Tamper pins are pre-charged before
506                                                                               sampling during 8 RTCCLK cycles */
507 #define RTC_TAMPERPRECHARGEDURATION_MASK        TAMP_FLTCR_TAMPPRCH     /*!< Masking all bits except those of
508                                                                               field TAMPPRCH[1:0] */
509 #else
510 #define RTC_TAMPERPRECHARGEDURATION_1RTCCLK     0x00000000u             /*!< Tamper pins are pre-charged before
511                                                                               sampling during 1 RTCCLK cycle  */
512 #define RTC_TAMPERPRECHARGEDURATION_2RTCCLK     RTC_TAMPCR_TAMPPRCH_0   /*!< Tamper pins are pre-charged before
513                                                                               sampling during 2 RTCCLK cycles */
514 #define RTC_TAMPERPRECHARGEDURATION_4RTCCLK     RTC_TAMPCR_TAMPPRCH_1   /*!< Tamper pins are pre-charged before
515                                                                               sampling during 4 RTCCLK cycles */
516 #define RTC_TAMPERPRECHARGEDURATION_8RTCCLK     RTC_TAMPCR_TAMPPRCH     /*!< Tamper pins are pre-charged before
517                                                                               sampling during 8 RTCCLK cycles */
518 #define RTC_TAMPERPRECHARGEDURATION_MASK        RTC_TAMPCR_TAMPPRCH     /*!< Masking all bits except those of
519                                                                               field TAMPPRCH[1:0] */
520 #endif /* TAMP */
521 /**
522   * @}
523   */
524 
525 /** @defgroup RTCEx_Tamper_TimeStampOnTamperDetection_Definitions RTC Tamper TimeStamp On Tamper Detection Definitions
526   * @{
527   */
528 #if defined(TAMP)
529 #define RTC_TIMESTAMPONTAMPERDETECTION_DISABLE  0x00000000u                   /*!< TimeStamp on Tamper Detection event is not saved */
530 #define RTC_TIMESTAMPONTAMPERDETECTION_ENABLE   RTC_CR_TAMPTS                 /*!< TimeStamp on Tamper Detection event saved        */
531 #define RTC_TIMESTAMPONTAMPERDETECTION_MASK     RTC_CR_TAMPTS                 /*!< Masking all bits except bit TAMPTS               */
532 #else
533 #define RTC_TIMESTAMPONTAMPERDETECTION_DISABLE  0x00000000u                   /*!< TimeStamp on Tamper Detection event is not saved */
534 #define RTC_TIMESTAMPONTAMPERDETECTION_ENABLE   RTC_TAMPCR_TAMPTS             /*!< TimeStamp on Tamper Detection event saved        */
535 #define RTC_TIMESTAMPONTAMPERDETECTION_MASK     RTC_TAMPCR_TAMPTS             /*!< Masking all bits except bit TAMPTS               */
536 #endif /* TAMP */
537 /**
538   * @}
539   */
540 
541 /** @defgroup RTCEx_Tamper_Pull_UP_Definitions RTC Tamper Pull Up Definitions
542   * @{
543   */
544 #if defined(TAMP)
545 #define RTC_TAMPER_PULLUP_ENABLE           0x00000000u              /*!< Tamper pins are pre-charged before sampling */
546 #define RTC_TAMPER_PULLUP_DISABLE          TAMP_FLTCR_TAMPPUDIS     /*!< Tamper pins pre-charge is disabled          */
547 #define RTC_TAMPER_PULLUP_MASK             TAMP_FLTCR_TAMPPUDIS     /*!< Maskin all bits except bit TAMPPUDIS        */
548 #else
549 #define RTC_TAMPER_PULLUP_ENABLE           0x00000000u              /*!< TimeStamp on Tamper Detection event saved        */
550 #define RTC_TAMPER_PULLUP_DISABLE          RTC_TAMPCR_TAMPPUDIS     /*!< TimeStamp on Tamper Detection event is not saved */
551 #define RTC_TAMPER_PULLUP_MASK             RTC_TAMPCR_TAMPPUDIS     /*!< Maskin all bits except bit TAMPPUDIS        */
552 #endif /* TAMP */
553 /**
554   * @}
555   */
556 
557 /** @defgroup RTCEx_Tamper_DetectionOutput_Definitions RTC Tamper Detection Output Definitions
558   * @{
559   */
560 #if defined(TAMP)
561 #define RTC_TAMPERDETECTIONOUTPUT_DISABLE  0x00000000u                   /*!< The tamper flag is not routed on TAMPALRM */
562 #define RTC_TAMPERDETECTIONOUTPUT_ENABLE   RTC_CR_TAMPOE                 /*!< The tamper flag is routed on TAMPALRM combined with the signal
563                                                                                provided by OSEL and with the polarity provided by POL */
564 #endif  /* TAMP */
565 /**
566   * @}
567   */
568 
569 /** @defgroup RTC_Tamper_Flags_Definitions RTC Tamper Flags Definitions
570   * @{
571   */
572 #if defined(TAMP)
573 #define RTC_FLAG_TAMP1F                   TAMP_SR_TAMP1F
574 #define RTC_FLAG_TAMP2F                   TAMP_SR_TAMP2F
575 #define RTC_FLAG_TAMP3F                   TAMP_SR_TAMP3F
576 #else
577 #define RTC_FLAG_TAMP1F                   RTC_ISR_TAMP1F
578 #define RTC_FLAG_TAMP2F                   RTC_ISR_TAMP2F
579 #define RTC_FLAG_TAMP3F                   RTC_ISR_TAMP3F
580 #endif /* TAMP */
581 /**
582   * @}
583   */
584 
585 /** @defgroup RTCEx_ActiveTamper_Enable RTCEx_ActiveTamper_Enable Definitions
586   * @{
587   */
588 #define RTC_ATAMP_ENABLE                   1u
589 #define RTC_ATAMP_DISABLE                  0u
590 /**
591   * @}
592   */
593 
594 /** @defgroup RTCEx_ActiveTamper_Interrupt RTCEx_ActiveTamper_Interrupt Definitions
595   * @{
596   */
597 #define RTC_ATAMP_INTERRUPT_ENABLE        1u
598 #define RTC_ATAMP_INTERRUPT_DISABLE       0u
599 /**
600   * @}
601   */
602 
603 /** @defgroup RTCEx_ActiveTamper_Filter RTCEx_ActiveTamper_Filter Definitions
604   * @{
605   */
606 #define RTC_ATAMP_FILTER_ENABLE           TAMP_ATCR1_FLTEN
607 #define RTC_ATAMP_FILTER_DISABLE          0u
608 /**
609   * @}
610   */
611 
612 /** @defgroup RTCEx_ActiveTamper_Async_prescaler RTC Active_Tamper_Asynchronous_Prescaler clock Definitions
613   * @{
614   */
615 #define RTC_ATAMP_ASYNCPRES_RTCCLK        0u                                                                      /*!< RTCCLK */
616 #define RTC_ATAMP_ASYNCPRES_RTCCLK_2      TAMP_ATCR1_ATCKSEL_0                                                    /*!< RTCCLK/2 */
617 #define RTC_ATAMP_ASYNCPRES_RTCCLK_4      TAMP_ATCR1_ATCKSEL_1                                                    /*!< RTCCLK/4 */
618 #define RTC_ATAMP_ASYNCPRES_RTCCLK_8     (TAMP_ATCR1_ATCKSEL_1 | TAMP_ATCR1_ATCKSEL_0)                            /*!< RTCCLK/8 */
619 #define RTC_ATAMP_ASYNCPRES_RTCCLK_16     TAMP_ATCR1_ATCKSEL_2                                                    /*!< RTCCLK/16 */
620 #define RTC_ATAMP_ASYNCPRES_RTCCLK_32    (TAMP_ATCR1_ATCKSEL_2 | TAMP_ATCR1_ATCKSEL_0)                            /*!< RTCCLK/32 */
621 #define RTC_ATAMP_ASYNCPRES_RTCCLK_64    (TAMP_ATCR1_ATCKSEL_2 | TAMP_ATCR1_ATCKSEL_1)                            /*!< RTCCLK/64 */
622 #define RTC_ATAMP_ASYNCPRES_RTCCLK_128   (TAMP_ATCR1_ATCKSEL_2 | TAMP_ATCR1_ATCKSEL_1 | TAMP_ATCR1_ATCKSEL_0)     /*!< RTCCLK/128 */
623 /**
624   * @}
625   */
626 
627 /** @defgroup RTCEx_ActiveTamper_Sel  RTC Active Tamper selection Definition
628   * @{
629   */
630 #define RTC_ATAMP_1                       0u   /*!< Tamper 1 */
631 #define RTC_ATAMP_2                       1u   /*!< Tamper 2 */
632 #define RTC_ATAMP_3                       2u   /*!< Tamper 3 */
633 #define RTC_ATAMP_4                       3u   /*!< Tamper 4 */
634 #define RTC_ATAMP_5                       4u   /*!< Tamper 5 */
635 #define RTC_ATAMP_6                       5u   /*!< Tamper 6 */
636 #define RTC_ATAMP_7                       6u   /*!< Tamper 7 */
637 #define RTC_ATAMP_8                       7u   /*!< Tamper 8 */
638 /**
639   * @}
640   */
641 
642 /** @defgroup RTCEx_MonotonicCounter_Instance  RTCEx Monotonic Counter Instance Definition
643   * @{
644   */
645 #define RTC_MONOTONIC_COUNTER_1           0u   /*!< Monotonic counter 1 */
646 /**
647   * @}
648   */
649 
650 /** @defgroup RTCEx_Tamper_Registers_Offset  RTC Tamper Registers Offset
651   * @{
652   */
653 #if defined(TAMP)
654 /* Add this offset to RTC registers base address to reach TAMP registers base address. */
655 #define TAMP_OFFSET (TAMP_BASE - RTC_BASE)
656 #endif /* TAMP */
657 /**
658   * @}
659   */
660 
661 /* ========================================================================== */
662 /*                   ##### RTC Wake-up exported constants #####               */
663 /* ========================================================================== */
664 
665 /** @defgroup RTCEx_Wakeup_Timer_Definitions RTC Wakeup Timer Definitions
666   * @{
667   */
668 #define RTC_WAKEUPCLOCK_RTCCLK_DIV16        0x00000000u
669 #define RTC_WAKEUPCLOCK_RTCCLK_DIV8         RTC_CR_WUCKSEL_0
670 #define RTC_WAKEUPCLOCK_RTCCLK_DIV4         RTC_CR_WUCKSEL_1
671 #define RTC_WAKEUPCLOCK_RTCCLK_DIV2         (RTC_CR_WUCKSEL_0 | RTC_CR_WUCKSEL_1)
672 #define RTC_WAKEUPCLOCK_CK_SPRE_16BITS      RTC_CR_WUCKSEL_2
673 #define RTC_WAKEUPCLOCK_CK_SPRE_17BITS      (RTC_CR_WUCKSEL_1 | RTC_CR_WUCKSEL_2)
674 /**
675   * @}
676   */
677 
678 /* ========================================================================== */
679 /*        ##### Extended RTC Peripheral Control exported constants #####      */
680 /* ========================================================================== */
681 
682 /** @defgroup RTCEx_Smooth_calib_period_Definitions RTC Smooth Calib Period Definitions
683   * @{
684   */
685 #define RTC_SMOOTHCALIB_PERIOD_32SEC   0x00000000u             /*!< If RTCCLK = 32768 Hz, Smooth calibration
686                                                                     period is 32s,  else 2exp20 RTCCLK pulses */
687 #define RTC_SMOOTHCALIB_PERIOD_16SEC   RTC_CALR_CALW16         /*!< If RTCCLK = 32768 Hz, Smooth calibration
688                                                                     period is 16s, else 2exp19 RTCCLK pulses */
689 #define RTC_SMOOTHCALIB_PERIOD_8SEC    RTC_CALR_CALW8          /*!< If RTCCLK = 32768 Hz, Smooth calibration
690                                                                     period is 8s, else 2exp18 RTCCLK pulses */
691 /**
692   * @}
693   */
694 
695 /** @defgroup RTCEx_Smooth_calib_Plus_pulses_Definitions RTC Smooth Calib Plus pulses Definitions
696   * @{
697   */
698 #define RTC_SMOOTHCALIB_PLUSPULSES_SET    RTC_CALR_CALP           /*!< The number of RTCCLK pulses added
699                                                                        during a X -second window = Y - CALM[8:0]
700                                                                        with Y = 512, 256, 128 when X = 32, 16, 8 */
701 #define RTC_SMOOTHCALIB_PLUSPULSES_RESET  0x00000000u             /*!< The number of RTCCLK pulses subbstited
702                                                                        during a 32-second window = CALM[8:0] */
703 /**
704   * @}
705   */
706 
707 /** @defgroup RTCEx_Calib_Output_selection_Definitions RTC Calib Output Selection Definitions
708   * @{
709   */
710 #define RTC_CALIBOUTPUT_512HZ            0x00000000u
711 #define RTC_CALIBOUTPUT_1HZ              RTC_CR_COSEL
712 /**
713   * @}
714   */
715 
716 /** @defgroup RTCEx_Add_1_Second_Parameter_Definitions RTC Add 1 Second Parameter Definitions
717   * @{
718   */
719 #define RTC_SHIFTADD1S_RESET      0x00000000u
720 #define RTC_SHIFTADD1S_SET        RTC_SHIFTR_ADD1S
721 /**
722   * @}
723   */
724 
725 /**
726   * @}
727   */
728 
729 /* Exported macros -----------------------------------------------------------*/
730 
731 /** @defgroup RTCEx_Exported_Macros RTC Exported Macros
732   * @{
733   */
734 
735 /* ========================================================================== */
736 /*                    ##### RTC Wake-up exported macros #####                 */
737 /* ========================================================================== */
738 
739 /**
740   * @brief  Enable the RTC WakeUp Timer peripheral.
741   * @param  __HANDLE__ specifies the RTC handle.
742   * @retval None
743   */
744 #define __HAL_RTC_WAKEUPTIMER_ENABLE(__HANDLE__)                     ((__HANDLE__)->Instance->CR |= (RTC_CR_WUTE))
745 
746 /**
747   * @brief  Disable the RTC WakeUp Timer peripheral.
748   * @param  __HANDLE__ specifies the RTC handle.
749   * @retval None
750   */
751 #define __HAL_RTC_WAKEUPTIMER_DISABLE(__HANDLE__)                    ((__HANDLE__)->Instance->CR &= ~(RTC_CR_WUTE))
752 
753 /**
754   * @brief  Enable the RTC WakeUpTimer interrupt.
755   * @param  __HANDLE__ specifies the RTC handle.
756   * @param  __INTERRUPT__ specifies the RTC WakeUpTimer interrupt sources to be enabled.
757   *         This parameter can be:
758   *            @arg @ref RTC_IT_WUT WakeUpTimer interrupt
759   * @retval None
760   */
761 #define __HAL_RTC_WAKEUPTIMER_ENABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->CR |= (__INTERRUPT__))
762 
763 /**
764   * @brief  Disable the RTC WakeUpTimer interrupt.
765   * @param  __HANDLE__ specifies the RTC handle.
766   * @param  __INTERRUPT__ specifies the RTC WakeUpTimer interrupt sources to be disabled.
767   *         This parameter can be:
768   *            @arg @ref RTC_IT_WUT WakeUpTimer interrupt
769   * @retval None
770   */
771 #define __HAL_RTC_WAKEUPTIMER_DISABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__))
772 
773 /**
774   * @brief  Check whether the specified RTC WakeUpTimer interrupt has occurred or not.
775   * @param  __HANDLE__ specifies the RTC handle.
776   * @param  __INTERRUPT__ specifies the RTC WakeUpTimer interrupt sources to check.
777   *         This parameter can be:
778   *            @arg RTC_FLAG_WUTF WakeUpTimer interrupt flag
779   * @retval None
780   */
781 #if defined(TAMP)
782 #define __HAL_RTC_WAKEUPTIMER_GET_IT(__HANDLE__, __INTERRUPT__)     (((((__HANDLE__)->Instance->SR)  & (__INTERRUPT__)) != 0U) ? 1U : 0U)
783 #else
784 #define __HAL_RTC_WAKEUPTIMER_GET_IT(__HANDLE__, __INTERRUPT__)     (((((__HANDLE__)->Instance->ISR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
785 #endif /* TAMP */
786 
787 /**
788   * @brief  Check whether the specified RTC Wake Up timer interrupt has been enabled or not.
789   * @param  __HANDLE__ specifies the RTC handle.
790   * @param  __INTERRUPT__ specifies the RTC Wake Up timer interrupt sources to check.
791   *         This parameter can be:
792   *            @arg @ref RTC_IT_WUT  WakeUpTimer interrupt
793   * @retval None
794   */
795 #define __HAL_RTC_WAKEUPTIMER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)   (((((__HANDLE__)->Instance->CR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
796 
797 #if defined(TAMP)
798 /**
799   * @brief  Get the selected RTC WakeUpTimer's flag status.
800   * @param  __HANDLE__ specifies the RTC handle.
801   * @param  __FLAG__ specifies the RTC WakeUpTimer Flag sources to check.
802   *          This parameter can be:
803   *             @arg @ref RTC_FLAG_WUTF
804   * @retval Flag status
805   */
806 #define __HAL_RTC_WAKEUPTIMER_GET_FLAG(__HANDLE__, __FLAG__)   (((((__HANDLE__)->Instance->SR)  & (__FLAG__)) != 0U) ? 1U : 0U)
807 #else
808 /**
809   * @brief  Get the selected RTC WakeUpTimer's flag status.
810   * @param  __HANDLE__ specifies the RTC handle.
811   * @param  __FLAG__ specifies the RTC WakeUpTimer Flag sources to check.
812   *          This parameter can be:
813   *             @arg @ref RTC_FLAG_WUTF
814   *             @arg @ref RTC_FLAG_WUTWF
815   * @retval Flag status
816   */
817 #define __HAL_RTC_WAKEUPTIMER_GET_FLAG(__HANDLE__, __FLAG__)   (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U)
818 #endif /* TAMP */
819 
820 /**
821   * @brief  Clear the RTC Wake Up timer's pending flags.
822   * @param  __HANDLE__ specifies the RTC handle.
823   * @param  __FLAG__ specifies the RTC WakeUpTimer Flag to clear.
824   *         This parameter can be:
825   *            @arg @ref RTC_FLAG_WUTF
826   * @retval None
827   */
828 #if defined(TAMP)
829 #define __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SCR |= __FLAG__)
830 #else
831 #define __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT))
832 #endif /* TAMP */
833 
834 /* ========================================================================== */
835 /*                     ##### RTC Tamper exported macros #####                 */
836 /* ========================================================================== */
837 
838 /**
839   * @brief  Enable the RTC Tamper1 input detection.
840   * @param  __HANDLE__ specifies the RTC handle.
841   * @retval None
842   */
843 #if defined(TAMP)
844 #define __HAL_RTC_TAMPER1_ENABLE(__HANDLE__)           (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->CR1 |= (TAMP_CR1_TAMP1E))
845 #else
846 #define __HAL_RTC_TAMPER1_ENABLE(__HANDLE__)           ((__HANDLE__)->Instance->TAMPCR |= (RTC_TAMPCR_TAMP1E))
847 #endif /* TAMP */
848 
849 /**
850   * @brief  Disable the RTC Tamper1 input detection.
851   * @param  __HANDLE__ specifies the RTC handle.
852   * @retval None
853   */
854 #if defined(TAMP)
855 #define __HAL_RTC_TAMPER1_DISABLE(__HANDLE__)          (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->CR1 &= ~(RTC_TAMPCR_TAMP1E))
856 #else
857 #define __HAL_RTC_TAMPER1_DISABLE(__HANDLE__)          ((__HANDLE__)->Instance->TAMPCR &= ~(RTC_TAMPCR_TAMP1E))
858 #endif /* TAMP */
859 
860 /**
861   * @brief  Enable the RTC Tamper2 input detection.
862   * @param  __HANDLE__ specifies the RTC handle.
863   * @retval None
864   */
865 #if defined(TAMP)
866 #define __HAL_RTC_TAMPER2_ENABLE(__HANDLE__)           (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->CR1 |= (TAMP_CR1_TAMP2E))
867 #else
868 #define __HAL_RTC_TAMPER2_ENABLE(__HANDLE__)           ((__HANDLE__)->Instance->TAMPCR |= (RTC_TAMPCR_TAMP2E))
869 #endif /* TAMP */
870 
871 /**
872   * @brief  Disable the RTC Tamper2 input detection.
873   * @param  __HANDLE__ specifies the RTC handle.
874   * @retval None
875   */
876 #if defined(TAMP)
877 #define __HAL_RTC_TAMPER2_DISABLE(__HANDLE__)          (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + (TAMP_OFFSET))->CR1 &= ~(RTC_TAMPCR_TAMP2E))
878 #else
879 #define __HAL_RTC_TAMPER2_DISABLE(__HANDLE__)          ((__HANDLE__)->Instance->TAMPCR &= ~(RTC_TAMPCR_TAMP2E))
880 #endif /* TAMP */
881 
882 /**
883   * @brief  Enable the RTC Tamper3 input detection.
884   * @param  __HANDLE__ specifies the RTC handle.
885   * @retval None
886   */
887 #if defined(TAMP)
888 #define __HAL_RTC_TAMPER3_ENABLE(__HANDLE__)          (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->CR1 |= (TAMP_CR1_TAMP3E))
889 #else
890 #define __HAL_RTC_TAMPER3_ENABLE(__HANDLE__)          ((__HANDLE__)->Instance->TAMPCR |= (RTC_TAMPCR_TAMP3E))
891 #endif /* TAMP */
892 
893 /**
894   * @brief  Disable the RTC Tamper3 input detection.
895   * @param  __HANDLE__ specifies the RTC handle.
896   * @retval None
897   */
898 #if defined(TAMP)
899 #define __HAL_RTC_TAMPER3_DISABLE(__HANDLE__)          (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->CR1 &= ~(RTC_TAMPCR_TAMP3E))
900 #else
901 #define __HAL_RTC_TAMPER3_DISABLE(__HANDLE__)          ((__HANDLE__)->Instance->TAMPCR &= ~(RTC_TAMPCR_TAMP3E))
902 #endif /* TAMP */
903 
904 /**
905   * @brief  Enable the RTC Tamper interrupt.
906   * @param  __HANDLE__ specifies the RTC handle.
907   * @param  __INTERRUPT__ specifies the RTC Tamper interrupt sources to be enabled.
908   *          This parameter can be any combination of the following values:
909   *             @arg  RTC_IT_TAMPALL: All tampers interrupts
910   *             @arg  RTC_IT_TAMP1: Tamper1 interrupt
911   *             @arg  RTC_IT_TAMP2: Tamper2 interrupt
912   *             @arg  RTC_IT_TAMP3: Tamper3 interrupt
913   * @retval None
914   */
915 #if defined(TAMP)
916 #define __HAL_RTC_TAMPER_ENABLE_IT(__HANDLE__, __INTERRUPT__)        (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->IER |= (__INTERRUPT__))
917 #else
918 #define __HAL_RTC_TAMPER_ENABLE_IT(__HANDLE__, __INTERRUPT__)        ((__HANDLE__)->Instance->TAMPCR |= (__INTERRUPT__))
919 #endif /* TAMP */
920 
921 /**
922   * @brief  Disable the RTC Tamper interrupt.
923   * @param  __HANDLE__ specifies the RTC handle.
924   * @param  __INTERRUPT__ specifies the RTC Tamper interrupt sources to be disabled.
925   *         This parameter can be any combination of the following values:
926   *            @arg  RTC_IT_TAMP: All tampers interrupts
927   *            @arg  RTC_IT_TAMP1: Tamper1 interrupt
928   *            @arg  RTC_IT_TAMP2: Tamper2 interrupt
929   *            @arg  RTC_IT_TAMP3: Tamper3 interrupt
930   * @retval None
931   */
932 #if defined(TAMP)
933 #define __HAL_RTC_TAMPER_DISABLE_IT(__HANDLE__, __INTERRUPT__)       (((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->IER &= ~(__INTERRUPT__))
934 #else
935 #define __HAL_RTC_TAMPER_DISABLE_IT(__HANDLE__, __INTERRUPT__)       ((__HANDLE__)->Instance->TAMPCR &= ~(__INTERRUPT__))
936 #endif /* TAMP */
937 
938 /**
939   * @brief  Check whether the specified RTC Tamper interrupt has been enabled or not.
940   * @param  __HANDLE__ specifies the RTC handle.
941   * @param  __INTERRUPT__ specifies the RTC Tamper interrupt source to check.
942   *         This parameter can be:
943   *            @arg  RTC_IT_TAMPALL: All tampers interrupts
944   *            @arg  RTC_IT_TAMP1: Tamper1 interrupt
945   *            @arg  RTC_IT_TAMP2: Tamper2 interrupt
946   *            @arg  RTC_IT_TAMP3: Tamper3 interrupt
947   * @retval Flag status
948   */
949 #if defined(TAMP)
950 #define __HAL_RTC_TAMPER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)    ((((((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->IER) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
951 #else
952 #define __HAL_RTC_TAMPER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)    (((((__HANDLE__)->Instance->TAMPCR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
953 #endif /* TAMP */
954 
955 /**
956   * @brief  Get the selected RTC Tamper's flag status.
957   * @param  __HANDLE__ specifies the RTC handle.
958   * @param  __FLAG__ specifies the RTC Tamper Flag is pending or not.
959   *          This parameter can be:
960   *             @arg RTC_FLAG_TAMP1F: Tamper1 flag
961   *             @arg RTC_FLAG_TAMP2F: Tamper2 flag
962   *             @arg RTC_FLAG_TAMP3F: Tamper3 flag
963   * @retval Flag status
964   */
965 #if defined(TAMP)
966 #define __HAL_RTC_TAMPER_GET_FLAG(__HANDLE__, __FLAG__)   ((((((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->SR) & (__FLAG__)) != 0U) ? 1U : 0U)
967 #else
968 #define __HAL_RTC_TAMPER_GET_FLAG(__HANDLE__, __FLAG__)                                (((((__HANDLE__)->Instance->ISR)                 & (__FLAG__)) != 0U) ? 1U : 0U)
969 #endif /* TAMP */
970 
971 /**
972   * @brief  Clear the RTC Tamper's pending flags.
973   * @param  __HANDLE__ specifies the RTC handle.
974   * @param  __FLAG__ specifies the RTC Tamper Flag to clear.
975   *          This parameter can be:
976   *             @arg RTC_FLAG_TAMP1F: Tamper1 flag
977   *             @arg RTC_FLAG_TAMP2F: Tamper2 flag
978   *             @arg RTC_FLAG_TAMP3F: Tamper3 flag
979   * @retval None
980   */
981 #if defined(TAMP)
982 #define __HAL_RTC_TAMPER_CLEAR_FLAG(__HANDLE__, __FLAG__)      ((((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->SCR) |= (__FLAG__))
983 #else
984 #define __HAL_RTC_TAMPER_CLEAR_FLAG(__HANDLE__, __FLAG__)      ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT))
985 #endif /* TAMP */
986 
987 /**
988   * @brief  Get the frequency at which each of the Tamper inputs are sampled.
989   * @param  __HANDLE__ specifies the RTC handle.
990   * @retval Sampling frequency
991   *         This value can be:
992   *            @arg RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768
993   *            @arg RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV16384
994   *            @arg RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV8192
995   *            @arg RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV4096
996   *            @arg RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV2048
997   *            @arg RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV512
998   *            @arg RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV256
999   */
1000 #if defined(TAMP)
1001 #define __HAL_RTC_TAMPER_GET_SAMPLING_FREQ(__HANDLE__)   ((uint32_t)((((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->FLTCR) & (RTC_TAMPERSAMPLINGFREQ_RTCCLK_MASK)))
1002 #else
1003 #define __HAL_RTC_TAMPER_GET_SAMPLING_FREQ(__HANDLE__)   ((uint32_t)(((__HANDLE__)->Instance->TAMPCR) & (RTC_TAMPERSAMPLINGFREQ_RTCCLK_MASK)))
1004 #endif /* TAMP */
1005 
1006 /**
1007   * @brief  Get the number of consecutive samples at the specified level needed
1008   *         to activate a Tamper event.
1009   * @param  __HANDLE__ specifies the RTC handle.
1010   * @retval Number of consecutive samples
1011   *         This value can be:
1012   *            @arg RTC_TAMPERFILTER_DISABLE
1013   *            @arg RTC_TAMPERFILTER_2SAMPLE
1014   *            @arg RTC_TAMPERFILTER_4SAMPLE
1015   *            @arg RTC_TAMPERFILTER_8SAMPLE
1016   */
1017 #if defined(TAMP)
1018 #define __HAL_RTC_TAMPER_GET_SAMPLES_COUNT(__HANDLE__)   ((uint32_t)((((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->FLTCR) & (RTC_TAMPERFILTER_MASK)))
1019 #else
1020 #define __HAL_RTC_TAMPER_GET_SAMPLES_COUNT(__HANDLE__)   ((uint32_t)(((__HANDLE__)->Instance->TAMPCR) & (RTC_TAMPERFILTER_MASK)))
1021 #endif /* TAMP */
1022 
1023 /**
1024   * @brief  Get the pull-up resistors precharge duration.
1025   * @param  __HANDLE__ specifies the RTC handle.
1026   * @retval Number of consecutive samples
1027   *         This value can be:
1028   *            @arg RTC_TAMPERPRECHARGEDURATION_1RTCCLK
1029   *            @arg RTC_TAMPERPRECHARGEDURATION_2RTCCLK
1030   *            @arg RTC_TAMPERPRECHARGEDURATION_4RTCCLK
1031   *            @arg RTC_TAMPERPRECHARGEDURATION_8RTCCLK
1032   */
1033 #if defined(TAMP)
1034 #define __HAL_RTC_TAMPER_GET_PRCHRG_DURATION(__HANDLE__)   ((uint32_t)((((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->FLTCR) & (RTC_TAMPERPRECHARGEDURATION_MASK)))
1035 #else
1036 #define __HAL_RTC_TAMPER_GET_PRCHRG_DURATION(__HANDLE__)   ((uint32_t)(((__HANDLE__)->Instance->TAMPCR) & (RTC_TAMPERPRECHARGEDURATION_MASK)))
1037 #endif /* TAMP */
1038 
1039 /**
1040   * @brief  Get the pull-up resistors status.
1041   * @param  __HANDLE__ specifies the RTC handle.
1042   * @retval Pull-up resistors status
1043   *         This value can be:
1044   *            @arg RTC_TAMPER_PULLUP_ENABLE
1045   *            @arg RTC_TAMPER_PULLUP_DISABLE
1046   */
1047 #if defined(TAMP)
1048 #define __HAL_RTC_TAMPER_GET_PULLUP_STATUS(__HANDLE__)   ((uint32_t)((((TAMP_TypeDef *)((uint32_t)((__HANDLE__)->Instance) + TAMP_OFFSET))->FLTCR) & (RTC_TAMPER_PULLUP_MASK)))
1049 #else
1050 #define __HAL_RTC_TAMPER_GET_PULLUP_STATUS(__HANDLE__)   ((uint32_t)(((__HANDLE__)->Instance->TAMPCR) & (RTC_TAMPER_PULLUP_MASK)))
1051 #endif /* TAMP */
1052 
1053 /* ========================================================================== */
1054 /*                  ##### RTC TimeStamp exported macros #####                 */
1055 /* ========================================================================== */
1056 
1057 /**
1058   * @brief  Enable the RTC TimeStamp peripheral.
1059   * @param  __HANDLE__ specifies the RTC handle.
1060   * @retval None
1061   */
1062 #define __HAL_RTC_TIMESTAMP_ENABLE(__HANDLE__)                       ((__HANDLE__)->Instance->CR |= (RTC_CR_TSE))
1063 
1064 /**
1065   * @brief  Disable the RTC TimeStamp peripheral.
1066   * @param  __HANDLE__ specifies the RTC handle.
1067   * @retval None
1068   */
1069 #define __HAL_RTC_TIMESTAMP_DISABLE(__HANDLE__)                      ((__HANDLE__)->Instance->CR &= ~(RTC_CR_TSE))
1070 
1071 /**
1072   * @brief  Enable the RTC TimeStamp interrupt.
1073   * @param  __HANDLE__ specifies the RTC handle.
1074   * @param  __INTERRUPT__ specifies the RTC TimeStamp interrupt source to be enabled.
1075   *         This parameter can be:
1076   *            @arg @ref RTC_IT_TS TimeStamp interrupt
1077   * @retval None
1078   */
1079 #define __HAL_RTC_TIMESTAMP_ENABLE_IT(__HANDLE__, __INTERRUPT__)     ((__HANDLE__)->Instance->CR |= (__INTERRUPT__))
1080 
1081 /**
1082   * @brief  Disable the RTC TimeStamp interrupt.
1083   * @param  __HANDLE__ specifies the RTC handle.
1084   * @param  __INTERRUPT__ specifies the RTC TimeStamp interrupt source to be disabled.
1085   *         This parameter can be:
1086   *            @arg @ref RTC_IT_TS TimeStamp interrupt
1087   * @retval None
1088   */
1089 #define __HAL_RTC_TIMESTAMP_DISABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__))
1090 
1091 /**
1092   * @brief  Check whether the specified RTC TimeStamp interrupt has occurred or not.
1093   * @param  __HANDLE__ specifies the RTC handle.
1094   * @param  __INTERRUPT__ specifies the RTC TimeStamp interrupt source to check.
1095   *         This parameter can be:
1096   *            @arg @ref RTC_IT_TS TimeStamp interrupt
1097   * @retval None
1098   */
1099 #if defined(TAMP)
1100 #define __HAL_RTC_TIMESTAMP_GET_IT(__HANDLE__, __INTERRUPT__)        (((((__HANDLE__)->Instance->MISR) & ((__INTERRUPT__) >> 12)) != 0U) ? 1U : 0U)
1101 #else
1102 #define __HAL_RTC_TIMESTAMP_GET_IT(__HANDLE__, __INTERRUPT__)        (((((__HANDLE__)->Instance->ISR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
1103 #endif /* TAMP */
1104 /**
1105   * @brief  Check whether the specified RTC Time Stamp interrupt has been enabled or not.
1106   * @param  __HANDLE__ specifies the RTC handle.
1107   * @param  __INTERRUPT__ specifies the RTC Time Stamp interrupt source to check.
1108   *         This parameter can be:
1109   *            @arg @ref RTC_IT_TS TimeStamp interrupt
1110   * @retval None
1111   */
1112 #define __HAL_RTC_TIMESTAMP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)     (((((__HANDLE__)->Instance->CR) & (__INTERRUPT__)) != 0U) ? 1U : 0U)
1113 
1114 /**
1115   * @brief  Get the selected RTC TimeStamp's flag status.
1116   * @param  __HANDLE__ specifies the RTC handle.
1117   * @param  __FLAG__ specifies the RTC TimeStamp Flag is pending or not.
1118   *         This parameter can be:
1119   *            @arg RTC_FLAG_TSF
1120   *            @arg RTC_FLAG_TSOVF
1121   * @retval Flag status
1122   */
1123 #if defined(TAMP)
1124 #define __HAL_RTC_TIMESTAMP_GET_FLAG(__HANDLE__, __FLAG__)     (((((__HANDLE__)->Instance->SR)  & (__FLAG__)) != 0U) ? 1U : 0U)
1125 #else
1126 #define __HAL_RTC_TIMESTAMP_GET_FLAG(__HANDLE__, __FLAG__)     (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U)
1127 #endif /* TAMP */
1128 
1129 /**
1130   * @brief  Clear the RTC Time Stamp's pending flags.
1131   * @param  __HANDLE__ specifies the RTC handle.
1132   * @param  __FLAG__ specifies the RTC Alarm Flag sources to clear.
1133   *          This parameter can be:
1134   *             @arg RTC_FLAG_TSF
1135   *             @arg RTC_FLAG_TSOVF
1136   * @retval None
1137   */
1138 #if defined(TAMP)
1139 #define __HAL_RTC_TIMESTAMP_CLEAR_FLAG(__HANDLE__, __FLAG__)   ((__HANDLE__)->Instance->SCR |= __FLAG__)
1140 #else
1141 #define __HAL_RTC_TIMESTAMP_CLEAR_FLAG(__HANDLE__, __FLAG__)   ((__HANDLE__)->Instance->ISR = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT)))
1142 #endif /* TAMP */
1143 
1144 /**
1145   * @brief  Enable the RTC internal TimeStamp peripheral.
1146   * @param  __HANDLE__ specifies the RTC handle.
1147   * @retval None
1148   */
1149 #define __HAL_RTC_INTERNAL_TIMESTAMP_ENABLE(__HANDLE__)                ((__HANDLE__)->Instance->CR |= (RTC_CR_ITSE))
1150 
1151 /**
1152   * @brief  Disable the RTC internal TimeStamp peripheral.
1153   * @param  __HANDLE__ specifies the RTC handle.
1154   * @retval None
1155   */
1156 #define __HAL_RTC_INTERNAL_TIMESTAMP_DISABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR &= ~(RTC_CR_ITSE))
1157 
1158 /**
1159   * @brief  Get the selected RTC Internal Time Stamp's flag status.
1160   * @param  __HANDLE__ specifies the RTC handle.
1161   * @param  __FLAG__ specifies the RTC Internal Time Stamp Flag is pending or not.
1162   *         This parameter can be:
1163   *            @arg RTC_FLAG_ITSF
1164   * @retval Flag status
1165   */
1166 #if defined(TAMP)
1167 #define __HAL_RTC_INTERNAL_TIMESTAMP_GET_FLAG(__HANDLE__, __FLAG__)    (((((__HANDLE__)->Instance->SR)  & (__FLAG__)) != 0U) ? 1U : 0U)
1168 #else
1169 #define __HAL_RTC_INTERNAL_TIMESTAMP_GET_FLAG(__HANDLE__, __FLAG__)    (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U)
1170 #endif /* TAMP */
1171 
1172 /**
1173   * @brief  Clear the RTC Internal Time Stamp's pending flags.
1174   * @param  __HANDLE__ specifies the RTC handle.
1175   * @param  __FLAG__ specifies the RTC Internal Time Stamp Flag source to clear.
1176   *          This parameter can be:
1177   *             @arg RTC_FLAG_ITSF
1178   * @note   This flag must be cleared together with TSF flag.
1179   * @retval None
1180   */
1181 #if defined(TAMP)
1182 #define __HAL_RTC_INTERNAL_TIMESTAMP_CLEAR_FLAG(__HANDLE__, __FLAG__)  ((__HANDLE__)->Instance->SCR |= __FLAG__)
1183 #else
1184 #define __HAL_RTC_INTERNAL_TIMESTAMP_CLEAR_FLAG(__HANDLE__, __FLAG__)  ((__HANDLE__)->Instance->ISR = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT)))
1185 #endif /* TAMP */
1186 
1187 /**
1188   * @brief  Enable the RTC TimeStamp on Tamper detection.
1189   * @param  __HANDLE__ specifies the RTC handle.
1190   * @retval None
1191   */
1192 #if defined(TAMP)
1193 #define __HAL_RTC_TAMPTS_ENABLE(__HANDLE__)                       ((__HANDLE__)->Instance->CR |= (RTC_TIMESTAMPONTAMPERDETECTION_MASK))
1194 #else
1195 #define __HAL_RTC_TAMPTS_ENABLE(__HANDLE__)                       ((__HANDLE__)->Instance->TAMPCR |= (RTC_TIMESTAMPONTAMPERDETECTION_MASK))
1196 #endif /* TAMP */
1197 
1198 /**
1199   * @brief  Disable the RTC TimeStamp on Tamper detection.
1200   * @param  __HANDLE__ specifies the RTC handle.
1201   * @retval None
1202   */
1203 #if defined(TAMP)
1204 #define __HAL_RTC_TAMPTS_DISABLE(__HANDLE__)                      ((__HANDLE__)->Instance->CR &= ~(RTC_TIMESTAMPONTAMPERDETECTION_MASK))
1205 #else
1206 #define __HAL_RTC_TAMPTS_DISABLE(__HANDLE__)                      ((__HANDLE__)->Instance->TAMPCR &= ~(RTC_TIMESTAMPONTAMPERDETECTION_MASK))
1207 #endif /* TAMP */
1208 
1209 /**
1210   * @brief  Get activation status of the RTC TimeStamp on Tamper detection.
1211   * @param  __HANDLE__ specifies the RTC handle.
1212   * @retval Activation status of TimeStamp on Tamper detection
1213   *         This value can be:
1214   *            @arg RTC_TIMESTAMPONTAMPERDETECTION_ENABLE
1215   *            @arg RTC_TIMESTAMPONTAMPERDETECTION_DISABLE
1216   */
1217 #if defined(TAMP)
1218 #define __HAL_RTC_TAMPTS_GET_STATUS(__HANDLE__)                   ((__HANDLE__)->Instance->CR &= RTC_TIMESTAMPONTAMPERDETECTION_MASK)
1219 #else
1220 #define __HAL_RTC_TAMPTS_GET_STATUS(__HANDLE__)                   ((__HANDLE__)->Instance->TAMPCR &= RTC_TIMESTAMPONTAMPERDETECTION_MASK)
1221 #endif /* TAMP */
1222 
1223 #if defined(TAMP)
1224 /**
1225   * @brief  Enable the RTC Tamper detection output.
1226   * @param  __HANDLE__ specifies the RTC handle.
1227   * @retval None
1228   */
1229 #define __HAL_RTC_TAMPOE_ENABLE(__HANDLE__)                       ((__HANDLE__)->Instance->CR |= (RTC_CR_TAMPOE))
1230 
1231 /**
1232   * @brief  Disable the RTC Tamper detection output.
1233   * @param  __HANDLE__ specifies the RTC handle.
1234   * @retval None
1235   */
1236 #define __HAL_RTC_TAMPOE_DISABLE(__HANDLE__)                      ((__HANDLE__)->Instance->CR &= ~(RTC_CR_TAMPOE))
1237 #endif /* TAMP */
1238 
1239 /* ========================================================================== */
1240 /*         ##### Extended RTC Peripheral Control exported macros #####        */
1241 /* ========================================================================== */
1242 
1243 /**
1244   * @brief  Enable the RTC calibration output.
1245   * @param  __HANDLE__ specifies the RTC handle.
1246   * @retval None
1247   */
1248 #define __HAL_RTC_CALIBRATION_OUTPUT_ENABLE(__HANDLE__)                ((__HANDLE__)->Instance->CR |= (RTC_CR_COE))
1249 
1250 /**
1251   * @brief  Disable the calibration output.
1252   * @param  __HANDLE__ specifies the RTC handle.
1253   * @retval None
1254   */
1255 #define __HAL_RTC_CALIBRATION_OUTPUT_DISABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR &= ~(RTC_CR_COE))
1256 
1257 /**
1258   * @brief  Enable the clock reference detection.
1259   * @param  __HANDLE__ specifies the RTC handle.
1260   * @retval None
1261   */
1262 #define __HAL_RTC_CLOCKREF_DETECTION_ENABLE(__HANDLE__)                ((__HANDLE__)->Instance->CR |= (RTC_CR_REFCKON))
1263 
1264 /**
1265   * @brief  Disable the clock reference detection.
1266   * @param  __HANDLE__ specifies the RTC handle.
1267   * @retval None
1268   */
1269 #define __HAL_RTC_CLOCKREF_DETECTION_DISABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR &= ~(RTC_CR_REFCKON))
1270 
1271 /**
1272   * @brief  Get the selected RTC shift operation's flag status.
1273   * @param  __HANDLE__ specifies the RTC handle.
1274   * @param  __FLAG__ specifies the RTC shift operation Flag is pending or not.
1275   *          This parameter can be:
1276   *             @arg RTC_FLAG_SHPF
1277   * @retval Flag status
1278   */
1279 #if defined(TAMP)
1280 #define __HAL_RTC_SHIFT_GET_FLAG(__HANDLE__, __FLAG__)         (((((__HANDLE__)->Instance->ICSR) & (__FLAG__)) != 0U) ? 1U : 0U)
1281 #else
1282 #define __HAL_RTC_SHIFT_GET_FLAG(__HANDLE__, __FLAG__)         (((((__HANDLE__)->Instance->ISR)  & (__FLAG__)) != 0U) ? 1U : 0U)
1283 #endif /* TAMP */
1284 
1285 /* ========================================================================== */
1286 /*               ##### RTC Wake-up Interrupt exported macros #####            */
1287 /* ========================================================================== */
1288 
1289 /**
1290   * @brief  Enable interrupt on the RTC WakeUp Timer associated Exti line.
1291   * @retval None
1292   */
1293 #if defined(EXTI_D1)
1294 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT()       (EXTI_D1->IMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1295 #else  /* EXTI */
1296 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT()       (EXTI->IMR1    |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1297 #endif /* EXTI_D1 */
1298 /**
1299   * @brief  Disable interrupt on the RTC WakeUp Timer associated Exti line.
1300   * @retval None
1301   */
1302 #if defined(EXTI_D1)
1303 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT()      (EXTI_D1->IMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1304 #else  /* EXTI */
1305 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT()      (EXTI->IMR1    &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1306 #endif /* EXTI_D1 */
1307 
1308 /**
1309   * @brief  Enable event on the RTC WakeUp Timer associated Exti line.
1310   * @retval None
1311   */
1312 #if defined(EXTI_D1)
1313 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_EVENT()    (EXTI_D1->EMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1314 #else  /* EXTI */
1315 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_EVENT()    (EXTI->EMR1    |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1316 #endif /* EXTI_D1 */
1317 
1318 /**
1319   * @brief  Disable event on the RTC WakeUp Timer associated Exti line.
1320   * @retval None
1321   */
1322 #if defined(EXTI_D1)
1323 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_EVENT()   (EXTI_D1->EMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1324 #else  /* EXTI */
1325 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_EVENT()   (EXTI->EMR1    &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1326 #endif /* EXTI_D1 */
1327 
1328 /**
1329   * @brief  Enable event on the RTC WakeUp Timer associated D3 Exti line.
1330   * @retval None
1331   */
1332 #define __HAL_RTC_WAKEUPTIMER_EXTID3_ENABLE_EVENT()    (EXTI->D3PMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1333 
1334 /**
1335   * @brief  Disable event on the RTC WakeUp Timer associated D3 Exti line.
1336   * @retval None
1337   */
1338 #define __HAL_RTC_WAKEUPTIMER_EXTID3_DISABLE_EVENT()   (EXTI->D3PMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1339 
1340 #if defined(DUAL_CORE)
1341 /**
1342   * @brief  Enable interrupt on the RTC WakeUp Timer associated D2 Exti line.
1343   * @retval None
1344   */
1345 #define __HAL_RTC_WAKEUPTIMER_EXTID2_ENABLE_IT()       (EXTI_D2->IMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1346 
1347 /**
1348   * @brief  Disable interrupt on the RTC WakeUp Timer associated D2 Exti line.
1349   * @retval None
1350   */
1351 #define __HAL_RTC_WAKEUPTIMER_EXTID2_DISABLE_IT()      (EXTI_D2->IMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1352 
1353 /**
1354   * @brief  Enable event on the RTC WakeUp Timer associated D2 Exti line.
1355   * @retval None
1356   */
1357 #define __HAL_RTC_WAKEUPTIMER_EXTID2_ENABLE_EVENT()    (EXTI_D2->EMR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1358 
1359 /**
1360   * @brief  Disable event on the RTC WakeUp Timer associated D2 Exti line.
1361   * @retval None
1362   */
1363 #define __HAL_RTC_WAKEUPTIMER_EXTID2_DISABLE_EVENT()   (EXTI_D2->EMR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1364 
1365 #endif /* DUAL_CORE */
1366 
1367 /**
1368   * @brief  Enable falling edge trigger on the RTC WakeUp Timer associated Exti line.
1369   * @retval None
1370   */
1371 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_FALLING_EDGE()   (EXTI->FTSR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1372 
1373 /**
1374   * @brief  Disable falling edge trigger on the RTC WakeUp Timer associated Exti line.
1375   * @retval None
1376   */
1377 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_FALLING_EDGE()  (EXTI->FTSR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1378 
1379 /**
1380   * @brief  Enable rising edge trigger on the RTC WakeUp Timer associated Exti line.
1381   * @retval None
1382   */
1383 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE()    (EXTI->RTSR1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1384 
1385 /**
1386   * @brief  Disable rising edge trigger on the RTC WakeUp Timer associated Exti line.
1387   * @retval None
1388   */
1389 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_RISING_EDGE()   (EXTI->RTSR1 &= ~(RTC_EXTI_LINE_WAKEUPTIMER_EVENT))
1390 
1391 /**
1392   * @brief  Enable rising & falling edge trigger on the RTC WakeUp Timer associated Exti line.
1393   * @retval None
1394   */
1395 #define __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_FALLING_EDGE()  do { \
1396                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE();  \
1397                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_FALLING_EDGE(); \
1398                                                                  } while(0)
1399 
1400 /**
1401   * @brief  Disable rising & falling edge trigger on the RTC WakeUp Timer associated Exti line.
1402   * This parameter can be:
1403   * @retval None
1404   */
1405 #define __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_RISING_FALLING_EDGE()  do { \
1406                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_RISING_EDGE();  \
1407                                                                    __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_FALLING_EDGE(); \
1408                                                                   } while(0)
1409 
1410 /**
1411   * @brief Check whether the RTC WakeUp Timer associated Exti line interrupt flag is set or not.
1412   * @retval Line Status.
1413   */
1414 #if defined(EXTI_D1)
1415 #define __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG()              (EXTI_D1->PR1 & RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1416 #else  /* EXTI */
1417 #define __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG()              (EXTI->PR1    & RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1418 #endif /* EXTI_D1 */
1419 
1420 /**
1421   * @brief Clear the RTC WakeUp Timer associated Exti line flag.
1422   * @retval None
1423   */
1424 #if defined(EXTI_D1)
1425 #define __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG()            (EXTI_D1->PR1 = RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1426 #else  /* EXTI */
1427 #define __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG()            (EXTI->PR1    = RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1428 #endif /* EXTI_D1 */
1429 
1430 /**
1431   * @brief Check whether the RTC WakeUp Timer associated D3 Exti line interrupt flag is set or not.
1432   * @retval Line Status
1433   */
1434 #define __HAL_RTC_WAKEUPTIMER_EXTID3_GET_FLAG()            (EXTI_D3->PR1 & RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1435 
1436 /**
1437   * @brief Clear the RTC WakeUp Timer associated D3 Exti line flag.
1438   * @retval None.
1439   */
1440 #define __HAL_RTC_WAKEUPTIMER_EXTID3_CLEAR_FLAG()          (EXTI_D3->PR1 = RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1441 
1442 /**
1443   * @brief Generate a Software interrupt on the RTC WakeUp Timer associated Exti line.
1444   * @retval None.
1445   */
1446 #define __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT()         (EXTI->SWIER1 |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1447 
1448 #if defined(DUAL_CORE)
1449 
1450 /**
1451   * @brief Check whether the RTC WakeUp Timer associated D2 Exti line interrupt flag is set or not.
1452   * @retval Line Status.
1453   */
1454 #define __HAL_RTC_WAKEUPTIMER_EXTID2_GET_FLAG()            (EXTI_D2->PR1 & RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1455 
1456 /**
1457   * @brief Clear the RTC WakeUp Timer associated D2 Exti line flag.
1458   * @retval None.
1459   */
1460 #define __HAL_RTC_WAKEUPTIMER_EXTID2_CLEAR_FLAG()          (EXTI_D2->PR1 = RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1461 
1462 #endif /* DUAL_CORE */
1463 
1464 /* ========================================================================== */
1465 /*       ##### RTC TimeStamp and Tamper Interrupt exported macros #####       */
1466 /* ========================================================================== */
1467 
1468 /**
1469   * @brief  Enable interrupt on the RTC Tamper and Timestamp associated Exti line.
1470   * @retval None
1471   */
1472 #if defined(EXTI_D1)
1473 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT()        (EXTI_D1->IMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1474 #else  /* EXTI */
1475 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT()        (EXTI->IMR1    |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1476 #endif /* EXTI_D1 */
1477 
1478 /**
1479   * @brief  Disable interrupt on the RTC Tamper and Timestamp associated Exti line.
1480   * @retval None
1481   */
1482 #if defined(EXTI_D1)
1483 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT()       (EXTI_D1->IMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1484 #else  /* EXTI */
1485 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT()       (EXTI->IMR1    &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1486 #endif /* EXTI_D1 */
1487 
1488 /**
1489   * @brief  Enable event on the RTC Tamper and Timestamp associated Exti line.
1490   * @retval None
1491   */
1492 #if defined(EXTI_D1)
1493 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_EVENT()    (EXTI_D1->EMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1494 #else  /* EXTI */
1495 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_EVENT()    (EXTI->EMR1    |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1496 #endif /* EXTI_D1 */
1497 
1498 /**
1499   * @brief  Disable event on the RTC Tamper and Timestamp associated Exti line.
1500   * @retval None
1501   */
1502 #if defined(EXTI_D1)
1503 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_EVENT()   (EXTI_D1->EMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1504 #else  /* EXTI */
1505 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_EVENT()   (EXTI->EMR1    &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1506 #endif /* EXTI_D1 */
1507 
1508 #if defined(DUAL_CORE)
1509 /**
1510   * @brief  Enable interrupt on the RTC Tamper and Timestamp associated D2 Exti line.
1511   * @retval None
1512   */
1513 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_ENABLE_IT()      (EXTI_D2->IMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1514 
1515 /**
1516   * @brief  Disable interrupt on the RTC Tamper and Timestamp associated D2 Exti line.
1517   * @retval None
1518   */
1519 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_DISABLE_IT()     (EXTI_D2->IMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1520 
1521 
1522 /**
1523   * @brief  Enable event on the RTC Tamper and Timestamp associated D2 Exti line.
1524   * @retval None
1525   */
1526 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_ENABLE_EVENT()  (EXTI_D2->EMR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1527 
1528 
1529 /**
1530   * @brief  Disable event on the RTC Tamper and Timestamp associated D2 Exti line.
1531   * @retval None
1532   */
1533 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_DISABLE_EVENT() (EXTI_D2->EMR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1534 
1535 #endif /* DUAL_CORE */
1536 
1537 /**
1538   * @brief  Enable falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
1539   * @retval None
1540   */
1541 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_FALLING_EDGE()   (EXTI->FTSR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1542 
1543 /**
1544   * @brief  Disable falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
1545   * @retval None
1546   */
1547 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_FALLING_EDGE()  (EXTI->FTSR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1548 
1549 /**
1550   * @brief  Enable rising edge trigger on the RTC Tamper and Timestamp associated Exti line.
1551   * @retval None
1552   */
1553 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_RISING_EDGE()    (EXTI->RTSR1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1554 
1555 /**
1556   * @brief  Disable rising edge trigger on the RTC Tamper and Timestamp associated Exti line.
1557   * @retval None
1558   */
1559 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_RISING_EDGE()   (EXTI->RTSR1 &= ~(RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT))
1560 
1561 /**
1562   * @brief  Enable rising & falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
1563   * @retval None
1564   */
1565 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_RISING_FALLING_EDGE()  do { \
1566                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_RISING_EDGE();  \
1567                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_FALLING_EDGE(); \
1568                                                                       } while(0)
1569 
1570 /**
1571   * @brief  Disable rising & falling edge trigger on the RTC Tamper and Timestamp associated Exti line.
1572   * @retval None
1573   */
1574 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_RISING_FALLING_EDGE()  do { \
1575                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_RISING_EDGE();  \
1576                                                                         __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_FALLING_EDGE(); \
1577                                                                        } while(0)
1578 
1579 /**
1580   * @brief Check whether the RTC Tamper and Timestamp associated Exti line interrupt flag is set or not.
1581   * @retval Line Status
1582   */
1583 #if defined(EXTI_D1)
1584 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG()         (EXTI_D1->PR1 & RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1585 #else  /* EXTI */
1586 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG()         (EXTI->PR1    & RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1587 #endif /* EXTI_D1 */
1588 
1589 /**
1590   * @brief Clear the RTC Tamper and Timestamp associated Exti line flag.
1591   * @retval None
1592   */
1593 #if defined(EXTI_D1)
1594 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG()       (EXTI_D1->PR1 = RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1595 #else  /* EXTI */
1596 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG()       (EXTI->PR1    = RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1597 #endif /* EXTI_D1 */
1598 
1599 #if defined(DUAL_CORE)
1600 /**
1601   * @brief Check whether the RTC Tamper and Timestamp associated D2 Exti line interrupt flag is set or not.
1602   * @retval Line Status
1603   */
1604 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_GET_FLAG()       (EXTI_D2->PR1 & RTC_EXTI_LINE_WAKEUPTIMER_EVENT)
1605 
1606 /**
1607   * @brief Clear the RTC Tamper and Timestamp associated D2 Exti line flag.
1608   * @retval None
1609   */
1610 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_CLEAR_FLAG()     (EXTI_D2->PR1 = RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1611 
1612 #endif  /* DUAL_CORE */
1613 
1614 /**
1615   * @brief Generate a Software interrupt on the RTC Tamper and Timestamp associated Exti line
1616   * @retval None
1617   */
1618 #define __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT()    (EXTI->SWIER1 |= RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT)
1619 
1620 /**
1621   * @}
1622   */
1623 
1624 /* Exported functions --------------------------------------------------------*/
1625 
1626 /** @defgroup RTCEx_Exported_Functions RTC Exported Functions
1627   * @{
1628   */
1629 
1630 /* ========================================================================== */
1631 /*                  ##### RTC TimeStamp exported functions #####              */
1632 /* ========================================================================== */
1633 
1634 /* RTC TimeStamp functions ****************************************************/
1635 
1636 /** @defgroup RTCEx_Exported_Functions_Group1 Extended RTC TimeStamp functions
1637   * @{
1638   */
1639 HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin);
1640 HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp_IT(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin);
1641 HAL_StatusTypeDef HAL_RTCEx_DeactivateTimeStamp(RTC_HandleTypeDef *hrtc);
1642 HAL_StatusTypeDef HAL_RTCEx_SetInternalTimeStamp(RTC_HandleTypeDef *hrtc);
1643 HAL_StatusTypeDef HAL_RTCEx_DeactivateInternalTimeStamp(RTC_HandleTypeDef *hrtc);
1644 HAL_StatusTypeDef HAL_RTCEx_GetTimeStamp(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTimeStamp, RTC_DateTypeDef *sTimeStampDate, uint32_t Format);
1645 void              HAL_RTCEx_TamperTimeStampIRQHandler(RTC_HandleTypeDef *hrtc);
1646 void              HAL_RTCEx_TimeStampEventCallback(RTC_HandleTypeDef *hrtc);
1647 HAL_StatusTypeDef HAL_RTCEx_PollForTimeStampEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1648 /**
1649   * @}
1650   */
1651 
1652 /* ========================================================================== */
1653 /*                    ##### RTC Tamper exported functions #####               */
1654 /* ========================================================================== */
1655 
1656 /* RTC Tamper functions *******************************************************/
1657 
1658 /** @defgroup RTCEx_Exported_Functions_Group5 Extended RTC Tamper functions
1659   * @{
1660   */
1661 HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, const RTC_TamperTypeDef *sTamper);
1662 HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, const RTC_TamperTypeDef *sTamper);
1663 HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper);
1664 HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1665 HAL_StatusTypeDef HAL_RTCEx_PollForTamper2Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1666 HAL_StatusTypeDef HAL_RTCEx_PollForTamper3Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1667 void              HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc);
1668 void              HAL_RTCEx_Tamper2EventCallback(RTC_HandleTypeDef *hrtc);
1669 void              HAL_RTCEx_Tamper3EventCallback(RTC_HandleTypeDef *hrtc);
1670 #if defined(TAMP)
1671 HAL_StatusTypeDef HAL_RTCEx_SetInternalTamper(RTC_HandleTypeDef *hrtc, const RTC_InternalTamperTypeDef *sIntTamper);
1672 HAL_StatusTypeDef HAL_RTCEx_SetInternalTamper_IT(RTC_HandleTypeDef *hrtc, const RTC_InternalTamperTypeDef *sIntTamper);
1673 HAL_StatusTypeDef HAL_RTCEx_DeactivateInternalTamper(RTC_HandleTypeDef *hrtc, uint32_t IntTamper);
1674 HAL_StatusTypeDef HAL_RTCEx_PollForInternalTamperEvent(RTC_HandleTypeDef *hrtc, uint32_t IntTamper, uint32_t Timeout);
1675 void              HAL_RTCEx_InternalTamper1EventCallback(RTC_HandleTypeDef *hrtc);
1676 void              HAL_RTCEx_InternalTamper2EventCallback(RTC_HandleTypeDef *hrtc);
1677 void              HAL_RTCEx_InternalTamper3EventCallback(RTC_HandleTypeDef *hrtc);
1678 void              HAL_RTCEx_InternalTamper4EventCallback(RTC_HandleTypeDef *hrtc);
1679 void              HAL_RTCEx_InternalTamper5EventCallback(RTC_HandleTypeDef *hrtc);
1680 void              HAL_RTCEx_InternalTamper6EventCallback(RTC_HandleTypeDef *hrtc);
1681 void              HAL_RTCEx_InternalTamper8EventCallback(RTC_HandleTypeDef *hrtc);
1682 HAL_StatusTypeDef HAL_RTCEx_SetActiveTampers(RTC_HandleTypeDef *hrtc, const RTC_ActiveTampersTypeDef *sAllTamper);
1683 HAL_StatusTypeDef HAL_RTCEx_SetActiveSeed(RTC_HandleTypeDef *hrtc, const uint32_t *pSeed);
1684 HAL_StatusTypeDef HAL_RTCEx_DeactivateActiveTampers(RTC_HandleTypeDef *hrtc);
1685 #endif /* TAMP */
1686 
1687 /**
1688   * @}
1689   */
1690 
1691 /* ========================================================================== */
1692 /*                   ##### RTC Wake-up exported functions #####               */
1693 /* ========================================================================== */
1694 
1695 /* RTC Wake-up functions ******************************************************/
1696 
1697 /** @defgroup RTCEx_Exported_Functions_Group2 Extended RTC Wake-up functions
1698   * @{
1699   */
1700 HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock);
1701 HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock);
1702 HAL_StatusTypeDef HAL_RTCEx_DeactivateWakeUpTimer(RTC_HandleTypeDef *hrtc);
1703 uint32_t          HAL_RTCEx_GetWakeUpTimer(const RTC_HandleTypeDef *hrtc);
1704 void              HAL_RTCEx_WakeUpTimerIRQHandler(RTC_HandleTypeDef *hrtc);
1705 void              HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc);
1706 HAL_StatusTypeDef HAL_RTCEx_PollForWakeUpTimerEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1707 /**
1708   * @}
1709   */
1710 
1711 /* ========================================================================== */
1712 /*         ##### Extended RTC Backup registers exported functions #####       */
1713 /* ========================================================================== */
1714 
1715 /* Extended RTC Backup registers functions ************************************/
1716 
1717 /** @defgroup RTCEx_Exported_Functions_Group6 Extended RTC Backup register functions
1718   * @{
1719   */
1720 void     HAL_RTCEx_BKUPWrite(const RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data);
1721 uint32_t HAL_RTCEx_BKUPRead(const RTC_HandleTypeDef *hrtc, uint32_t BackupRegister);
1722 /**
1723   * @}
1724   */
1725 
1726 /* ========================================================================== */
1727 /*        ##### Extended RTC Peripheral Control exported functions #####      */
1728 /* ========================================================================== */
1729 
1730 /* Extended RTC Peripheral Control functions **********************************/
1731 
1732 /** @defgroup RTCEx_Exported_Functions_Group3 Extended Peripheral Control functions
1733   * @{
1734   */
1735 HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmoothCalibMinusPulsesValue);
1736 HAL_StatusTypeDef HAL_RTCEx_SetSynchroShift(RTC_HandleTypeDef *hrtc, uint32_t ShiftAdd1S, uint32_t ShiftSubFS);
1737 HAL_StatusTypeDef HAL_RTCEx_SetCalibrationOutPut(RTC_HandleTypeDef *hrtc, uint32_t CalibOutput);
1738 HAL_StatusTypeDef HAL_RTCEx_DeactivateCalibrationOutPut(RTC_HandleTypeDef *hrtc);
1739 HAL_StatusTypeDef HAL_RTCEx_SetRefClock(RTC_HandleTypeDef *hrtc);
1740 HAL_StatusTypeDef HAL_RTCEx_DeactivateRefClock(RTC_HandleTypeDef *hrtc);
1741 HAL_StatusTypeDef HAL_RTCEx_EnableBypassShadow(RTC_HandleTypeDef *hrtc);
1742 HAL_StatusTypeDef HAL_RTCEx_DisableBypassShadow(RTC_HandleTypeDef *hrtc);
1743 #if defined(TAMP)
1744 HAL_StatusTypeDef HAL_RTCEx_MonotonicCounterIncrement(RTC_HandleTypeDef *hrtc,  uint32_t Instance);
1745 HAL_StatusTypeDef HAL_RTCEx_MonotonicCounterGet(const RTC_HandleTypeDef *hrtc, uint32_t *Counter,  uint32_t Instance);
1746 #endif /* TAMP */
1747 /**
1748   * @}
1749   */
1750 
1751 /* Extended RTC features functions *******************************************/
1752 
1753 /** @defgroup RTCEx_Exported_Functions_Group4 Extended features functions
1754   * @{
1755   */
1756 
1757 void              HAL_RTCEx_AlarmBEventCallback(RTC_HandleTypeDef *hrtc);
1758 HAL_StatusTypeDef HAL_RTCEx_PollForAlarmBEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
1759 /**
1760   * @}
1761   */
1762 
1763 /**
1764   * @}
1765   */
1766 
1767 /* Private types -------------------------------------------------------------*/
1768 /* Private variables ---------------------------------------------------------*/
1769 /* Private constants ---------------------------------------------------------*/
1770 /** @defgroup RTCEx_Private_Constants RTC Private Constants
1771   * @{
1772   */
1773 #define RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT  EXTI_IMR1_IM18  /*!< External interrupt line 18 Connected to the RTC Tamper and Time Stamp events */
1774 #define RTC_EXTI_LINE_WAKEUPTIMER_EVENT       EXTI_IMR1_IM19  /*!< External interrupt line 19 Connected to the RTC Wakeup event */
1775 
1776 /* Masks Definition */
1777 #define RTC_TAMPER_X             ((uint32_t) (RTC_TAMPER_1 | RTC_TAMPER_2 | RTC_TAMPER_3))
1778 #define RTC_TAMPER_X_INTERRUPT   ((uint32_t) (RTC_IT_TAMP1 | RTC_IT_TAMP2 | RTC_IT_TAMP3))
1779 
1780 /**
1781   * @}
1782   */
1783 
1784 /* Private macros ------------------------------------------------------------*/
1785 /** @defgroup RTCEx_Private_Macros RTC Private Macros
1786   * @{
1787   */
1788 
1789 /** @defgroup RTCEx_IS_RTC_Definitions Private macros to check input parameters
1790   * @{
1791   */
1792 
1793 /* ========================================================================== */
1794 /*          ##### Extended RTC Backup registers private macros #####          */
1795 /* ========================================================================== */
1796 
1797 #define IS_RTC_BKP(__BKP__)                   ((__BKP__) < BKP_REG_NUMBER)
1798 
1799 /* ========================================================================== */
1800 /*                  ##### RTC TimeStamp private macros #####                  */
1801 /* ========================================================================== */
1802 
1803 #define IS_TIMESTAMP_EDGE(EDGE) (((EDGE) == RTC_TIMESTAMPEDGE_RISING) || \
1804                                  ((EDGE) == RTC_TIMESTAMPEDGE_FALLING))
1805 
1806 #define IS_RTC_TIMESTAMP_PIN(PIN) (((PIN) == RTC_TIMESTAMPPIN_DEFAULT))
1807 
1808 /* ========================================================================== */
1809 /*                    ##### RTC Wake-up private macros #####                  */
1810 /* ========================================================================== */
1811 
1812 #define IS_RTC_WAKEUP_CLOCK(CLOCK) (((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV16)       || \
1813                                     ((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV8)    || \
1814                                     ((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV4)    || \
1815                                     ((CLOCK) == RTC_WAKEUPCLOCK_RTCCLK_DIV2)    || \
1816                                     ((CLOCK) == RTC_WAKEUPCLOCK_CK_SPRE_16BITS) || \
1817                                     ((CLOCK) == RTC_WAKEUPCLOCK_CK_SPRE_17BITS))
1818 
1819 #define IS_RTC_WAKEUP_COUNTER(COUNTER)  ((COUNTER) <= RTC_WUTR_WUT)
1820 
1821 /* ========================================================================== */
1822 /*               ##### RTC Smooth Calibration private macros #####            */
1823 /* ========================================================================== */
1824 
1825 #define IS_RTC_SMOOTH_CALIB_PERIOD(PERIOD) (((PERIOD) == RTC_SMOOTHCALIB_PERIOD_32SEC) || \
1826                                             ((PERIOD) == RTC_SMOOTHCALIB_PERIOD_16SEC) || \
1827                                             ((PERIOD) == RTC_SMOOTHCALIB_PERIOD_8SEC))
1828 
1829 #define IS_RTC_SMOOTH_CALIB_PLUS(PLUS) (((PLUS) == RTC_SMOOTHCALIB_PLUSPULSES_SET) || \
1830                                         ((PLUS) == RTC_SMOOTHCALIB_PLUSPULSES_RESET))
1831 
1832 #define  IS_RTC_SMOOTH_CALIB_MINUS(VALUE) ((VALUE) <= RTC_CALR_CALM)
1833 
1834 /* ========================================================================== */
1835 /*          ##### Extended RTC Peripheral Control private macros #####        */
1836 /* ========================================================================== */
1837 
1838 #define IS_RTC_SHIFT_ADD1S(SEL) (((SEL) == RTC_SHIFTADD1S_RESET) || \
1839                                  ((SEL) == RTC_SHIFTADD1S_SET))
1840 
1841 #define IS_RTC_SHIFT_SUBFS(FS) ((FS) <= RTC_SHIFTR_SUBFS)
1842 
1843 #define IS_RTC_CALIB_OUTPUT(OUTPUT)  (((OUTPUT) == RTC_CALIBOUTPUT_512HZ) || \
1844                                       ((OUTPUT) == RTC_CALIBOUTPUT_1HZ))
1845 
1846 /* ========================================================================== */
1847 /*                    ##### RTC Tamper private macros #####                   */
1848 /* ========================================================================== */
1849 
1850 #define IS_RTC_TAMPER(__TAMPER__)  ((((__TAMPER__) &  RTC_TAMPER_X) != 0x00U) &&  \
1851                                     (((__TAMPER__) & ~RTC_TAMPER_X) == 0x00U))
1852 
1853 #define IS_RTC_TAMPER_INTERRUPT(__INTERRUPT__)                                                           \
1854               ((((__INTERRUPT__) & (  RTC_TAMPER_X_INTERRUPT | RTC_IT_TAMPALL )) != 0x00U) &&  \
1855                (((__INTERRUPT__) & (~(RTC_TAMPER_X_INTERRUPT | RTC_IT_TAMPALL))) == 0x00U))
1856 
1857 #define IS_RTC_TAMPER_TRIGGER(__TRIGGER__) (((__TRIGGER__) == RTC_TAMPERTRIGGER_RISINGEDGE)    || \
1858                                             ((__TRIGGER__) == RTC_TAMPERTRIGGER_FALLINGEDGE)   || \
1859                                             ((__TRIGGER__) == RTC_TAMPERTRIGGER_LOWLEVEL)      || \
1860                                             ((__TRIGGER__) == RTC_TAMPERTRIGGER_HIGHLEVEL))
1861 
1862 #define IS_RTC_TAMPER_ERASE_MODE(__MODE__)             (((__MODE__) == RTC_TAMPER_ERASE_BACKUP_ENABLE) || \
1863                                                         ((__MODE__) == RTC_TAMPER_ERASE_BACKUP_DISABLE))
1864 
1865 #define IS_RTC_TAMPER_MASKFLAG_STATE(__STATE__)        (((__STATE__) == RTC_TAMPERMASK_FLAG_ENABLE) || \
1866                                                         ((__STATE__) == RTC_TAMPERMASK_FLAG_DISABLE))
1867 
1868 #define IS_RTC_TAMPER_FILTER(__FILTER__)  (((__FILTER__) == RTC_TAMPERFILTER_DISABLE) || \
1869                                            ((__FILTER__) == RTC_TAMPERFILTER_2SAMPLE) || \
1870                                            ((__FILTER__) == RTC_TAMPERFILTER_4SAMPLE) || \
1871                                            ((__FILTER__) == RTC_TAMPERFILTER_8SAMPLE))
1872 
1873 #define IS_RTC_TAMPER_SAMPLING_FREQ(__FREQ__) (((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768)|| \
1874                                                ((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV16384)|| \
1875                                                ((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV8192) || \
1876                                                ((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV4096) || \
1877                                                ((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV2048) || \
1878                                                ((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV1024) || \
1879                                                ((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV512)  || \
1880                                                ((__FREQ__) == RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV256))
1881 
1882 #define IS_RTC_TAMPER_PRECHARGE_DURATION(__DURATION__) (((__DURATION__) == RTC_TAMPERPRECHARGEDURATION_1RTCCLK) || \
1883                                                         ((__DURATION__) == RTC_TAMPERPRECHARGEDURATION_2RTCCLK) || \
1884                                                         ((__DURATION__) == RTC_TAMPERPRECHARGEDURATION_4RTCCLK) || \
1885                                                         ((__DURATION__) == RTC_TAMPERPRECHARGEDURATION_8RTCCLK))
1886 
1887 #define IS_RTC_TAMPER_PULLUP_STATE(__STATE__) (((__STATE__) == RTC_TAMPER_PULLUP_ENABLE) || \
1888                                                ((__STATE__) == RTC_TAMPER_PULLUP_DISABLE))
1889 
1890 #define IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION(__DETECTION__) (((__DETECTION__) == RTC_TIMESTAMPONTAMPERDETECTION_ENABLE) || \
1891                                                                   ((__DETECTION__) == RTC_TIMESTAMPONTAMPERDETECTION_DISABLE))
1892 
1893 #if defined(TAMP)
1894 #define IS_RTC_TAMPER_TAMPERDETECTIONOUTPUT(__MODE__) (((__MODE__) == RTC_TAMPERDETECTIONOUTPUT_ENABLE) || \
1895                                                        ((__MODE__) == RTC_TAMPERDETECTIONOUTPUT_DISABLE))
1896 #endif /* TAMP */
1897 
1898 #define IS_RTC_TAMPER_FILTER_CONFIG_CORRECT(FILTER, TRIGGER)            \
1899                   (  (  ((FILTER) != RTC_TAMPERFILTER_DISABLE)          \
1900                      && (  ((TRIGGER) == RTC_TAMPERTRIGGER_LOWLEVEL)    \
1901                         || ((TRIGGER) == RTC_TAMPERTRIGGER_HIGHLEVEL))) \
1902                   || (  ((FILTER) == RTC_TAMPERFILTER_DISABLE)          \
1903                      && (  ((TRIGGER) == RTC_TAMPERTRIGGER_RISINGEDGE)  \
1904                         || ((TRIGGER) == RTC_TAMPERTRIGGER_FALLINGEDGE))))
1905 
1906 #define IS_RTC_INTERNAL_TAMPER(__INT_TAMPER__)   ((((__INT_TAMPER__) &  RTC_INT_TAMPER_ALL) != 0x00U) && \
1907                                                   (((__INT_TAMPER__) & ~RTC_INT_TAMPER_ALL) == 0x00U))
1908 
1909 /**
1910   * @}
1911   */
1912 
1913 /**
1914   * @}
1915   */
1916 
1917 /**
1918   * @}
1919   */
1920 
1921 /**
1922   * @}
1923   */
1924 
1925 #ifdef __cplusplus
1926 }
1927 #endif /* __cplusplus */
1928 
1929 #endif /* STM32H7xx_HAL_RTC_EX_H */
1930 
1931