1 /**
2   ******************************************************************************
3   * @file    stm32u0xx_hal_rtc.h
4   * @author  GPM Application Team
5   * @brief   Header file of RTC HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2023 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 __STM32U0xx_HAL_RTC_H
21 #define __STM32U0xx_HAL_RTC_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32u0xx_hal_def.h"
29 
30 /** @addtogroup STM32U0xx_HAL_Driver
31   * @{
32   */
33 
34 /** @defgroup RTC RTC
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 /** @defgroup RTC_Exported_Types RTC Exported Types
40   * @{
41   */
42 
43 /**
44   * @brief  HAL State structures definition
45   */
46 typedef enum
47 {
48   HAL_RTC_STATE_RESET             = 0x00U,  /*!< RTC not yet initialized or disabled */
49   HAL_RTC_STATE_READY             = 0x01U,  /*!< RTC initialized and ready for use   */
50   HAL_RTC_STATE_BUSY              = 0x02U,  /*!< RTC process is ongoing              */
51   HAL_RTC_STATE_TIMEOUT           = 0x03U,  /*!< RTC timeout state                   */
52   HAL_RTC_STATE_ERROR             = 0x04U   /*!< RTC error state                     */
53 
54 } HAL_RTCStateTypeDef;
55 
56 /**
57   * @brief  RTC Configuration Structure definition
58   */
59 typedef struct
60 {
61   uint32_t HourFormat;        /*!< Specifies the RTC Hour Format.
62                                  This parameter can be a value of @ref RTC_Hour_Formats */
63 
64   uint32_t AsynchPrediv;      /*!< Specifies the RTC Asynchronous Predivider value.
65                                  This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7F */
66 
67   uint32_t SynchPrediv;       /*!< Specifies the RTC Synchronous Predivider value.
68                                  This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7FFF */
69 
70   uint32_t OutPut;            /*!< Specifies which signal will be routed to the RTC output.
71                                  This parameter can be a value of @ref RTCEx_Output_selection_Definitions */
72 
73   uint32_t OutPutRemap;       /*!< Specifies the remap for RTC output.
74                                  This parameter can be a value of @ref  RTC_Output_ALARM_OUT_Remap */
75 
76   uint32_t OutPutPolarity;    /*!< Specifies the polarity of the output signal.
77                                  This parameter can be a value of @ref RTC_Output_Polarity_Definitions */
78 
79   uint32_t OutPutType;        /*!< Specifies the RTC Output Pin mode.
80                                  This parameter can be a value of @ref RTC_Output_Type_ALARM_OUT */
81 
82   uint32_t OutPutPullUp;      /*!< Specifies the RTC Output Pull-Up mode.
83                                  This parameter can be a value of @ref RTC_Output_PullUp_ALARM_OUT */
84 
85   uint32_t BinMode;           /*!< Specifies the RTC binary mode.
86                                  This parameter can be a value of @ref RTCEx_Binary_Mode */
87 
88   uint32_t BinMixBcdU;        /*!< Specifies the BCD calendar update if and only if BinMode = RTC_BINARY_MIX.
89                                  This parameter can be a value of @ref RTCEx_Binary_mix_BCDU */
90 } RTC_InitTypeDef;
91 
92 /**
93   * @brief  RTC Time structure definition
94   */
95 typedef struct
96 {
97   uint8_t Hours;            /*!< Specifies the RTC Time Hour.
98                                  This parameter must be a number between Min_Data = 0 and Max_Data = 12
99                                  if the RTC_HourFormat_12 is selected.
100                                  This parameter must be a number between Min_Data = 0 and Max_Data = 23
101                                  if the RTC_HourFormat_24 is selected */
102 
103   uint8_t Minutes;          /*!< Specifies the RTC Time Minutes.
104                                  This parameter must be a number between Min_Data = 0 and Max_Data = 59 */
105 
106   uint8_t Seconds;          /*!< Specifies the RTC Time Seconds.
107                                  This parameter must be a number between Min_Data = 0 and Max_Data = 59 */
108 
109   uint8_t TimeFormat;       /*!< Specifies the RTC AM/PM Time.
110                                  This parameter can be a value of @ref RTC_AM_PM_Definitions */
111 
112   uint32_t SubSeconds;      /*!< Specifies the RTC_SSR RTC Sub Second register content.
113                                  This field is not used by HAL_RTC_SetTime.
114                                  If the free running 32 bit counter is not activated (mode binary none)
115                                     - This parameter corresponds to a time unit range between [0-1] Second
116                                     with [1 Sec / SecondFraction +1] granularity
117                                  else
118                                     - This parameter corresponds to the free running 32 bit counter. */
119 
120   uint32_t SecondFraction;  /*!< Specifies the range or granularity of Sub Second register content
121                                  corresponding to Synchronous pre-scaler factor value (PREDIV_S)
122                                  This parameter corresponds to a time unit range between [0-1] Second
123                                  with [1 Sec / SecondFraction +1] granularity.
124                                  This field will be used only by HAL_RTC_GetTime function */
125 
126   uint32_t DayLightSaving;  /*!< This interface is deprecated. To manage Daylight
127                                  Saving Time, please use HAL_RTC_DST_xxx functions */
128 
129   uint32_t StoreOperation;  /*!< This interface is deprecated. To manage Daylight
130                                  Saving Time, please use HAL_RTC_DST_xxx functions */
131 } RTC_TimeTypeDef;
132 
133 /**
134   * @brief  RTC Date structure definition
135   */
136 typedef struct
137 {
138   uint8_t WeekDay;  /*!< Specifies the RTC Date WeekDay.
139                          This parameter can be a value of @ref RTC_WeekDay_Definitions */
140 
141   uint8_t Month;    /*!< Specifies the RTC Date Month (in BCD format).
142                          This parameter can be a value of @ref RTC_Month_Date_Definitions */
143 
144   uint8_t Date;     /*!< Specifies the RTC Date.
145                          This parameter must be a number between Min_Data = 1 and Max_Data = 31 */
146 
147   uint8_t Year;     /*!< Specifies the RTC Date Year.
148                          This parameter must be a number between Min_Data = 0 and Max_Data = 99 */
149 
150 } RTC_DateTypeDef;
151 
152 /**
153   * @brief  RTC Alarm structure definition
154   */
155 typedef struct
156 {
157   RTC_TimeTypeDef AlarmTime;     /*!< Specifies the RTC Alarm Time members */
158 
159   uint32_t AlarmMask;            /*!< Specifies the RTC Alarm Masks.
160                                       This parameter can be a value of @ref RTC_AlarmMask_Definitions */
161 
162   uint32_t AlarmSubSecondMask;   /*!< Specifies the RTC Alarm SubSeconds Masks.
163                                       if Binary mode is RTC_BINARY_ONLY or is RTC_BINARY_MIX
164                                         This parameter can be a value of
165                                         @ref RTCEx_Alarm_Sub_Seconds_binary_Masks_Definitions
166                                       else if Binary mode is RTC_BINARY_NONE
167                                         This parameter can be a value of @ref RTC_Alarm_Sub_Seconds_Masks_Definitions */
168 
169   uint32_t BinaryAutoClr;        /*!< Clear synchronously counter (RTC_SSR) on binary alarm.
170                                       RTC_ALARMSUBSECONDBIN_AUTOCLR_YES must only be used if Binary mode is
171                                       RTC_BINARY_ONLY
172                                       This parameter can be a value of
173                                       @ref RTCEx_Alarm_Sub_Seconds_binary_Clear_Definitions */
174 
175   uint32_t AlarmDateWeekDaySel;  /*!< Specifies the RTC Alarm is on Date or WeekDay.
176                                      This parameter can be a value of @ref RTC_AlarmDateWeekDay_Definitions */
177 
178   uint8_t AlarmDateWeekDay;      /*!< Specifies the RTC Alarm Date/WeekDay.
179                                       If the Alarm Date is selected, this parameter must be set to
180                                       a value in the 1-31 range.
181                                       If the Alarm WeekDay is selected, this parameter can be a value of
182                                       @ref RTC_WeekDay_Definitions */
183 
184   uint32_t FlagAutoClr;          /*!< Specifies the alarm trigger generation. This feature is meaningful to avoid any
185                                       RTC software execution after configuration.
186                                       When FlagAutoClr is set in interrupt mode, EXTI is configured as EVENT instead of
187                                       interrupt to avoid useless IRQ handler execution.
188                                       This parameter can be a value of @ref RTC_ALARM_Flag_AutoClear_Definitions */
189 
190   uint32_t Alarm;                /*!< Specifies the alarm .
191                                       This parameter can be a value of @ref RTC_Alarms_Definitions */
192 } RTC_AlarmTypeDef;
193 
194 /**
195   * @brief  RTC Handle Structure definition
196   */
197 #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1)
198 typedef struct __RTC_HandleTypeDef
199 #else
200 typedef struct
201 #endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */
202 {
203   RTC_TypeDef               *Instance;  /*!< Legacy register base address. Not used anymore, the driver directly uses
204                                              cmsis base address */
205 
206   RTC_InitTypeDef           Init;       /*!< RTC required parameters  */
207 
208   HAL_LockTypeDef           Lock;       /*!< RTC locking object       */
209 
210   __IO HAL_RTCStateTypeDef  State;      /*!< Time communication state */
211 
212 #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1)
213   void (* AlarmAEventCallback)(struct __RTC_HandleTypeDef *hrtc);           /*!< RTC Alarm A Event callback */
214   void (* AlarmBEventCallback)(struct __RTC_HandleTypeDef *hrtc);           /*!< RTC Alarm B Event callback */
215   void (* TimeStampEventCallback)(struct __RTC_HandleTypeDef *hrtc);        /*!< RTC TimeStamp Event callback */
216   void (* WakeUpTimerEventCallback)(struct __RTC_HandleTypeDef *hrtc);      /*!< RTC WakeUpTimer Event callback */
217   void (* SSRUEventCallback)(struct __RTC_HandleTypeDef *hrtc);             /*!< RTC SSRU Event callback */
218   void (* Tamper1EventCallback)(struct __RTC_HandleTypeDef *hrtc);          /*!< RTC Tamper 1 Event callback */
219   void (* Tamper2EventCallback)(struct __RTC_HandleTypeDef *hrtc);          /*!< RTC Tamper 2 Event callback */
220   void (* Tamper3EventCallback)(struct __RTC_HandleTypeDef *hrtc);          /*!< RTC Tamper 3 Event callback */
221   void (* Tamper4EventCallback)(struct __RTC_HandleTypeDef *hrtc);          /*!< RTC Tamper 4 Event callback */
222   void (* Tamper5EventCallback)(struct __RTC_HandleTypeDef *hrtc);          /*!< RTC Tamper 5 Event callback */
223   void (* InternalTamper3EventCallback)(struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Internal Tamper 3 Event callback */
224   void (* InternalTamper4EventCallback)(struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Internal Tamper 4 Event callback */
225   void (* InternalTamper5EventCallback)(struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Internal Tamper 5 Event callback */
226   void (* InternalTamper6EventCallback)(struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Internal Tamper 6 Event callback */
227   void (* MspInitCallback)(struct __RTC_HandleTypeDef *hrtc);               /*!< RTC Msp Init callback */
228   void (* MspDeInitCallback)(struct __RTC_HandleTypeDef *hrtc);             /*!< RTC Msp DeInit callback */
229 
230 #endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */
231 
232 } RTC_HandleTypeDef;
233 
234 #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1)
235 /**
236   * @brief  HAL RTC Callback ID enumeration definition
237   */
238 typedef enum
239 {
240   HAL_RTC_ALARM_A_EVENT_CB_ID            = 0x00U,    /*!< RTC Alarm A Event Callback ID      */
241   HAL_RTC_ALARM_B_EVENT_CB_ID            = 0x01U,    /*!< RTC Alarm B Event Callback ID      */
242   HAL_RTC_TIMESTAMP_EVENT_CB_ID          = 0x02U,    /*!< RTC TimeStamp Event Callback ID    */
243   HAL_RTC_WAKEUPTIMER_EVENT_CB_ID        = 0x03U,    /*!< RTC WakeUp Timer Event Callback ID */
244   HAL_RTC_SSRU_EVENT_CB_ID               = 0x04U,    /*!< RTC SSRU Event Callback ID         */
245   HAL_RTC_TAMPER1_EVENT_CB_ID            = 0x05U,    /*!< RTC Tamper 1 Callback ID           */
246   HAL_RTC_TAMPER2_EVENT_CB_ID            = 0x06U,    /*!< RTC Tamper 2 Callback ID           */
247   HAL_RTC_TAMPER3_EVENT_CB_ID            = 0x07U,    /*!< RTC Tamper 3 Callback ID           */
248   HAL_RTC_TAMPER4_EVENT_CB_ID            = 0x08U,    /*!< RTC Tamper 4 Callback ID           */
249   HAL_RTC_TAMPER5_EVENT_CB_ID            = 0x09U,    /*!< RTC Tamper 5 Callback ID           */
250   HAL_RTC_INTERNAL_TAMPER3_EVENT_CB_ID   = 0x0AU,    /*!< RTC Internal Tamper 3 Callback ID  */
251   HAL_RTC_INTERNAL_TAMPER4_EVENT_CB_ID   = 0x0BU,    /*!< RTC Internal Tamper 4 Callback ID  */
252   HAL_RTC_INTERNAL_TAMPER5_EVENT_CB_ID   = 0x0CU,    /*!< RTC Internal Tamper 5 Callback ID  */
253   HAL_RTC_INTERNAL_TAMPER6_EVENT_CB_ID   = 0x0DU,    /*!< RTC Internal Tamper 6 Callback ID  */
254   HAL_RTC_MSPINIT_CB_ID                  = 0x0EU,    /*!< RTC Msp Init callback ID           */
255   HAL_RTC_MSPDEINIT_CB_ID                = 0x0FU     /*!< RTC Msp DeInit callback ID         */
256 } HAL_RTC_CallbackIDTypeDef;
257 
258 /**
259   * @brief  HAL RTC Callback pointer definition
260   */
261 typedef  void (*pRTC_CallbackTypeDef)(RTC_HandleTypeDef *hrtc);  /*!< pointer to an RTC callback function */
262 #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */
263 
264 /**
265   * @}
266   */
267 
268 /* Exported constants --------------------------------------------------------*/
269 /** @defgroup RTC_Exported_Constants RTC Exported Constants
270   * @{
271   */
272 
273 /** @defgroup RTC_Hour_Formats RTC Hour Formats
274   * @{
275   */
276 #define RTC_HOURFORMAT_24                   0x00000000U
277 #define RTC_HOURFORMAT_12                   RTC_CR_FMT
278 /**
279   * @}
280   */
281 
282 /** @defgroup RTCEx_Output_selection_Definitions RTCEx Output Selection Definition
283   * @{
284   */
285 #define RTC_OUTPUT_DISABLE                  0x00000000U
286 #define RTC_OUTPUT_ALARMA                   RTC_CR_OSEL_0
287 #define RTC_OUTPUT_ALARMB                   RTC_CR_OSEL_1
288 #define RTC_OUTPUT_WAKEUP                   RTC_CR_OSEL
289 #define RTC_OUTPUT_TAMPER                   RTC_CR_TAMPOE
290 /**
291   * @}
292   */
293 
294 /** @defgroup RTC_Output_Polarity_Definitions RTC Output Polarity Definitions
295   * @{
296   */
297 #define RTC_OUTPUT_POLARITY_HIGH            0x00000000U
298 #define RTC_OUTPUT_POLARITY_LOW             RTC_CR_POL
299 /**
300   * @}
301   */
302 
303 /** @defgroup RTC_Output_Type_ALARM_OUT RTC Output Type ALARM OUT
304   * @{
305   */
306 #define RTC_OUTPUT_TYPE_PUSHPULL            0x00000000U
307 #define RTC_OUTPUT_TYPE_OPENDRAIN           RTC_CR_TAMPALRM_TYPE
308 /**
309   * @}
310   */
311 
312 /** @defgroup RTC_Output_PullUp_ALARM_OUT RTC Output Pull-Up ALARM OUT
313   * @{
314   */
315 #define RTC_OUTPUT_PULLUP_NONE              0x00000000U
316 #define RTC_OUTPUT_PULLUP_ON                RTC_CR_TAMPALRM_PU
317 /**
318   * @}
319   */
320 
321 /** @defgroup RTC_Output_ALARM_OUT_Remap RTC Output ALARM OUT Remap
322   * @{
323   */
324 #define RTC_OUTPUT_REMAP_NONE               0x00000000U
325 #define RTC_OUTPUT_REMAP_POS1               RTC_CR_OUT2EN
326 /**
327   * @}
328   */
329 
330 /** @defgroup RTC_AM_PM_Definitions RTC AM PM Definitions
331   * @{
332   */
333 #define RTC_HOURFORMAT12_AM                 0x0U
334 #define RTC_HOURFORMAT12_PM                 0x1U
335 /**
336   * @}
337   */
338 
339 /** @defgroup RTC_DayLightSaving_Definitions RTC DayLightSaving Definitions
340   * @{
341   */
342 #define RTC_DAYLIGHTSAVING_SUB1H            RTC_CR_SUB1H
343 #define RTC_DAYLIGHTSAVING_ADD1H            RTC_CR_ADD1H
344 #define RTC_DAYLIGHTSAVING_NONE             0x00000000U
345 /**
346   * @}
347   */
348 
349 /** @defgroup RTC_StoreOperation_Definitions RTC StoreOperation Definitions
350   * @{
351   */
352 #define RTC_STOREOPERATION_RESET            0x00000000U
353 #define RTC_STOREOPERATION_SET              RTC_CR_BKP
354 /**
355   * @}
356   */
357 
358 /** @defgroup RTC_Input_parameter_format_definitions RTC Input Parameter Format Definitions
359   * @{
360   */
361 #define RTC_FORMAT_BIN                      0x00000000U
362 #define RTC_FORMAT_BCD                      0x00000001U
363 /**
364   * @}
365   */
366 
367 /** @defgroup RTC_Month_Date_Definitions RTC Month Date Definitions
368   * @{
369   */
370 
371 /* Coded in BCD format */
372 #define RTC_MONTH_JANUARY                   ((uint8_t)0x01U)
373 #define RTC_MONTH_FEBRUARY                  ((uint8_t)0x02U)
374 #define RTC_MONTH_MARCH                     ((uint8_t)0x03U)
375 #define RTC_MONTH_APRIL                     ((uint8_t)0x04U)
376 #define RTC_MONTH_MAY                       ((uint8_t)0x05U)
377 #define RTC_MONTH_JUNE                      ((uint8_t)0x06U)
378 #define RTC_MONTH_JULY                      ((uint8_t)0x07U)
379 #define RTC_MONTH_AUGUST                    ((uint8_t)0x08U)
380 #define RTC_MONTH_SEPTEMBER                 ((uint8_t)0x09U)
381 #define RTC_MONTH_OCTOBER                   ((uint8_t)0x10U)
382 #define RTC_MONTH_NOVEMBER                  ((uint8_t)0x11U)
383 #define RTC_MONTH_DECEMBER                  ((uint8_t)0x12U)
384 
385 /**
386   * @}
387   */
388 
389 /** @defgroup RTC_WeekDay_Definitions RTC WeekDay Definitions
390   * @{
391   */
392 #define RTC_WEEKDAY_MONDAY                  ((uint8_t)0x01U)
393 #define RTC_WEEKDAY_TUESDAY                 ((uint8_t)0x02U)
394 #define RTC_WEEKDAY_WEDNESDAY               ((uint8_t)0x03U)
395 #define RTC_WEEKDAY_THURSDAY                ((uint8_t)0x04U)
396 #define RTC_WEEKDAY_FRIDAY                  ((uint8_t)0x05U)
397 #define RTC_WEEKDAY_SATURDAY                ((uint8_t)0x06U)
398 #define RTC_WEEKDAY_SUNDAY                  ((uint8_t)0x07U)
399 
400 /**
401   * @}
402   */
403 
404 /** @defgroup RTC_AlarmDateWeekDay_Definitions RTC AlarmDateWeekDay Definitions
405   * @{
406   */
407 #define RTC_ALARMDATEWEEKDAYSEL_DATE        0x00000000U
408 #define RTC_ALARMDATEWEEKDAYSEL_WEEKDAY     RTC_ALRMAR_WDSEL
409 
410 /**
411   * @}
412   */
413 
414 /** @defgroup RTC_AlarmMask_Definitions RTC AlarmMask Definitions
415   * @{
416   */
417 #define RTC_ALARMMASK_NONE                  0x00000000U
418 #define RTC_ALARMMASK_DATEWEEKDAY           RTC_ALRMAR_MSK4
419 #define RTC_ALARMMASK_HOURS                 RTC_ALRMAR_MSK3
420 #define RTC_ALARMMASK_MINUTES               RTC_ALRMAR_MSK2
421 #define RTC_ALARMMASK_SECONDS               RTC_ALRMAR_MSK1
422 #define RTC_ALARMMASK_ALL                   (RTC_ALARMMASK_DATEWEEKDAY | RTC_ALARMMASK_HOURS  | \
423                                              RTC_ALARMMASK_MINUTES | RTC_ALARMMASK_SECONDS)
424 
425 /**
426   * @}
427   */
428 
429 /** @defgroup RTC_Alarms_Definitions RTC Alarms Definitions
430   * @{
431   */
432 #define RTC_ALARM_A                         RTC_CR_ALRAE
433 #define RTC_ALARM_B                         RTC_CR_ALRBE
434 
435 /**
436   * @}
437   */
438 /** @defgroup RTC_ALARM_Flag_AutoClear_Definitions RTC Alarms Flag Auto Clear Definitions
439   * @{
440   */
441 #define ALARM_FLAG_AUTOCLR_ENABLE                         0x00000001U
442 #define ALARM_FLAG_AUTOCLR_DISABLE                        0x00000000U
443 /**
444   * @}
445   */
446 
447 /** @defgroup RTC_Alarm_Sub_Seconds_Masks_Definitions RTC Alarm Sub Seconds Masks Definitions
448   * @{
449   */
450 #define RTC_ALARMSUBSECONDMASK_ALL       0x00000000U            /*!< All Alarm SS fields are masked.
451                                                                         There is no comparison on sub seconds
452                                                                         for Alarm */
453 #define RTC_ALARMSUBSECONDMASK_SS14_1    RTC_ALRMASSR_MASKSS_0  /*!< SS[14:1] not used in Alarm
454                                                                         comparison. Only SS[0] is compared. */
455 #define RTC_ALARMSUBSECONDMASK_SS14_2    RTC_ALRMASSR_MASKSS_1  /*!< SS[14:2] not used in Alarm
456                                                                         comparison. Only SS[1:0] are compared  */
457 #define RTC_ALARMSUBSECONDMASK_SS14_3    (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_1) /*!< SS[14:3] not used in Alarm
458                                                                                               comparison. Only SS[2:0]
459                                                                                               are compared  */
460 #define RTC_ALARMSUBSECONDMASK_SS14_4    RTC_ALRMASSR_MASKSS_2                           /*!< SS[14:4] not used in Alarm
461                                                                                               comparison. Only SS[3:0]
462                                                                                               are compared  */
463 #define RTC_ALARMSUBSECONDMASK_SS14_5    (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_2) /*!< SS[14:5] not used in Alarm
464                                                                                                comparison. Only SS[4:0]
465                                                                                                are compared  */
466 #define RTC_ALARMSUBSECONDMASK_SS14_6    (RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_2) /*!< SS[14:6] not used in Alarm
467                                                                                               comparison.Only SS[5:0]
468                                                                                               are compared  */
469 #define RTC_ALARMSUBSECONDMASK_SS14_7    (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_1 | \
470                                           RTC_ALRMASSR_MASKSS_2)                         /*!< SS[14:7] not used in Alarm
471                                                                                               comparison. Only SS[6:0]
472                                                                                               are compared  */
473 #define RTC_ALARMSUBSECONDMASK_SS14_8    RTC_ALRMASSR_MASKSS_3                           /*!< SS[14:8] not used in Alarm
474                                                                                               comparison. Only SS[7:0]
475                                                                                               are compared  */
476 #define RTC_ALARMSUBSECONDMASK_SS14_9    (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_3) /*!< SS[14:9] not used in Alarm
477                                                                                               comparison. Only SS[8:0]
478                                                                                               are compared  */
479 #define RTC_ALARMSUBSECONDMASK_SS14_10   (RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_3) /*!< SS[14:10] not used in
480                                                                                               Alarm comparison. Only
481                                                                                               SS[9:0] are compared  */
482 #define RTC_ALARMSUBSECONDMASK_SS14_11   (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_1 | \
483                                           RTC_ALRMASSR_MASKSS_3)                         /*!< SS[14:11] not used in
484                                                                                               Alarm comparison. Only
485                                                                                               SS[10:0] are compared */
486 #define RTC_ALARMSUBSECONDMASK_SS14_12   (RTC_ALRMASSR_MASKSS_2 | RTC_ALRMASSR_MASKSS_3) /*!< SS[14:12] not used in
487                                                                                               Alarm comparison. Only
488                                                                                               SS[11:0] are compared  */
489 #define RTC_ALARMSUBSECONDMASK_SS14_13   (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_2 | \
490                                           RTC_ALRMASSR_MASKSS_3)                         /*!< SS[14:13] not used in
491                                                                                               Alarm comparison. Only
492                                                                                               SS[12:0] are compared */
493 #define RTC_ALARMSUBSECONDMASK_SS14      (RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_2 | \
494                                           RTC_ALRMASSR_MASKSS_3)                         /*!< SS[14] not used in Alarm
495                                                                                               comparison. Only SS[13:0]
496                                                                                               are compared  */
497 #define RTC_ALARMSUBSECONDMASK_NONE      RTC_ALRMASSR_MASKSS                             /*!< SS[14:0] are compared and
498                                                                                               must match to activate
499                                                                                               alarm. */
500 /**
501   * @}
502   */
503 
504 /** @defgroup RTC_Interrupts_Definitions RTC Interrupts Definitions
505   * @{
506   */
507 #define RTC_IT_TS                           RTC_CR_TSIE        /*!< Enable Timestamp Interrupt    */
508 #define RTC_IT_WUT                          RTC_CR_WUTIE       /*!< Enable Wakeup timer Interrupt */
509 #define RTC_IT_SSRU                         RTC_CR_SSRUIE      /*!< Enable SSR Underflow Interrupt */
510 #define RTC_IT_ALRA                         RTC_CR_ALRAIE      /*!< Enable Alarm A Interrupt      */
511 #define RTC_IT_ALRB                         RTC_CR_ALRBIE      /*!< Enable Alarm B Interrupt      */
512 /**
513   * @}
514   */
515 
516 /** @defgroup RTC_Interruption_Mask    RTC Interruptions Flag Mask
517   * @{
518   */
519 #define RTC_IT_MASK                         0x001FU                  /*!< RTC interruptions flags mask */
520 /**
521   * @}
522   */
523 
524 /** @defgroup RTC_Flags_Definitions RTC Flags Definitions
525   *        Elements values convention: 000000XX000YYYYYb
526   *           - YYYYY  : Interrupt flag position in the XX register (5bits)
527   *           - XX  : Interrupt status register (2bits)
528   *                 - 01: ICSR register
529   *                 - 10: SR register
530   * @{
531   */
532 #define RTC_FLAG_RECALPF                    0x00000110u    /*!< Recalibration pending Flag */
533 #define RTC_FLAG_INITF                      0x00000106u    /*!< Initialization flag */
534 #define RTC_FLAG_RSF                        0x00000105u    /*!< Registers synchronization flag */
535 #define RTC_FLAG_INITS                      0x00000104u    /*!< Initialization status flag */
536 #define RTC_FLAG_SHPF                       0x00000103u    /*!< Shift operation pending flag */
537 #define RTC_FLAG_WUTWF                      0x00000102u    /*!< Wakeup timer write flag */
538 #define RTC_FLAG_SSRUF                      0x00000206u    /*!< SSR underflow flag */
539 #define RTC_FLAG_ITSF                       0x00000205u    /*!< Internal Time-stamp flag */
540 #define RTC_FLAG_TSOVF                      0x00000204u    /*!< Time-stamp overflow flag */
541 #define RTC_FLAG_TSF                        0x00000203u    /*!< Time-stamp flag */
542 #define RTC_FLAG_WUTF                       0x00000202u    /*!< Wakeup timer flag */
543 #define RTC_FLAG_ALRBF                      0x00000201u    /*!< Alarm B flag */
544 #define RTC_FLAG_ALRAF                      0x00000200u    /*!< Alarm A flag */
545 /**
546   * @}
547   */
548 
549 /** @defgroup RTC_Clear_Flags_Definitions RTC Clear Flags Definitions
550   * @{
551   */
552 #define RTC_CLEAR_SSRUF                     RTC_SCR_CSSRUF   /*!< Clear SSR underflow flag */
553 #define RTC_CLEAR_ITSF                      RTC_SCR_CITSF    /*!< Clear Internal Time-stamp flag */
554 #define RTC_CLEAR_TSOVF                     RTC_SCR_CTSOVF   /*!< Clear Time-stamp overflow flag */
555 #define RTC_CLEAR_TSF                       RTC_SCR_CTSF     /*!< Clear Time-stamp flag */
556 #define RTC_CLEAR_WUTF                      RTC_SCR_CWUTF    /*!< Clear Wakeup timer flag */
557 #define RTC_CLEAR_ALRBF                     RTC_SCR_CALRBF   /*!< Clear Alarm B flag */
558 #define RTC_CLEAR_ALRAF                     RTC_SCR_CALRAF   /*!< Clear Alarm A flag */
559 /**
560   * @}
561   */
562 
563 /**
564   * @}
565   */
566 
567 /* Exported macros -----------------------------------------------------------*/
568 /** @defgroup RTC_Exported_Macros RTC Exported Macros
569   * @{
570   */
571 
572 /** @brief Reset RTC handle state
573   * @param  __HANDLE__ RTC handle.
574   * @retval None
575   */
576 #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1)
577 #define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) do{\
578                                                       (__HANDLE__)->State = HAL_RTC_STATE_RESET;\
579                                                       (__HANDLE__)->MspInitCallback = NULL;\
580                                                       (__HANDLE__)->MspDeInitCallback = NULL;\
581                                                      }while(0)
582 #else
583 #define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_RTC_STATE_RESET)
584 #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */
585 
586 /**
587   * @brief  Disable the write protection for RTC registers.
588   * @param  __HANDLE__ specifies the RTC handle.
589   * @retval None
590   */
591 #define __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__)             \
592   do{                   \
593     RTC->WPR = 0xCAU;   \
594     RTC->WPR = 0x53U;   \
595   } while(0U)
596 
597 /**
598   * @brief  Enable the write protection for RTC registers.
599   * @param  __HANDLE__ specifies the RTC handle.
600   * @retval None
601   */
602 #define __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__)              \
603   do{                   \
604     RTC->WPR = 0xFFU;   \
605   } while(0U)
606 
607 /**
608   * @brief  Add 1 hour (summer time change).
609   * @param  __HANDLE__ specifies the RTC handle.
610   * @param  __BKP__ Backup
611   *         This parameter can be:
612   *            @arg @ref RTC_STOREOPERATION_RESET
613   *            @arg @ref RTC_STOREOPERATION_SET
614   * @retval None
615   */
616 #define __HAL_RTC_DAYLIGHT_SAVING_TIME_ADD1H(__HANDLE__, __BKP__)   \
617   do {                                             \
618     __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__); \
619     SET_BIT(RTC->CR, RTC_CR_ADD1H);                \
620     MODIFY_REG(RTC->CR, RTC_CR_BKP , (__BKP__));   \
621     __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__);  \
622   } while(0);
623 
624 /**
625   * @brief  Subtract 1 hour (winter time change).
626   * @param  __HANDLE__ specifies the RTC handle.
627   * @param  __BKP__ Backup
628   *         This parameter can be:
629   *            @arg @ref RTC_STOREOPERATION_RESET
630   *            @arg @ref RTC_STOREOPERATION_SET
631   * @retval None
632   */
633 #define __HAL_RTC_DAYLIGHT_SAVING_TIME_SUB1H(__HANDLE__, __BKP__)   \
634   do {                                              \
635     __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__);  \
636     SET_BIT(RTC->CR, RTC_CR_SUB1H);                 \
637     MODIFY_REG(RTC->CR, RTC_CR_BKP , (__BKP__));    \
638     __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__);   \
639   } while(0);
640 
641 /**
642   * @brief  Enable the RTC ALARMA peripheral.
643   * @param  __HANDLE__ specifies the RTC handle.
644   * @retval None
645   */
646 #define __HAL_RTC_ALARMA_ENABLE(__HANDLE__)  (RTC->CR |= (RTC_CR_ALRAE))
647 
648 /**
649   * @brief  Disable the RTC ALARMA peripheral.
650   * @param  __HANDLE__ specifies the RTC handle.
651   * @retval None
652   */
653 #define __HAL_RTC_ALARMA_DISABLE(__HANDLE__)  (RTC->CR &= ~(RTC_CR_ALRAE))
654 
655 /**
656   * @brief  Enable the RTC ALARMB peripheral.
657   * @param  __HANDLE__ specifies the RTC handle.
658   * @retval None
659   */
660 #define __HAL_RTC_ALARMB_ENABLE(__HANDLE__)   (RTC->CR |= (RTC_CR_ALRBE))
661 
662 /**
663   * @brief  Disable the RTC ALARMB peripheral.
664   * @param  __HANDLE__ specifies the RTC handle.
665   * @retval None
666   */
667 #define __HAL_RTC_ALARMB_DISABLE(__HANDLE__)  (RTC->CR &= ~(RTC_CR_ALRBE))
668 
669 /**
670   * @brief  Enable the RTC Alarm interrupt.
671   * @param  __HANDLE__ specifies the RTC handle.
672   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt sources to be enabled or disabled.
673   *          This parameter can be any combination of the following values:
674   *             @arg @ref RTC_IT_ALRA Alarm A interrupt
675   *             @arg @ref RTC_IT_ALRB Alarm B interrupt
676   * @retval None
677   */
678 #define __HAL_RTC_ALARM_ENABLE_IT(__HANDLE__, __INTERRUPT__)   (RTC->CR |= (__INTERRUPT__))
679 
680 /**
681   * @brief  Disable the RTC Alarm interrupt.
682   * @param  __HANDLE__ specifies the RTC handle.
683   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt sources to be enabled or disabled.
684   *         This parameter can be any combination of the following values:
685   *            @arg @ref RTC_IT_ALRA Alarm A interrupt
686   *            @arg @ref RTC_IT_ALRB Alarm B interrupt
687   * @retval None
688   */
689 #define __HAL_RTC_ALARM_DISABLE_IT(__HANDLE__, __INTERRUPT__) (RTC->CR &= ~(__INTERRUPT__))
690 
691 /**
692   * @brief  Check whether the specified RTC Alarm interrupt has occurred or not.
693   * @param  __HANDLE__ specifies the RTC handle.
694   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt sources to check.
695   *         This parameter can be:
696   *            @arg @ref RTC_IT_ALRA Alarm A interrupt
697   *            @arg @ref RTC_IT_ALRB Alarm B interrupt
698   * @retval None
699   */
700 #define __HAL_RTC_ALARM_GET_IT(__HANDLE__, __INTERRUPT__) ((((RTC->MISR)& ((__INTERRUPT__)>> 12U)) != 0U) ? 1UL : 0UL)
701 
702 /**
703   * @brief  Check whether the specified RTC Alarm interrupt has been enabled or not.
704   * @param  __HANDLE__ specifies the RTC handle.
705   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt sources to check.
706   *         This parameter can be:
707   *            @arg @ref RTC_IT_ALRA Alarm A interrupt
708   *            @arg @ref RTC_IT_ALRB Alarm B interrupt
709   * @retval None
710   */
711 #define __HAL_RTC_ALARM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)     ((((RTC->CR) & (__INTERRUPT__)) != 0U) ? 1UL : 0UL)
712 
713 /**
714   * @brief  Get the selected RTC Alarms flag status.
715   * @param  __HANDLE__ specifies the RTC handle.
716   * @param  __FLAG__ specifies the RTC Alarm Flag sources to check.
717   *         This parameter can be:
718   *            @arg @ref RTC_FLAG_ALRAF
719   *            @arg @ref RTC_FLAG_ALRBF
720   * @retval None
721   */
722 #define __HAL_RTC_ALARM_GET_FLAG(__HANDLE__, __FLAG__)   (__HAL_RTC_GET_FLAG((__HANDLE__), (__FLAG__)))
723 
724 /**
725   * @brief  Clear the RTC Alarms pending flags.
726   * @param  __HANDLE__ specifies the RTC handle.
727   * @param  __FLAG__ specifies the RTC Alarm Flag sources to clear.
728   *          This parameter can be:
729   *             @arg @ref RTC_FLAG_ALRAF
730   *             @arg @ref RTC_FLAG_ALRBF
731   * @retval None
732   */
733 #define __HAL_RTC_ALARM_CLEAR_FLAG(__HANDLE__, __FLAG__) \
734   (((__FLAG__) == RTC_FLAG_ALRAF) ? ((RTC->SCR = (RTC_CLEAR_ALRAF))) : (RTC->SCR = (RTC_CLEAR_ALRBF)))
735 /**
736   * @brief  Enable interrupt on the RTC Alarm associated Exti line.
737   * @retval None
738   */
739 #define __HAL_RTC_ALARM_EXTI_ENABLE_IT()            (EXTI->IMR1 |= RTC_EXTI_LINE_ALARM_EVENT)
740 
741 /**
742   * @brief  Disable interrupt on the RTC Alarm associated Exti line.
743   * @retval None
744   */
745 #define __HAL_RTC_ALARM_EXTI_DISABLE_IT()           (EXTI->IMR1 &= ~(RTC_EXTI_LINE_ALARM_EVENT))
746 
747 /**
748   * @brief  Enable event on the RTC Alarm associated Exti line.
749   * @retval None
750   */
751 #define __HAL_RTC_ALARM_EXTI_ENABLE_EVENT()         (EXTI->EMR1 |= RTC_EXTI_LINE_ALARM_EVENT)
752 
753 /**
754   * @brief  Disable event on the RTC Alarm associated Exti line.
755   * @retval None
756   */
757 #define __HAL_RTC_ALARM_EXTI_DISABLE_EVENT()        (EXTI->EMR1 &= ~(RTC_EXTI_LINE_ALARM_EVENT))
758 
759 /**
760   * @}
761   */
762 
763 /* Include RTC HAL Extended module */
764 #include "stm32u0xx_hal_rtc_ex.h"
765 
766 /* Exported functions --------------------------------------------------------*/
767 /** @defgroup RTC_Exported_Functions RTC Exported Functions
768   * @{
769   */
770 
771 /** @defgroup RTC_Exported_Functions_Group1 Initialization and de-initialization functions
772   * @{
773   */
774 /* Initialization and de-initialization functions  ****************************/
775 HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc);
776 HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc);
777 
778 void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc);
779 void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc);
780 
781 /* Callbacks Register/UnRegister functions  ***********************************/
782 #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1)
783 HAL_StatusTypeDef HAL_RTC_RegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID,
784                                            pRTC_CallbackTypeDef pCallback);
785 HAL_StatusTypeDef HAL_RTC_UnRegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID);
786 #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */
787 
788 /**
789   * @}
790   */
791 
792 /** @defgroup RTC_Exported_Functions_Group2 RTC Time and Date functions
793   * @{
794   */
795 /* RTC Time and Date functions ************************************************/
796 HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format);
797 HAL_StatusTypeDef HAL_RTC_GetTime(const RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format);
798 HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format);
799 HAL_StatusTypeDef HAL_RTC_GetDate(const RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format);
800 /* RTC Daylight Saving Time functions *****************************************/
801 void              HAL_RTC_DST_Add1Hour(const RTC_HandleTypeDef *hrtc);
802 void              HAL_RTC_DST_Sub1Hour(const RTC_HandleTypeDef *hrtc);
803 void              HAL_RTC_DST_SetStoreOperation(const RTC_HandleTypeDef *hrtc);
804 void              HAL_RTC_DST_ClearStoreOperation(const RTC_HandleTypeDef *hrtc);
805 uint32_t          HAL_RTC_DST_ReadStoreOperation(const RTC_HandleTypeDef *hrtc);
806 /**
807   * @}
808   */
809 
810 /** @defgroup RTC_Exported_Functions_Group3 RTC Alarm functions
811   * @{
812   */
813 /* RTC Alarm functions ********************************************************/
814 HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format);
815 HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format);
816 HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm);
817 HAL_StatusTypeDef HAL_RTC_GetAlarm(const RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm,
818                                    uint32_t Format);
819 void              HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef *hrtc);
820 HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout);
821 void              HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc);
822 /**
823   * @}
824   */
825 
826 /** @defgroup  RTC_Exported_Functions_Group4 Peripheral Control functions
827   * @{
828   */
829 /* Peripheral Control functions ***********************************************/
830 HAL_StatusTypeDef   HAL_RTC_WaitForSynchro(const RTC_HandleTypeDef *hrtc);
831 /**
832   * @}
833   */
834 
835 /** @defgroup RTC_Exported_Functions_Group5 Peripheral State functions
836   * @{
837   */
838 /* Peripheral State functions *************************************************/
839 HAL_RTCStateTypeDef HAL_RTC_GetState(const RTC_HandleTypeDef *hrtc);
840 /**
841   * @}
842   */
843 
844 /**
845   * @}
846   */
847 
848 /* Private types -------------------------------------------------------------*/
849 /* Private variables ---------------------------------------------------------*/
850 /* Private constants ---------------------------------------------------------*/
851 /** @defgroup RTC_Private_Constants RTC Private Constants
852   * @{
853   */
854 /* Masks Definition */
855 #define RTC_TR_RESERVED_MASK         (RTC_TR_PM | RTC_TR_HT | RTC_TR_HU | \
856                                       RTC_TR_MNT | RTC_TR_MNU| RTC_TR_ST | \
857                                       RTC_TR_SU)
858 #define RTC_DR_RESERVED_MASK         (RTC_DR_YT | RTC_DR_YU | RTC_DR_WDU | \
859                                       RTC_DR_MT | RTC_DR_MU | RTC_DR_DT  | \
860                                       RTC_DR_DU)
861 #define RTC_INIT_MASK                0xFFFFFFFFU
862 #define RTC_RSF_MASK                 (~(RTC_ICSR_INIT | RTC_ICSR_RSF))
863 
864 #define RTC_TIMEOUT_VALUE            1000U
865 
866 /**
867   * @}
868   */
869 
870 /* Private macros ------------------------------------------------------------*/
871 /** @defgroup RTC_Private_Macros RTC Private Macros
872   * @{
873   */
874 
875 /** @defgroup RTC_IS_RTC_Definitions RTC Private macros to check input parameters
876   * @{
877   */
878 #define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_OUTPUT_DISABLE) || \
879                                ((OUTPUT) == RTC_OUTPUT_ALARMA)  || \
880                                ((OUTPUT) == RTC_OUTPUT_ALARMB)  || \
881                                ((OUTPUT) == RTC_OUTPUT_WAKEUP)  || \
882                                ((OUTPUT) == RTC_OUTPUT_TAMPER))
883 
884 #define IS_RTC_HOUR_FORMAT(FORMAT)     (((FORMAT) == RTC_HOURFORMAT_12) || \
885                                         ((FORMAT) == RTC_HOURFORMAT_24))
886 
887 #define IS_RTC_OUTPUT_POL(POL) (((POL) == RTC_OUTPUT_POLARITY_HIGH) || \
888                                 ((POL) == RTC_OUTPUT_POLARITY_LOW))
889 
890 #define IS_RTC_OUTPUT_TYPE(TYPE) (((TYPE) == RTC_OUTPUT_TYPE_OPENDRAIN) || \
891                                   ((TYPE) == RTC_OUTPUT_TYPE_PUSHPULL))
892 
893 #define IS_RTC_OUTPUT_PULLUP(TYPE) (((TYPE) == RTC_OUTPUT_PULLUP_NONE) || \
894                                     ((TYPE) == RTC_OUTPUT_PULLUP_ON))
895 
896 #define IS_RTC_OUTPUT_REMAP(REMAP)   (((REMAP) == RTC_OUTPUT_REMAP_NONE) || \
897                                       ((REMAP) == RTC_OUTPUT_REMAP_POS1))
898 
899 #define IS_RTC_HOURFORMAT12(PM)  (((PM) == RTC_HOURFORMAT12_AM) || \
900                                   ((PM) == RTC_HOURFORMAT12_PM))
901 
902 #define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DAYLIGHTSAVING_SUB1H) || \
903                                       ((SAVE) == RTC_DAYLIGHTSAVING_ADD1H) || \
904                                       ((SAVE) == RTC_DAYLIGHTSAVING_NONE))
905 
906 #define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_STOREOPERATION_RESET) || \
907                                            ((OPERATION) == RTC_STOREOPERATION_SET))
908 
909 #define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_FORMAT_BIN) || \
910                                ((FORMAT) == RTC_FORMAT_BCD))
911 
912 #define IS_RTC_YEAR(YEAR)              ((YEAR) <= 99u)
913 
914 #define IS_RTC_MONTH(MONTH)            (((MONTH) >= 1u) && ((MONTH) <= 12u))
915 
916 #define IS_RTC_DATE(DATE)              (((DATE) >= 1u) && ((DATE) <= 31u))
917 
918 #define IS_RTC_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY)    || \
919                                  ((WEEKDAY) == RTC_WEEKDAY_TUESDAY)   || \
920                                  ((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \
921                                  ((WEEKDAY) == RTC_WEEKDAY_THURSDAY)  || \
922                                  ((WEEKDAY) == RTC_WEEKDAY_FRIDAY)    || \
923                                  ((WEEKDAY) == RTC_WEEKDAY_SATURDAY)  || \
924                                  ((WEEKDAY) == RTC_WEEKDAY_SUNDAY))
925 
926 #define IS_RTC_ALARM_DATE_WEEKDAY_DATE(DATE) (((DATE) >0u) && ((DATE) <= 31u))
927 
928 #define IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY)    || \
929                                                     ((WEEKDAY) == RTC_WEEKDAY_TUESDAY)   || \
930                                                     ((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \
931                                                     ((WEEKDAY) == RTC_WEEKDAY_THURSDAY)  || \
932                                                     ((WEEKDAY) == RTC_WEEKDAY_FRIDAY)    || \
933                                                     ((WEEKDAY) == RTC_WEEKDAY_SATURDAY)  || \
934                                                     ((WEEKDAY) == RTC_WEEKDAY_SUNDAY))
935 
936 #define IS_RTC_ALARM_DATE_WEEKDAY_SEL(SEL) (((SEL) == RTC_ALARMDATEWEEKDAYSEL_DATE) || \
937                                             ((SEL) == RTC_ALARMDATEWEEKDAYSEL_WEEKDAY))
938 
939 #define IS_RTC_ALARM_MASK(MASK)  (((MASK) & ~(RTC_ALARMMASK_ALL)) == 0UL)
940 
941 #define IS_RTC_ALARM(ALARM)      (((ALARM) == RTC_ALARM_A) || \
942                                   ((ALARM) == RTC_ALARM_B))
943 
944 #define IS_RTC_ALARM_SUB_SECOND_VALUE(VALUE) ((VALUE) <= RTC_ALRMASSR_SS)
945 
946 #define IS_RTC_ALARM_SUB_SECOND_MASK(MASK)          (((MASK) == 0UL) || \
947                                                      (((MASK) >= RTC_ALARMSUBSECONDMASK_SS14_1) && \
948                                                       ((MASK) <= RTC_ALARMSUBSECONDMASK_NONE)))
949 
950 #define IS_RTC_ASYNCH_PREDIV(PREDIV)   ((PREDIV) <= (RTC_PRER_PREDIV_A >> RTC_PRER_PREDIV_A_Pos))
951 
952 #define IS_RTC_SYNCH_PREDIV(PREDIV)    ((PREDIV) <= (RTC_PRER_PREDIV_S >> RTC_PRER_PREDIV_S_Pos))
953 
954 #define IS_RTC_HOUR12(HOUR)            (((HOUR) > 0u) && ((HOUR) <= 12u))
955 
956 #define IS_RTC_HOUR24(HOUR)            ((HOUR) <= 23u)
957 
958 #define IS_RTC_MINUTES(MINUTES)        ((MINUTES) <= 59u)
959 
960 #define IS_RTC_SECONDS(SECONDS)        ((SECONDS) <= 59u)
961 
962 /**
963   * @}
964   */
965 
966 /**
967   * @}
968   */
969 
970 /* Private functions -------------------------------------------------------------*/
971 /** @defgroup RTC_Private_Functions RTC Private Functions
972   * @{
973   */
974 HAL_StatusTypeDef  RTC_EnterInitMode(const RTC_HandleTypeDef *hrtc);
975 HAL_StatusTypeDef  RTC_ExitInitMode(RTC_HandleTypeDef *hrtc);
976 uint8_t            RTC_ByteToBcd2(uint8_t Value);
977 uint8_t            RTC_Bcd2ToByte(uint8_t Value);
978 /**
979   * @}
980   */
981 
982 /**
983   * @}
984   */
985 
986 /**
987   * @}
988   */
989 
990 #ifdef __cplusplus
991 }
992 #endif
993 
994 #endif /* __STM32U0xx_HAL_RTC_H */
995