Browse code

Add source code of the firmware for the IO Board

Pawel Jablonski authored on 05/06/2023 17:01:27
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,89 @@
1
+/*
2
+ * Author: Pawel Jablonski
3
+ * E-mail: pj@xirx.net
4
+ * WWW: xirx.net
5
+ * GIT: git.xirx.net
6
+ *
7
+ * License: You can use this code however you like
8
+ * but leave information about the original author.
9
+ * Code is free for non-commercial and commercial use.
10
+ */
11
+
12
+#include <stm32f0xx.h>
13
+#include <stm32f0xx_hal.h>
14
+#include <stm32f0xx_hal_gpio.h>
15
+#include <stm32f0xx_hal_rtc.h>
16
+#include <stm32f0xx_hal_rcc.h>
17
+#include <system_stm32f0xx.h>
18
+
19
+#include "rtc.h"
20
+
21
+static RTC_HandleTypeDef rtcHandle; //!< RTC HAL handle
22
+
23
+//! Init RTC and set up the RTC HAL handle
24
+void rtcInit(void)
25
+{
26
+	__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
27
+	__HAL_RCC_RTC_ENABLE();
28
+	
29
+	rtcHandle.Init.HourFormat = RTC_HOURFORMAT_24;
30
+	rtcHandle.Init.AsynchPrediv = 127;
31
+	rtcHandle.Init.SynchPrediv = 255;
32
+	rtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
33
+	rtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
34
+	rtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
35
+	rtcHandle.Instance = RTC;
36
+	
37
+	HAL_RTC_Init(&rtcHandle);
38
+}
39
+
40
+/**
41
+ * Set date and time
42
+ *
43
+ * @param dateTime Date and time to set
44
+ */
45
+void rtcSetDateTime(struct RTCDateTime dateTime)
46
+{
47
+	RTC_TimeTypeDef rtcTime = {0};
48
+	RTC_DateTypeDef rtcDate = {0};
49
+	
50
+	rtcTime.Hours = dateTime.hour;
51
+	rtcTime.Minutes = dateTime.minute;
52
+	rtcTime.Seconds = dateTime.second;
53
+	rtcTime.TimeFormat = RTC_HOURFORMAT_24;
54
+	rtcTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
55
+	rtcTime.StoreOperation = RTC_STOREOPERATION_RESET;
56
+	
57
+	rtcDate.Year = dateTime.year;
58
+	rtcDate.Month = dateTime.month;
59
+	rtcDate.Date = dateTime.day;
60
+	
61
+	HAL_RTC_SetTime(&rtcHandle, &rtcTime, RTC_FORMAT_BIN);
62
+	HAL_RTC_SetDate(&rtcHandle, &rtcDate, RTC_FORMAT_BIN);
63
+}
64
+
65
+/**
66
+ * Get date and time
67
+ *
68
+ * @return Date and time
69
+ */
70
+struct RTCDateTime rtcGetDateTime(void)
71
+{
72
+	RTC_TimeTypeDef rtcTime = {0};
73
+	RTC_DateTypeDef rtcDate = {0};
74
+	
75
+	HAL_RTC_GetTime(&rtcHandle, &rtcTime, RTC_FORMAT_BIN);
76
+	HAL_RTC_GetDate(&rtcHandle, &rtcDate, RTC_FORMAT_BIN);
77
+	
78
+	struct RTCDateTime dateTime;
79
+	
80
+	dateTime.hour = rtcTime.Hours;
81
+	dateTime.minute = rtcTime.Minutes;
82
+	dateTime.second = rtcTime.Seconds;
83
+	
84
+	dateTime.year = rtcDate.Year;
85
+	dateTime.month = rtcDate.Month;
86
+	dateTime.day = rtcDate.Date;
87
+	
88
+	return(dateTime);
89
+}