PER Firmware
Loading...
Searching...
No Matches
rtc.h
Go to the documentation of this file.
1
12#ifndef _PHAL_RTC_H_
13#define _PHAL_RTC_H_
14
16
17// Clock source: currently only supporting LSE
18
19/*
20 When both prescalers are used, it is recommended to configure the asynchronous
21 prescaler to a high value to minimize consumption. (RM0090 26.3.1)
22
23 Default Configuration STM32F4
24 =======================================================
25 The asynchronous prescaler division factor is set to 128, and the synchronous division factor to 256,
26 to obtain an internal clock frequency of 1 Hz (ck_spre) with an LSE frequency of 32.768 kHz.
27*/
28
29// Maximum input frequency is 4MHz, reccomended to use LSE at 32.768 kHz
30// Minimum division factor: 1
31// Maximum division factor: 2^22
32
33// RTC Clock = source / ((ASCNC + 1) * (SYNC + 1))
34// To target 1Hz on LSI, we are doing 32000 / ((255 + 1) * (124 + 1))
35#define RTC_ASYNC_PRESCAL (255U)
36#define RTC_SYNC_PRESCAL (124U)
37
38// STM32 RTC uses lovely BCD
39// https://embedded.fm/blog/2018/6/5/an-introduction-to-bcd
40
56
67
72
73typedef struct
74{
77 uint8_t day_bcd;
78 uint8_t year_bcd;
79
81
82typedef struct
83{
84 // Must be a number between 0x00 and 0x12 if RTC_FORMAT_AM_PM
85 // Must be a number between 0x00 and 0x23 if RTC_FORMAT_24_HOUR
86 uint8_t hours_bcd;
87
88 // Must be a number between 0x0 and 0x59
89 uint8_t minutes_bcd;
90 uint8_t seconds_bcd;
91
94
100
101#define RTC_CONV_TO_BCD(v) (((v / 10) << 4) | (v % 10))
102
103bool PHAL_getTimeRTC(RTC_timestamp_t* currentTimestamp);
104uint8_t PHAL_configureRTC(RTC_timestamp_t* initial_time, bool force_time);
105
106#endif // _PHAL_RTC_H_
uint8_t PHAL_configureRTC(RTC_timestamp_t *initial_time, bool force_time)
Definition rtc.c:15
bool PHAL_getTimeRTC(RTC_timestamp_t *currentTimestamp)
Definition rtc.c:140
RTC_TIME_FORMAT_t
Definition rtc.h:68
@ RTC_FORMAT_AM_PM
Definition rtc.h:70
@ RTC_FORMAT_24_HOUR
Definition rtc.h:69
RTC_MONTH_t
Definition rtc.h:41
@ RTC_MONTH_AUGUST
Definition rtc.h:50
@ RTC_MONTH_APRIL
Definition rtc.h:46
@ RTC_MONTH_FEBRUARY
Definition rtc.h:44
@ RTC_MONTH_SEPTEMBER
Definition rtc.h:51
@ RTC_MONTH_MAY
Definition rtc.h:47
@ RTC_MONTH_UNKNOWN
Definition rtc.h:42
@ RTC_MONTH_MARCH
Definition rtc.h:45
@ RTC_MONTH_DECEMBER
Definition rtc.h:54
@ RTC_MONTH_NOVEMBER
Definition rtc.h:53
@ RTC_MONTH_JULY
Definition rtc.h:49
@ RTC_MONTH_JANUARY
Definition rtc.h:43
@ RTC_MONTH_OCTOBER
Definition rtc.h:52
@ RTC_MONTH_JUNE
Definition rtc.h:48
RTC_WEEKDAY_t
Definition rtc.h:57
@ RTC_WEEKDAY_UNKNOWN
Definition rtc.h:58
@ RTC_WEEKDAY_SUNDAY
Definition rtc.h:65
@ RTC_WEEKDAY_MONDAY
Definition rtc.h:59
@ RTC_WEEKDAY_THURSDAY
Definition rtc.h:62
@ RTC_WEEKDAY_SATURDAY
Definition rtc.h:64
@ RTC_WEEKDAY_WEDNESDAY
Definition rtc.h:61
@ RTC_WEEKDAY_FRIDAY
Definition rtc.h:63
@ RTC_WEEKDAY_TUESDAY
Definition rtc.h:60
Definition rtc.h:74
RTC_MONTH_t month_bcd
Definition rtc.h:75
uint8_t day_bcd
Definition rtc.h:77
RTC_WEEKDAY_t weekday
Definition rtc.h:76
uint8_t year_bcd
Definition rtc.h:78
Definition rtc.h:83
uint8_t seconds_bcd
Definition rtc.h:90
uint8_t hours_bcd
Definition rtc.h:86
RTC_TIME_FORMAT_t time_format
Definition rtc.h:92
uint8_t minutes_bcd
Definition rtc.h:89
Definition rtc.h:96
RTC_time_t time
Definition rtc.h:98
RTC_date_t date
Definition rtc.h:97