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
15
#include "
common/phal_F4/phal_F4.h
"
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
41
typedef
enum
{
42
RTC_MONTH_UNKNOWN
= 0x0,
43
RTC_MONTH_JANUARY
= 0x1,
44
RTC_MONTH_FEBRUARY
= 0x2,
45
RTC_MONTH_MARCH
= 0x3,
46
RTC_MONTH_APRIL
= 0x4,
47
RTC_MONTH_MAY
= 0x5,
48
RTC_MONTH_JUNE
= 0x6,
49
RTC_MONTH_JULY
= 0x7,
50
RTC_MONTH_AUGUST
= 0x8,
51
RTC_MONTH_SEPTEMBER
= 0x9,
52
RTC_MONTH_OCTOBER
= 0x10,
53
RTC_MONTH_NOVEMBER
= 0x11,
54
RTC_MONTH_DECEMBER
= 0x12,
55
}
RTC_MONTH_t
;
56
57
typedef
enum
{
58
RTC_WEEKDAY_UNKNOWN
= 0x0,
59
RTC_WEEKDAY_MONDAY
= 0x1,
60
RTC_WEEKDAY_TUESDAY
= 0x2,
61
RTC_WEEKDAY_WEDNESDAY
= 0x3,
62
RTC_WEEKDAY_THURSDAY
= 0x4,
63
RTC_WEEKDAY_FRIDAY
= 0x5,
64
RTC_WEEKDAY_SATURDAY
= 0x6,
65
RTC_WEEKDAY_SUNDAY
= 0x7,
66
}
RTC_WEEKDAY_t
;
67
68
typedef
enum
{
69
RTC_FORMAT_24_HOUR
= 0U,
70
RTC_FORMAT_AM_PM
,
71
}
RTC_TIME_FORMAT_t
;
72
73
typedef
struct
74
{
75
RTC_MONTH_t
month_bcd
;
76
RTC_WEEKDAY_t
weekday
;
77
uint8_t
day_bcd
;
78
uint8_t
year_bcd
;
79
80
}
RTC_date_t
;
81
82
typedef
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
92
RTC_TIME_FORMAT_t
time_format
;
93
}
RTC_time_t
;
94
95
typedef
struct
96
{
97
RTC_date_t
date
;
98
RTC_time_t
time
;
99
}
RTC_timestamp_t
;
100
101
#define RTC_CONV_TO_BCD(v) (((v / 10) << 4) | (v % 10))
102
103
bool
PHAL_getTimeRTC
(
RTC_timestamp_t
* currentTimestamp);
104
uint8_t
PHAL_configureRTC
(
RTC_timestamp_t
* initial_time,
bool
force_time);
105
106
#endif
// _PHAL_RTC_H_
phal_F4.h
PHAL_configureRTC
uint8_t PHAL_configureRTC(RTC_timestamp_t *initial_time, bool force_time)
Definition
rtc.c:15
PHAL_getTimeRTC
bool PHAL_getTimeRTC(RTC_timestamp_t *currentTimestamp)
Definition
rtc.c:140
RTC_TIME_FORMAT_t
RTC_TIME_FORMAT_t
Definition
rtc.h:68
RTC_FORMAT_AM_PM
@ RTC_FORMAT_AM_PM
Definition
rtc.h:70
RTC_FORMAT_24_HOUR
@ RTC_FORMAT_24_HOUR
Definition
rtc.h:69
RTC_MONTH_t
RTC_MONTH_t
Definition
rtc.h:41
RTC_MONTH_AUGUST
@ RTC_MONTH_AUGUST
Definition
rtc.h:50
RTC_MONTH_APRIL
@ RTC_MONTH_APRIL
Definition
rtc.h:46
RTC_MONTH_FEBRUARY
@ RTC_MONTH_FEBRUARY
Definition
rtc.h:44
RTC_MONTH_SEPTEMBER
@ RTC_MONTH_SEPTEMBER
Definition
rtc.h:51
RTC_MONTH_MAY
@ RTC_MONTH_MAY
Definition
rtc.h:47
RTC_MONTH_UNKNOWN
@ RTC_MONTH_UNKNOWN
Definition
rtc.h:42
RTC_MONTH_MARCH
@ RTC_MONTH_MARCH
Definition
rtc.h:45
RTC_MONTH_DECEMBER
@ RTC_MONTH_DECEMBER
Definition
rtc.h:54
RTC_MONTH_NOVEMBER
@ RTC_MONTH_NOVEMBER
Definition
rtc.h:53
RTC_MONTH_JULY
@ RTC_MONTH_JULY
Definition
rtc.h:49
RTC_MONTH_JANUARY
@ RTC_MONTH_JANUARY
Definition
rtc.h:43
RTC_MONTH_OCTOBER
@ RTC_MONTH_OCTOBER
Definition
rtc.h:52
RTC_MONTH_JUNE
@ RTC_MONTH_JUNE
Definition
rtc.h:48
RTC_WEEKDAY_t
RTC_WEEKDAY_t
Definition
rtc.h:57
RTC_WEEKDAY_UNKNOWN
@ RTC_WEEKDAY_UNKNOWN
Definition
rtc.h:58
RTC_WEEKDAY_SUNDAY
@ RTC_WEEKDAY_SUNDAY
Definition
rtc.h:65
RTC_WEEKDAY_MONDAY
@ RTC_WEEKDAY_MONDAY
Definition
rtc.h:59
RTC_WEEKDAY_THURSDAY
@ RTC_WEEKDAY_THURSDAY
Definition
rtc.h:62
RTC_WEEKDAY_SATURDAY
@ RTC_WEEKDAY_SATURDAY
Definition
rtc.h:64
RTC_WEEKDAY_WEDNESDAY
@ RTC_WEEKDAY_WEDNESDAY
Definition
rtc.h:61
RTC_WEEKDAY_FRIDAY
@ RTC_WEEKDAY_FRIDAY
Definition
rtc.h:63
RTC_WEEKDAY_TUESDAY
@ RTC_WEEKDAY_TUESDAY
Definition
rtc.h:60
RTC_date_t
Definition
rtc.h:74
RTC_date_t::month_bcd
RTC_MONTH_t month_bcd
Definition
rtc.h:75
RTC_date_t::day_bcd
uint8_t day_bcd
Definition
rtc.h:77
RTC_date_t::weekday
RTC_WEEKDAY_t weekday
Definition
rtc.h:76
RTC_date_t::year_bcd
uint8_t year_bcd
Definition
rtc.h:78
RTC_time_t
Definition
rtc.h:83
RTC_time_t::seconds_bcd
uint8_t seconds_bcd
Definition
rtc.h:90
RTC_time_t::hours_bcd
uint8_t hours_bcd
Definition
rtc.h:86
RTC_time_t::time_format
RTC_TIME_FORMAT_t time_format
Definition
rtc.h:92
RTC_time_t::minutes_bcd
uint8_t minutes_bcd
Definition
rtc.h:89
RTC_timestamp_t
Definition
rtc.h:96
RTC_timestamp_t::time
RTC_time_t time
Definition
rtc.h:98
RTC_timestamp_t::date
RTC_date_t date
Definition
rtc.h:97
firmware
common
phal_F4
rtc
rtc.h
Generated by
1.12.0