1 /**
2 ******************************************************************************
3 * @file stm32f1xx_ll_rtc.h
4 * @author MCD Application Team
5 * @brief Header file of RTC LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2016 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 */
18
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef __STM32F1xx_LL_RTC_H
21 #define __STM32F1xx_LL_RTC_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f1xx.h"
29
30 /** @addtogroup STM32F1xx_LL_Driver
31 * @{
32 */
33
34 #if defined(RTC)
35
36 /** @defgroup RTC_LL RTC
37 * @{
38 */
39
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43
44 /* Private macros ------------------------------------------------------------*/
45 #if defined(USE_FULL_LL_DRIVER)
46 /** @defgroup RTC_LL_Private_Macros RTC Private Macros
47 * @{
48 */
49 /**
50 * @}
51 */
52 #endif /*USE_FULL_LL_DRIVER*/
53
54 /* Exported types ------------------------------------------------------------*/
55 #if defined(USE_FULL_LL_DRIVER)
56 /** @defgroup RTC_LL_ES_INIT RTC Exported Init structure
57 * @{
58 */
59
60 /**
61 * @brief RTC Init structures definition
62 */
63 typedef struct
64 {
65 uint32_t AsynchPrescaler; /*!< Specifies the RTC Asynchronous Predivider value.
66 This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFFF
67
68 This feature can be modified afterwards using unitary function
69 @ref LL_RTC_SetAsynchPrescaler(). */
70
71 uint32_t OutPutSource; /*!< Specifies which signal will be routed to the RTC Tamper pin.
72 This parameter can be a value of @ref LL_RTC_Output_Source
73
74 This feature can be modified afterwards using unitary function
75 @ref LL_RTC_SetOutputSource(). */
76
77 } LL_RTC_InitTypeDef;
78
79 /**
80 * @brief RTC Time structure definition
81 */
82 typedef struct
83 {
84 uint8_t Hours; /*!< Specifies the RTC Time Hours.
85 This parameter must be a number between Min_Data = 0 and Max_Data = 23 */
86
87 uint8_t Minutes; /*!< Specifies the RTC Time Minutes.
88 This parameter must be a number between Min_Data = 0 and Max_Data = 59 */
89
90 uint8_t Seconds; /*!< Specifies the RTC Time Seconds.
91 This parameter must be a number between Min_Data = 0 and Max_Data = 59 */
92 } LL_RTC_TimeTypeDef;
93
94
95 /**
96 * @brief RTC Alarm structure definition
97 */
98 typedef struct
99 {
100 LL_RTC_TimeTypeDef AlarmTime; /*!< Specifies the RTC Alarm Time members. */
101
102 } LL_RTC_AlarmTypeDef;
103
104 /**
105 * @}
106 */
107 #endif /* USE_FULL_LL_DRIVER */
108
109 /* Exported constants --------------------------------------------------------*/
110 /** @defgroup RTC_LL_Exported_Constants RTC Exported Constants
111 * @{
112 */
113
114 #if defined(USE_FULL_LL_DRIVER)
115 /** @defgroup RTC_LL_EC_FORMAT FORMAT
116 * @{
117 */
118 #define LL_RTC_FORMAT_BIN (0x000000000U) /*!< Binary data format */
119 #define LL_RTC_FORMAT_BCD (0x000000001U) /*!< BCD data format */
120 /**
121 * @}
122 */
123 #endif /* USE_FULL_LL_DRIVER */
124
125 /** @defgroup RTC_LL_EC_BKP BACKUP
126 * @{
127 */
128 #if RTC_BKP_NUMBER > 0
129 #define LL_RTC_BKP_DR1 (0x00000001U)
130 #define LL_RTC_BKP_DR2 (0x00000002U)
131 #define LL_RTC_BKP_DR3 (0x00000003U)
132 #define LL_RTC_BKP_DR4 (0x00000004U)
133 #define LL_RTC_BKP_DR5 (0x00000005U)
134 #define LL_RTC_BKP_DR6 (0x00000006U)
135 #define LL_RTC_BKP_DR7 (0x00000007U)
136 #define LL_RTC_BKP_DR8 (0x00000008U)
137 #define LL_RTC_BKP_DR9 (0x00000009U)
138 #define LL_RTC_BKP_DR10 (0x0000000AU)
139 #endif /* RTC_BKP_NUMBER > 0 */
140 #if RTC_BKP_NUMBER > 10
141 #define LL_RTC_BKP_DR11 (0x00000010U)
142 #define LL_RTC_BKP_DR12 (0x00000011U)
143 #define LL_RTC_BKP_DR13 (0x00000012U)
144 #define LL_RTC_BKP_DR14 (0x00000013U)
145 #define LL_RTC_BKP_DR15 (0x00000014U)
146 #define LL_RTC_BKP_DR16 (0x00000015U)
147 #define LL_RTC_BKP_DR17 (0x00000016U)
148 #define LL_RTC_BKP_DR18 (0x00000017U)
149 #define LL_RTC_BKP_DR19 (0x00000018U)
150 #define LL_RTC_BKP_DR20 (0x00000019U)
151 #define LL_RTC_BKP_DR21 (0x0000001AU)
152 #define LL_RTC_BKP_DR22 (0x0000001BU)
153 #define LL_RTC_BKP_DR23 (0x0000001CU)
154 #define LL_RTC_BKP_DR24 (0x0000001DU)
155 #define LL_RTC_BKP_DR25 (0x0000001EU)
156 #define LL_RTC_BKP_DR26 (0x0000001FU)
157 #define LL_RTC_BKP_DR27 (0x00000020U)
158 #define LL_RTC_BKP_DR28 (0x00000021U)
159 #define LL_RTC_BKP_DR29 (0x00000022U)
160 #define LL_RTC_BKP_DR30 (0x00000023U)
161 #define LL_RTC_BKP_DR31 (0x00000024U)
162 #define LL_RTC_BKP_DR32 (0x00000025U)
163 #define LL_RTC_BKP_DR33 (0x00000026U)
164 #define LL_RTC_BKP_DR34 (0x00000027U)
165 #define LL_RTC_BKP_DR35 (0x00000028U)
166 #define LL_RTC_BKP_DR36 (0x00000029U)
167 #define LL_RTC_BKP_DR37 (0x0000002AU)
168 #define LL_RTC_BKP_DR38 (0x0000002BU)
169 #define LL_RTC_BKP_DR39 (0x0000002CU)
170 #define LL_RTC_BKP_DR40 (0x0000002DU)
171 #define LL_RTC_BKP_DR41 (0x0000002EU)
172 #define LL_RTC_BKP_DR42 (0x0000002FU)
173 #endif /* RTC_BKP_NUMBER > 10 */
174
175 /**
176 * @}
177 */
178
179 /** @defgroup RTC_LL_EC_TAMPLEVEL Tamper Active Level
180 * @{
181 */
182 #define LL_RTC_TAMPER_ACTIVELEVEL_LOW BKP_CR_TPAL /*!< A high level on the TAMPER pin resets all data backup registers (if TPE bit is set) */
183 #define LL_RTC_TAMPER_ACTIVELEVEL_HIGH (0x00000000U) /*!< A low level on the TAMPER pin resets all data backup registers (if TPE bit is set) */
184
185 /**
186 * @}
187 */
188
189 /** @defgroup LL_RTC_Output_Source Clock Source to output on the Tamper Pin
190 * @{
191 */
192 #define LL_RTC_CALIB_OUTPUT_NONE (0x00000000U) /*!< Calibration output disabled */
193 #define LL_RTC_CALIB_OUTPUT_RTCCLOCK BKP_RTCCR_CCO /*!< Calibration output is RTC Clock with a frequency divided by 64 on the TAMPER Pin */
194 #define LL_RTC_CALIB_OUTPUT_ALARM BKP_RTCCR_ASOE /*!< Calibration output is Alarm pulse signal on the TAMPER pin */
195 #define LL_RTC_CALIB_OUTPUT_SECOND (BKP_RTCCR_ASOS | BKP_RTCCR_ASOE) /*!< Calibration output is Second pulse signal on the TAMPER pin*/
196 /**
197 * @}
198 */
199
200 /**
201 * @}
202 */
203
204 /* Exported macro ------------------------------------------------------------*/
205 /** @defgroup RTC_LL_Exported_Macros RTC Exported Macros
206 * @{
207 */
208
209 /** @defgroup RTC_LL_EM_WRITE_READ Common Write and read registers Macros
210 * @{
211 */
212
213 /**
214 * @brief Write a value in RTC register
215 * @param __INSTANCE__ RTC Instance
216 * @param __REG__ Register to be written
217 * @param __VALUE__ Value to be written in the register
218 * @retval None
219 */
220 #define LL_RTC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
221
222 /**
223 * @brief Read a value in RTC register
224 * @param __INSTANCE__ RTC Instance
225 * @param __REG__ Register to be read
226 * @retval Register value
227 */
228 #define LL_RTC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
229 /**
230 * @}
231 */
232
233 /** @defgroup RTC_LL_EM_Convert Convert helper Macros
234 * @{
235 */
236
237 /**
238 * @brief Helper macro to convert a value from 2 digit decimal format to BCD format
239 * @param __VALUE__ Byte to be converted
240 * @retval Converted byte
241 */
242 #define __LL_RTC_CONVERT_BIN2BCD(__VALUE__) (uint8_t)((((__VALUE__) / 10U) << 4U) | ((__VALUE__) % 10U))
243
244 /**
245 * @brief Helper macro to convert a value from BCD format to 2 digit decimal format
246 * @param __VALUE__ BCD value to be converted
247 * @retval Converted byte
248 */
249 #define __LL_RTC_CONVERT_BCD2BIN(__VALUE__) (uint8_t)(((uint8_t)((__VALUE__) & (uint8_t)0xF0U) >> (uint8_t)0x4U) * 10U + ((__VALUE__) & (uint8_t)0x0FU))
250
251 /**
252 * @}
253 */
254
255 /**
256 * @}
257 */
258
259 /* Exported functions --------------------------------------------------------*/
260 /** @defgroup RTC_LL_Exported_Functions RTC Exported Functions
261 * @{
262 */
263
264 /** @defgroup RTC_LL_EF_Configuration Configuration
265 * @{
266 */
267
268 /**
269 * @brief Set Asynchronous prescaler factor
270 * @rmtoll PRLH PRL LL_RTC_SetAsynchPrescaler\n
271 * @rmtoll PRLL PRL LL_RTC_SetAsynchPrescaler\n
272 * @param RTCx RTC Instance
273 * @param AsynchPrescaler Value between Min_Data = 0 and Max_Data = 0xFFFFF
274 * @retval None
275 */
LL_RTC_SetAsynchPrescaler(RTC_TypeDef * RTCx,uint32_t AsynchPrescaler)276 __STATIC_INLINE void LL_RTC_SetAsynchPrescaler(RTC_TypeDef *RTCx, uint32_t AsynchPrescaler)
277 {
278 MODIFY_REG(RTCx->PRLH, RTC_PRLH_PRL, (AsynchPrescaler >> 16));
279 MODIFY_REG(RTCx->PRLL, RTC_PRLL_PRL, (AsynchPrescaler & RTC_PRLL_PRL));
280 }
281
282 /**
283 * @brief Get Asynchronous prescaler factor
284 * @rmtoll DIVH DIV LL_RTC_GetDivider\n
285 * @rmtoll DIVL DIV LL_RTC_GetDivider\n
286 * @param RTCx RTC Instance
287 * @retval Value between Min_Data = 0 and Max_Data = 0xFFFFF
288 */
LL_RTC_GetDivider(RTC_TypeDef * RTCx)289 __STATIC_INLINE uint32_t LL_RTC_GetDivider(RTC_TypeDef *RTCx)
290 {
291 register uint16_t Highprescaler = 0, Lowprescaler = 0;
292 Highprescaler = READ_REG(RTCx->DIVH & RTC_DIVH_RTC_DIV);
293 Lowprescaler = READ_REG(RTCx->DIVL & RTC_DIVL_RTC_DIV);
294
295 return (((uint32_t) Highprescaler << 16U) | Lowprescaler);
296 }
297
298 /**
299 * @brief Set Output Source
300 * @rmtoll RTCCR CCO LL_RTC_SetOutputSource
301 * @rmtoll RTCCR ASOE LL_RTC_SetOutputSource
302 * @rmtoll RTCCR ASOS LL_RTC_SetOutputSource
303 * @param BKPx BKP Instance
304 * @param OutputSource This parameter can be one of the following values:
305 * @arg @ref LL_RTC_CALIB_OUTPUT_NONE
306 * @arg @ref LL_RTC_CALIB_OUTPUT_RTCCLOCK
307 * @arg @ref LL_RTC_CALIB_OUTPUT_ALARM
308 * @arg @ref LL_RTC_CALIB_OUTPUT_SECOND
309 * @retval None
310 */
LL_RTC_SetOutputSource(BKP_TypeDef * BKPx,uint32_t OutputSource)311 __STATIC_INLINE void LL_RTC_SetOutputSource(BKP_TypeDef *BKPx, uint32_t OutputSource)
312 {
313 MODIFY_REG(BKPx->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE | BKP_RTCCR_ASOS), OutputSource);
314 }
315
316 /**
317 * @brief Get Output Source
318 * @rmtoll RTCCR CCO LL_RTC_GetOutPutSource
319 * @rmtoll RTCCR ASOE LL_RTC_GetOutPutSource
320 * @rmtoll RTCCR ASOS LL_RTC_GetOutPutSource
321 * @param BKPx BKP Instance
322 * @retval Returned value can be one of the following values:
323 * @arg @ref LL_RTC_CALIB_OUTPUT_NONE
324 * @arg @ref LL_RTC_CALIB_OUTPUT_RTCCLOCK
325 * @arg @ref LL_RTC_CALIB_OUTPUT_ALARM
326 * @arg @ref LL_RTC_CALIB_OUTPUT_SECOND
327 */
LL_RTC_GetOutPutSource(BKP_TypeDef * BKPx)328 __STATIC_INLINE uint32_t LL_RTC_GetOutPutSource(BKP_TypeDef *BKPx)
329 {
330 return (uint32_t)(READ_BIT(BKPx->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE | BKP_RTCCR_ASOS)));
331 }
332
333 /**
334 * @brief Enable the write protection for RTC registers.
335 * @rmtoll CRL CNF LL_RTC_EnableWriteProtection
336 * @param RTCx RTC Instance
337 * @retval None
338 */
LL_RTC_EnableWriteProtection(RTC_TypeDef * RTCx)339 __STATIC_INLINE void LL_RTC_EnableWriteProtection(RTC_TypeDef *RTCx)
340 {
341 CLEAR_BIT(RTCx->CRL, RTC_CRL_CNF);
342 }
343
344 /**
345 * @brief Disable the write protection for RTC registers.
346 * @rmtoll CRL RTC_CRL_CNF LL_RTC_DisableWriteProtection
347 * @param RTCx RTC Instance
348 * @retval None
349 */
LL_RTC_DisableWriteProtection(RTC_TypeDef * RTCx)350 __STATIC_INLINE void LL_RTC_DisableWriteProtection(RTC_TypeDef *RTCx)
351 {
352 SET_BIT(RTCx->CRL, RTC_CRL_CNF);
353 }
354
355 /**
356 * @}
357 */
358
359 /** @defgroup RTC_LL_EF_Time Time
360 * @{
361 */
362
363 /**
364 * @brief Set time counter in BCD format
365 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
366 * @note It can be written in initialization mode only (@ref LL_RTC_EnterInitMode function)
367 * @rmtoll CNTH CNT LL_RTC_TIME_Set\n
368 * CNTL CNT LL_RTC_TIME_Set\n
369 * @param RTCx RTC Instance
370 * @param TimeCounter Value between Min_Data=0x00 and Max_Data=0xFFFFF
371 * @retval None
372 */
LL_RTC_TIME_Set(RTC_TypeDef * RTCx,uint32_t TimeCounter)373 __STATIC_INLINE void LL_RTC_TIME_Set(RTC_TypeDef *RTCx, uint32_t TimeCounter)
374 {
375 /* Set RTC COUNTER MSB word */
376 WRITE_REG(RTCx->CNTH, (TimeCounter >> 16U));
377 /* Set RTC COUNTER LSB word */
378 WRITE_REG(RTCx->CNTL, (TimeCounter & RTC_CNTL_RTC_CNT));
379 }
380
381 /**
382 * @brief Get time counter in BCD format
383 * @rmtoll CNTH CNT LL_RTC_TIME_Get\n
384 * CNTL CNT LL_RTC_TIME_Get\n
385 * @param RTCx RTC Instance
386 * @retval Value between Min_Data = 0 and Max_Data = 0xFFFFF
387 */
LL_RTC_TIME_Get(RTC_TypeDef * RTCx)388 __STATIC_INLINE uint32_t LL_RTC_TIME_Get(RTC_TypeDef *RTCx)
389 {
390 register uint16_t high = 0, low = 0;
391
392 high = READ_REG(RTCx->CNTH & RTC_CNTH_RTC_CNT);
393 low = READ_REG(RTCx->CNTL & RTC_CNTL_RTC_CNT);
394 return ((uint32_t)(((uint32_t) high << 16U) | low));
395 }
396
397 /**
398 * @}
399 */
400
401 /** @defgroup RTC_LL_EF_ALARM ALARM
402 * @{
403 */
404
405 /**
406 * @brief Set Alarm Counter
407 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
408 * @rmtoll ALRH ALR LL_RTC_ALARM_Set\n
409 * @rmtoll ALRL ALR LL_RTC_ALARM_Set\n
410 * @param RTCx RTC Instance
411 * @param AlarmCounter Value between Min_Data=0x00 and Max_Data=0xFFFFF
412 * @retval None
413 */
LL_RTC_ALARM_Set(RTC_TypeDef * RTCx,uint32_t AlarmCounter)414 __STATIC_INLINE void LL_RTC_ALARM_Set(RTC_TypeDef *RTCx, uint32_t AlarmCounter)
415 {
416 /* Set RTC COUNTER MSB word */
417 WRITE_REG(RTCx->ALRH, (AlarmCounter >> 16));
418 /* Set RTC COUNTER LSB word */
419 WRITE_REG(RTCx->ALRL, (AlarmCounter & RTC_ALRL_RTC_ALR));
420 }
421
422 /**
423 * @brief Get Alarm Counter
424 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
425 * @rmtoll ALRH ALR LL_RTC_ALARM_Get\n
426 * @rmtoll ALRL ALR LL_RTC_ALARM_Get\n
427 * @param RTCx RTC Instance
428 * @retval None
429 */
LL_RTC_ALARM_Get(RTC_TypeDef * RTCx)430 __STATIC_INLINE uint32_t LL_RTC_ALARM_Get(RTC_TypeDef *RTCx)
431 {
432 register uint16_t high = 0, low = 0;
433
434 high = READ_REG(RTCx->ALRH & RTC_ALRH_RTC_ALR);
435 low = READ_REG(RTCx->ALRL & RTC_ALRL_RTC_ALR);
436
437 return (((uint32_t) high << 16U) | low);
438 }
439
440 /**
441 * @}
442 */
443
444 /** @defgroup RTC_LL_EF_Tamper Tamper
445 * @{
446 */
447
448 /**
449 * @brief Enable RTC_TAMPx input detection
450 * @rmtoll CR TPE LL_RTC_TAMPER_Enable\n
451 * @retval None
452 */
LL_RTC_TAMPER_Enable(BKP_TypeDef * BKPx)453 __STATIC_INLINE void LL_RTC_TAMPER_Enable(BKP_TypeDef *BKPx)
454 {
455 SET_BIT(BKPx->CR, BKP_CR_TPE);
456 }
457
458 /**
459 * @brief Disable RTC_TAMPx Tamper
460 * @rmtoll CR TPE LL_RTC_TAMPER_Disable\n
461 * @retval None
462 */
LL_RTC_TAMPER_Disable(BKP_TypeDef * BKPx)463 __STATIC_INLINE void LL_RTC_TAMPER_Disable(BKP_TypeDef *BKPx)
464 {
465 CLEAR_BIT(BKP->CR, BKP_CR_TPE);
466 }
467
468 /**
469 * @brief Enable Active level for Tamper input
470 * @rmtoll CR TPAL LL_RTC_TAMPER_SetActiveLevel\n
471 * @param BKPx BKP Instance
472 * @param Tamper This parameter can be a combination of the following values:
473 * @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_LOW
474 * @arg @ref LL_RTC_TAMPER_ACTIVELEVEL_HIGH
475 * @retval None
476 */
LL_RTC_TAMPER_SetActiveLevel(BKP_TypeDef * BKPx,uint32_t Tamper)477 __STATIC_INLINE void LL_RTC_TAMPER_SetActiveLevel(BKP_TypeDef *BKPx, uint32_t Tamper)
478 {
479 MODIFY_REG(BKPx->CR, BKP_CR_TPAL, Tamper);
480 }
481
482 /**
483 * @brief Disable Active level for Tamper input
484 * @rmtoll CR TPAL LL_RTC_TAMPER_SetActiveLevel\n
485 * @retval None
486 */
LL_RTC_TAMPER_GetActiveLevel(BKP_TypeDef * BKPx)487 __STATIC_INLINE uint32_t LL_RTC_TAMPER_GetActiveLevel(BKP_TypeDef *BKPx)
488 {
489 return (uint32_t)(READ_BIT(BKPx->CR, BKP_CR_TPAL));
490 }
491
492 /**
493 * @}
494 */
495
496 /** @defgroup RTC_LL_EF_Backup_Registers Backup_Registers
497 * @{
498 */
499
500 /**
501 * @brief Writes a data in a specified RTC Backup data register.
502 * @rmtoll BKPDR DR LL_RTC_BKP_SetRegister
503 * @param BKPx BKP Instance
504 * @param BackupRegister This parameter can be one of the following values:
505 * @arg @ref LL_RTC_BKP_DR1
506 * @arg @ref LL_RTC_BKP_DR2
507 * @arg @ref LL_RTC_BKP_DR3
508 * @arg @ref LL_RTC_BKP_DR4
509 * @arg @ref LL_RTC_BKP_DR5
510 * @arg @ref LL_RTC_BKP_DR6
511 * @arg @ref LL_RTC_BKP_DR7
512 * @arg @ref LL_RTC_BKP_DR8
513 * @arg @ref LL_RTC_BKP_DR9
514 * @arg @ref LL_RTC_BKP_DR10
515 * @arg @ref LL_RTC_BKP_DR11 (*)
516 * @arg @ref LL_RTC_BKP_DR12 (*)
517 * @arg @ref LL_RTC_BKP_DR13 (*)
518 * @arg @ref LL_RTC_BKP_DR14 (*)
519 * @arg @ref LL_RTC_BKP_DR15 (*)
520 * @arg @ref LL_RTC_BKP_DR16 (*)
521 * @arg @ref LL_RTC_BKP_DR17 (*)
522 * @arg @ref LL_RTC_BKP_DR18 (*)
523 * @arg @ref LL_RTC_BKP_DR19 (*)
524 * @arg @ref LL_RTC_BKP_DR20 (*)
525 * @arg @ref LL_RTC_BKP_DR21 (*)
526 * @arg @ref LL_RTC_BKP_DR22 (*)
527 * @arg @ref LL_RTC_BKP_DR23 (*)
528 * @arg @ref LL_RTC_BKP_DR24 (*)
529 * @arg @ref LL_RTC_BKP_DR25 (*)
530 * @arg @ref LL_RTC_BKP_DR26 (*)
531 * @arg @ref LL_RTC_BKP_DR27 (*)
532 * @arg @ref LL_RTC_BKP_DR28 (*)
533 * @arg @ref LL_RTC_BKP_DR29 (*)
534 * @arg @ref LL_RTC_BKP_DR30 (*)
535 * @arg @ref LL_RTC_BKP_DR31 (*)
536 * @arg @ref LL_RTC_BKP_DR32 (*)
537 * @arg @ref LL_RTC_BKP_DR33 (*)
538 * @arg @ref LL_RTC_BKP_DR34 (*)
539 * @arg @ref LL_RTC_BKP_DR35 (*)
540 * @arg @ref LL_RTC_BKP_DR36 (*)
541 * @arg @ref LL_RTC_BKP_DR37 (*)
542 * @arg @ref LL_RTC_BKP_DR38 (*)
543 * @arg @ref LL_RTC_BKP_DR39 (*)
544 * @arg @ref LL_RTC_BKP_DR40 (*)
545 * @arg @ref LL_RTC_BKP_DR41 (*)
546 * @arg @ref LL_RTC_BKP_DR42 (*)
547 * (*) value not defined in all devices.
548 * @param Data Value between Min_Data=0x00 and Max_Data=0xFFFFFFFF
549 * @retval None
550 */
LL_RTC_BKP_SetRegister(BKP_TypeDef * BKPx,uint32_t BackupRegister,uint32_t Data)551 __STATIC_INLINE void LL_RTC_BKP_SetRegister(BKP_TypeDef *BKPx, uint32_t BackupRegister, uint32_t Data)
552 {
553 register uint32_t tmp = 0U;
554
555 tmp = (uint32_t)BKP_BASE;
556 tmp += (BackupRegister * 4U);
557
558 /* Write the specified register */
559 *(__IO uint32_t *)tmp = (uint32_t)Data;
560 }
561
562 /**
563 * @brief Reads data from the specified RTC Backup data Register.
564 * @rmtoll BKPDR DR LL_RTC_BKP_GetRegister
565 * @param BKPx BKP Instance
566 * @param BackupRegister This parameter can be one of the following values:
567 * @arg @ref LL_RTC_BKP_DR1
568 * @arg @ref LL_RTC_BKP_DR2
569 * @arg @ref LL_RTC_BKP_DR3
570 * @arg @ref LL_RTC_BKP_DR4
571 * @arg @ref LL_RTC_BKP_DR5
572 * @arg @ref LL_RTC_BKP_DR6
573 * @arg @ref LL_RTC_BKP_DR7
574 * @arg @ref LL_RTC_BKP_DR8
575 * @arg @ref LL_RTC_BKP_DR9
576 * @arg @ref LL_RTC_BKP_DR10
577 * @arg @ref LL_RTC_BKP_DR11 (*)
578 * @arg @ref LL_RTC_BKP_DR12 (*)
579 * @arg @ref LL_RTC_BKP_DR13 (*)
580 * @arg @ref LL_RTC_BKP_DR14 (*)
581 * @arg @ref LL_RTC_BKP_DR15 (*)
582 * @arg @ref LL_RTC_BKP_DR16 (*)
583 * @arg @ref LL_RTC_BKP_DR17 (*)
584 * @arg @ref LL_RTC_BKP_DR18 (*)
585 * @arg @ref LL_RTC_BKP_DR19 (*)
586 * @arg @ref LL_RTC_BKP_DR20 (*)
587 * @arg @ref LL_RTC_BKP_DR21 (*)
588 * @arg @ref LL_RTC_BKP_DR22 (*)
589 * @arg @ref LL_RTC_BKP_DR23 (*)
590 * @arg @ref LL_RTC_BKP_DR24 (*)
591 * @arg @ref LL_RTC_BKP_DR25 (*)
592 * @arg @ref LL_RTC_BKP_DR26 (*)
593 * @arg @ref LL_RTC_BKP_DR27 (*)
594 * @arg @ref LL_RTC_BKP_DR28 (*)
595 * @arg @ref LL_RTC_BKP_DR29 (*)
596 * @arg @ref LL_RTC_BKP_DR30 (*)
597 * @arg @ref LL_RTC_BKP_DR31 (*)
598 * @arg @ref LL_RTC_BKP_DR32 (*)
599 * @arg @ref LL_RTC_BKP_DR33 (*)
600 * @arg @ref LL_RTC_BKP_DR34 (*)
601 * @arg @ref LL_RTC_BKP_DR35 (*)
602 * @arg @ref LL_RTC_BKP_DR36 (*)
603 * @arg @ref LL_RTC_BKP_DR37 (*)
604 * @arg @ref LL_RTC_BKP_DR38 (*)
605 * @arg @ref LL_RTC_BKP_DR39 (*)
606 * @arg @ref LL_RTC_BKP_DR40 (*)
607 * @arg @ref LL_RTC_BKP_DR41 (*)
608 * @arg @ref LL_RTC_BKP_DR42 (*)
609 * @retval Value between Min_Data=0x00 and Max_Data=0xFFFFFFFF
610 */
LL_RTC_BKP_GetRegister(BKP_TypeDef * BKPx,uint32_t BackupRegister)611 __STATIC_INLINE uint32_t LL_RTC_BKP_GetRegister(BKP_TypeDef *BKPx, uint32_t BackupRegister)
612 {
613 register uint32_t tmp = 0U;
614
615 tmp = (uint32_t)BKP_BASE;
616 tmp += (BackupRegister * 4U);
617
618 /* Read the specified register */
619 return ((*(__IO uint32_t *)tmp) & BKP_DR1_D);
620 }
621
622 /**
623 * @}
624 */
625
626 /** @defgroup RTC_LL_EF_Calibration Calibration
627 * @{
628 */
629
630 /**
631 * @brief Set the coarse digital calibration
632 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
633 * @note It can be written in initialization mode only (@ref LL_RTC_EnterInitMode function)
634 * @rmtoll RTCCR CAL LL_RTC_CAL_SetCoarseDigital\n
635 * @param BKPx RTC Instance
636 * @param Value value of coarse calibration expressed in ppm (coded on 5 bits)
637 * @note This Calibration value should be between 0 and 121 when using positive sign with a 4-ppm step.
638 * @retval None
639 */
LL_RTC_CAL_SetCoarseDigital(BKP_TypeDef * BKPx,uint32_t Value)640 __STATIC_INLINE void LL_RTC_CAL_SetCoarseDigital(BKP_TypeDef *BKPx, uint32_t Value)
641 {
642 MODIFY_REG(BKPx->RTCCR, BKP_RTCCR_CAL, Value);
643 }
644
645 /**
646 * @brief Get the coarse digital calibration value
647 * @rmtoll RTCCR CAL LL_RTC_CAL_SetCoarseDigital\n
648 * @param BKPx BKP Instance
649 * @retval value of coarse calibration expressed in ppm (coded on 5 bits)
650 */
LL_RTC_CAL_GetCoarseDigital(BKP_TypeDef * BKPx)651 __STATIC_INLINE uint32_t LL_RTC_CAL_GetCoarseDigital(BKP_TypeDef *BKPx)
652 {
653 return (uint32_t)(READ_BIT(BKPx->RTCCR, BKP_RTCCR_CAL));
654 }
655 /**
656 * @}
657 */
658
659 /** @defgroup RTC_LL_EF_FLAG_Management FLAG_Management
660 * @{
661 */
662
663 /**
664 * @brief Get RTC_TAMPI Interruption detection flag
665 * @rmtoll CSR TIF LL_RTC_IsActiveFlag_TAMPI
666 * @param BKPx BKP Instance
667 * @retval State of bit (1 or 0).
668 */
LL_RTC_IsActiveFlag_TAMPI(BKP_TypeDef * BKPx)669 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_TAMPI(BKP_TypeDef *BKPx)
670 {
671 return (READ_BIT(BKPx->CSR, BKP_CSR_TIF) == (BKP_CSR_TIF));
672 }
673
674 /**
675 * @brief Clear RTC_TAMP Interruption detection flag
676 * @rmtoll CSR CTI LL_RTC_ClearFlag_TAMPI
677 * @param BKPx BKP Instance
678 * @retval None
679 */
LL_RTC_ClearFlag_TAMPI(BKP_TypeDef * BKPx)680 __STATIC_INLINE void LL_RTC_ClearFlag_TAMPI(BKP_TypeDef *BKPx)
681 {
682 SET_BIT(BKPx->CSR, BKP_CSR_CTI);
683 }
684
685 /**
686 * @brief Get RTC_TAMPE Event detection flag
687 * @rmtoll CSR TEF LL_RTC_IsActiveFlag_TAMPE
688 * @param BKPx BKP Instance
689 * @retval State of bit (1 or 0).
690 */
LL_RTC_IsActiveFlag_TAMPE(BKP_TypeDef * BKPx)691 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_TAMPE(BKP_TypeDef *BKPx)
692 {
693 return (READ_BIT(BKPx->CSR, BKP_CSR_TEF) == (BKP_CSR_TEF));
694 }
695
696 /**
697 * @brief Clear RTC_TAMPE Even detection flag
698 * @rmtoll CSR CTE LL_RTC_ClearFlag_TAMPE
699 * @param BKPx BKP Instance
700 * @retval None
701 */
LL_RTC_ClearFlag_TAMPE(BKP_TypeDef * BKPx)702 __STATIC_INLINE void LL_RTC_ClearFlag_TAMPE(BKP_TypeDef *BKPx)
703 {
704 SET_BIT(BKPx->CSR, BKP_CSR_CTE);
705 }
706
707 /**
708 * @brief Get Alarm flag
709 * @rmtoll CRL ALRF LL_RTC_IsActiveFlag_ALR
710 * @param RTCx RTC Instance
711 * @retval State of bit (1 or 0).
712 */
LL_RTC_IsActiveFlag_ALR(RTC_TypeDef * RTCx)713 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_ALR(RTC_TypeDef *RTCx)
714 {
715 return (READ_BIT(RTCx->CRL, RTC_CRL_ALRF) == (RTC_CRL_ALRF));
716 }
717
718 /**
719 * @brief Clear Alarm flag
720 * @rmtoll CRL ALRF LL_RTC_ClearFlag_ALR
721 * @param RTCx RTC Instance
722 * @retval None
723 */
LL_RTC_ClearFlag_ALR(RTC_TypeDef * RTCx)724 __STATIC_INLINE void LL_RTC_ClearFlag_ALR(RTC_TypeDef *RTCx)
725 {
726 CLEAR_BIT(RTCx->CRL, RTC_CRL_ALRF);
727 }
728
729 /**
730 * @brief Get Registers synchronization flag
731 * @rmtoll CRL RSF LL_RTC_IsActiveFlag_RS
732 * @param RTCx RTC Instance
733 * @retval State of bit (1 or 0).
734 */
LL_RTC_IsActiveFlag_RS(RTC_TypeDef * RTCx)735 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_RS(RTC_TypeDef *RTCx)
736 {
737 return (READ_BIT(RTCx->CRL, RTC_CRL_RSF) == (RTC_CRL_RSF));
738 }
739
740 /**
741 * @brief Clear Registers synchronization flag
742 * @rmtoll CRL RSF LL_RTC_ClearFlag_RS
743 * @param RTCx RTC Instance
744 * @retval None
745 */
LL_RTC_ClearFlag_RS(RTC_TypeDef * RTCx)746 __STATIC_INLINE void LL_RTC_ClearFlag_RS(RTC_TypeDef *RTCx)
747 {
748 CLEAR_BIT(RTCx->CRL, RTC_CRL_RSF);
749 }
750
751 /**
752 * @brief Get Registers OverFlow flag
753 * @rmtoll CRL OWF LL_RTC_IsActiveFlag_OW
754 * @param RTCx RTC Instance
755 * @retval State of bit (1 or 0).
756 */
LL_RTC_IsActiveFlag_OW(RTC_TypeDef * RTCx)757 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_OW(RTC_TypeDef *RTCx)
758 {
759 return (READ_BIT(RTCx->CRL, RTC_CRL_OWF) == (RTC_CRL_OWF));
760 }
761
762 /**
763 * @brief Clear Registers OverFlow flag
764 * @rmtoll CRL OWF LL_RTC_ClearFlag_OW
765 * @param RTCx RTC Instance
766 * @retval None
767 */
LL_RTC_ClearFlag_OW(RTC_TypeDef * RTCx)768 __STATIC_INLINE void LL_RTC_ClearFlag_OW(RTC_TypeDef *RTCx)
769 {
770 CLEAR_BIT(RTCx->CRL, RTC_CRL_OWF);
771 }
772
773 /**
774 * @brief Get Registers synchronization flag
775 * @rmtoll CRL SECF LL_RTC_IsActiveFlag_SEC
776 * @param RTCx RTC Instance
777 * @retval State of bit (1 or 0).
778 */
LL_RTC_IsActiveFlag_SEC(RTC_TypeDef * RTCx)779 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_SEC(RTC_TypeDef *RTCx)
780 {
781 return (READ_BIT(RTCx->CRL, RTC_CRL_SECF) == (RTC_CRL_SECF));
782 }
783
784 /**
785 * @brief Clear Registers synchronization flag
786 * @rmtoll CRL SECF LL_RTC_ClearFlag_SEC
787 * @param RTCx RTC Instance
788 * @retval None
789 */
LL_RTC_ClearFlag_SEC(RTC_TypeDef * RTCx)790 __STATIC_INLINE void LL_RTC_ClearFlag_SEC(RTC_TypeDef *RTCx)
791 {
792 CLEAR_BIT(RTCx->CRL, RTC_CRL_SECF);
793 }
794
795 /**
796 * @brief Get RTC Operation OFF status flag
797 * @rmtoll CRL RTOFF LL_RTC_IsActiveFlag_RTOF
798 * @param RTCx RTC Instance
799 * @retval State of bit (1 or 0).
800 */
LL_RTC_IsActiveFlag_RTOF(RTC_TypeDef * RTCx)801 __STATIC_INLINE uint32_t LL_RTC_IsActiveFlag_RTOF(RTC_TypeDef *RTCx)
802 {
803 return (READ_BIT(RTCx->CRL, RTC_CRL_RTOFF) == (RTC_CRL_RTOFF));
804 }
805
806 /**
807 * @}
808 */
809
810 /** @defgroup RTC_LL_EF_IT_Management IT_Management
811 * @{
812 */
813
814 /**
815 * @brief Enable Alarm interrupt
816 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
817 * @rmtoll CRH ALRIE LL_RTC_EnableIT_ALR
818 * @param RTCx RTC Instance
819 * @retval None
820 */
LL_RTC_EnableIT_ALR(RTC_TypeDef * RTCx)821 __STATIC_INLINE void LL_RTC_EnableIT_ALR(RTC_TypeDef *RTCx)
822 {
823 SET_BIT(RTCx->CRH, RTC_CRH_ALRIE);
824 }
825
826 /**
827 * @brief Disable Alarm interrupt
828 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
829 * @rmtoll CRH ALRIE LL_RTC_DisableIT_ALR
830 * @param RTCx RTC Instance
831 * @retval None
832 */
LL_RTC_DisableIT_ALR(RTC_TypeDef * RTCx)833 __STATIC_INLINE void LL_RTC_DisableIT_ALR(RTC_TypeDef *RTCx)
834 {
835 CLEAR_BIT(RTCx->CRH, RTC_CRH_ALRIE);
836 }
837
838 /**
839 * @brief Check if Alarm interrupt is enabled or not
840 * @rmtoll CRH ALRIE LL_RTC_IsEnabledIT_ALR
841 * @param RTCx RTC Instance
842 * @retval State of bit (1 or 0).
843 */
LL_RTC_IsEnabledIT_ALR(RTC_TypeDef * RTCx)844 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_ALR(RTC_TypeDef *RTCx)
845 {
846 return (READ_BIT(RTCx->CRH, RTC_CRH_ALRIE) == (RTC_CRH_ALRIE));
847 }
848
849 /**
850 * @brief Enable Second Interrupt interrupt
851 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
852 * @rmtoll CRH SECIE LL_RTC_EnableIT_SEC
853 * @param RTCx RTC Instance
854 * @retval None
855 */
LL_RTC_EnableIT_SEC(RTC_TypeDef * RTCx)856 __STATIC_INLINE void LL_RTC_EnableIT_SEC(RTC_TypeDef *RTCx)
857 {
858 SET_BIT(RTCx->CRH, RTC_CRH_SECIE);
859 }
860
861 /**
862 * @brief Disable Second interrupt
863 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
864 * @rmtoll CRH SECIE LL_RTC_DisableIT_SEC
865 * @param RTCx RTC Instance
866 * @retval None
867 */
LL_RTC_DisableIT_SEC(RTC_TypeDef * RTCx)868 __STATIC_INLINE void LL_RTC_DisableIT_SEC(RTC_TypeDef *RTCx)
869 {
870 CLEAR_BIT(RTCx->CRH, RTC_CRH_SECIE);
871 }
872
873 /**
874 * @brief Check if Second interrupt is enabled or not
875 * @rmtoll CRH SECIE LL_RTC_IsEnabledIT_SEC
876 * @param RTCx RTC Instance
877 * @retval State of bit (1 or 0).
878 */
LL_RTC_IsEnabledIT_SEC(RTC_TypeDef * RTCx)879 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_SEC(RTC_TypeDef *RTCx)
880 {
881 return (READ_BIT(RTCx->CRH, RTC_CRH_SECIE) == (RTC_CRH_SECIE));
882 }
883
884 /**
885 * @brief Enable OverFlow interrupt
886 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
887 * @rmtoll CRH OWIE LL_RTC_EnableIT_OW
888 * @param RTCx RTC Instance
889 * @retval None
890 */
LL_RTC_EnableIT_OW(RTC_TypeDef * RTCx)891 __STATIC_INLINE void LL_RTC_EnableIT_OW(RTC_TypeDef *RTCx)
892 {
893 SET_BIT(RTCx->CRH, RTC_CRH_OWIE);
894 }
895
896 /**
897 * @brief Disable OverFlow interrupt
898 * @note Bit is write-protected. @ref LL_RTC_DisableWriteProtection function should be called before.
899 * @rmtoll CRH OWIE LL_RTC_DisableIT_OW
900 * @param RTCx RTC Instance
901 * @retval None
902 */
LL_RTC_DisableIT_OW(RTC_TypeDef * RTCx)903 __STATIC_INLINE void LL_RTC_DisableIT_OW(RTC_TypeDef *RTCx)
904 {
905 CLEAR_BIT(RTCx->CRH, RTC_CRH_OWIE);
906 }
907
908 /**
909 * @brief Check if OverFlow interrupt is enabled or not
910 * @rmtoll CRH OWIE LL_RTC_IsEnabledIT_OW
911 * @param RTCx RTC Instance
912 * @retval State of bit (1 or 0).
913 */
LL_RTC_IsEnabledIT_OW(RTC_TypeDef * RTCx)914 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_OW(RTC_TypeDef *RTCx)
915 {
916 return (READ_BIT(RTCx->CRH, RTC_CRH_OWIE) == (RTC_CRH_OWIE));
917 }
918
919 /**
920 * @brief Enable Tamper interrupt
921 * @rmtoll CSR TPIE LL_RTC_EnableIT_TAMP
922 * @param BKPx BKP Instance
923 * @retval None
924 */
LL_RTC_EnableIT_TAMP(BKP_TypeDef * BKPx)925 __STATIC_INLINE void LL_RTC_EnableIT_TAMP(BKP_TypeDef *BKPx)
926 {
927 SET_BIT(BKPx->CSR, BKP_CSR_TPIE);
928 }
929
930 /**
931 * @brief Disable Tamper interrupt
932 * @rmtoll CSR TPIE LL_RTC_EnableIT_TAMP
933 * @param BKPx BKP Instance
934 * @retval None
935 */
LL_RTC_DisableIT_TAMP(BKP_TypeDef * BKPx)936 __STATIC_INLINE void LL_RTC_DisableIT_TAMP(BKP_TypeDef *BKPx)
937 {
938 CLEAR_BIT(BKPx->CSR, BKP_CSR_TPIE);
939 }
940
941 /**
942 * @brief Check if all the TAMPER interrupts are enabled or not
943 * @rmtoll CSR TPIE LL_RTC_IsEnabledIT_TAMP
944 * @param BKPx BKP Instance
945 * @retval State of bit (1 or 0).
946 */
LL_RTC_IsEnabledIT_TAMP(BKP_TypeDef * BKPx)947 __STATIC_INLINE uint32_t LL_RTC_IsEnabledIT_TAMP(BKP_TypeDef *BKPx)
948 {
949 return (READ_BIT(BKPx->CSR, BKP_CSR_TPIE) == BKP_CSR_TPIE);
950 }
951 /**
952 * @}
953 */
954
955 #if defined(USE_FULL_LL_DRIVER)
956 /** @defgroup RTC_LL_EF_Init Initialization and de-initialization functions
957 * @{
958 */
959
960 ErrorStatus LL_RTC_DeInit(RTC_TypeDef *RTCx);
961 ErrorStatus LL_RTC_Init(RTC_TypeDef *RTCx, LL_RTC_InitTypeDef *RTC_InitStruct);
962 void LL_RTC_StructInit(LL_RTC_InitTypeDef *RTC_InitStruct);
963 ErrorStatus LL_RTC_TIME_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_TimeTypeDef *RTC_TimeStruct);
964 void LL_RTC_TIME_StructInit(LL_RTC_TimeTypeDef *RTC_TimeStruct);
965 ErrorStatus LL_RTC_ALARM_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct);
966 void LL_RTC_ALARM_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct);
967 ErrorStatus LL_RTC_EnterInitMode(RTC_TypeDef *RTCx);
968 ErrorStatus LL_RTC_ExitInitMode(RTC_TypeDef *RTCx);
969 ErrorStatus LL_RTC_WaitForSynchro(RTC_TypeDef *RTCx);
970 ErrorStatus LL_RTC_TIME_SetCounter(RTC_TypeDef *RTCx, uint32_t TimeCounter);
971 ErrorStatus LL_RTC_ALARM_SetCounter(RTC_TypeDef *RTCx, uint32_t AlarmCounter);
972
973 /**
974 * @}
975 */
976 #endif /* USE_FULL_LL_DRIVER */
977
978 /**
979 * @}
980 */
981
982 /**
983 * @}
984 */
985
986 /**
987 * @}
988 */
989
990 #endif /* defined(RTC) */
991
992 /**
993 * @}
994 */
995
996 #ifdef __cplusplus
997 }
998 #endif
999
1000 #endif /* __STM32F1xx_LL_RTC_H */
1001