38
|
1 /**
|
|
2 ******************************************************************************
|
|
3 * @file rtc.c
|
|
4 * @author heinrichs weikamp gmbh
|
|
5 * @version V0.0.1
|
|
6 * @date 10-Oct-2014
|
|
7 * @brief Source code for rtc control
|
|
8 *
|
|
9 @verbatim
|
|
10 ==============================================================================
|
|
11 ##### How to use #####
|
|
12 ==============================================================================
|
|
13 @endverbatim
|
|
14 ******************************************************************************
|
|
15 * @attention
|
|
16 *
|
|
17 * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
|
|
18 *
|
|
19 ******************************************************************************
|
|
20 */
|
|
21 /* Includes ------------------------------------------------------------------*/
|
|
22 #include "rtc.h"
|
|
23 #include "stm32f4xx_hal.h"
|
|
24 #include "stm32f4xx_hal_conf.h"
|
|
25 #include "baseCPU2.h"
|
|
26
|
|
27 RTC_HandleTypeDef RTCHandle;
|
|
28
|
|
29 static void RTC_Error_Handler(void);
|
|
30
|
|
31
|
|
32 void RTC_SetTime(RTC_TimeTypeDef stimestructure)
|
|
33 {
|
|
34
|
|
35 stimestructure.SubSeconds = 0;
|
|
36 stimestructure.TimeFormat = RTC_HOURFORMAT12_AM;
|
|
37 stimestructure.DayLightSaving = RTC_DAYLIGHTSAVING_NONE ;
|
|
38 stimestructure.StoreOperation = RTC_STOREOPERATION_RESET;
|
|
39
|
|
40 if(HAL_RTC_SetTime(&RTCHandle, &stimestructure, FORMAT_BIN) != HAL_OK)
|
|
41 {
|
|
42 RTC_Error_Handler();
|
|
43 }
|
|
44 }
|
|
45
|
|
46
|
|
47 void RTC_SetDate(RTC_DateTypeDef sdatestructure)
|
|
48 {
|
|
49 if(HAL_RTC_SetDate(&RTCHandle, &sdatestructure, FORMAT_BIN) != HAL_OK)
|
|
50 {
|
|
51 RTC_Error_Handler();
|
|
52 }
|
|
53 }
|
|
54
|
|
55
|
|
56 /*
|
|
57 static void RTC_CalendarConfig(void)
|
|
58 {
|
|
59 RTC_DateTypeDef sdatestructure;
|
|
60 RTC_TimeTypeDef stimestructure;
|
|
61
|
|
62 //##-1- Configure the Date #################################################
|
|
63 // Set Date: Monday April 14th 2014
|
|
64 sdatestructure.Year = 0;
|
|
65 sdatestructure.Month = RTC_MONTH_JANUARY;
|
|
66 sdatestructure.Date = 1;
|
|
67 sdatestructure.WeekDay = RTC_WEEKDAY_MONDAY;
|
|
68
|
|
69 if(HAL_RTC_SetDate(&RTCHandle,&sdatestructure,FORMAT_BCD) != HAL_OK)
|
|
70 {
|
|
71 RTC_Error_Handler();
|
|
72 }
|
|
73
|
|
74 //##-2- Configure the Time #################################################
|
|
75 // Set Time: 02:00:00
|
|
76 stimestructure.Hours = 0;
|
|
77 stimestructure.Minutes = 0;
|
|
78 stimestructure.Seconds = 0;
|
|
79 stimestructure.DayLightSaving = RTC_DAYLIGHTSAVING_NONE ;
|
|
80 stimestructure.StoreOperation = RTC_STOREOPERATION_RESET;
|
|
81
|
|
82 if(HAL_RTC_SetTime(&RTCHandle,&stimestructure,FORMAT_BCD) != HAL_OK)
|
|
83 {
|
|
84 RTC_Error_Handler();
|
|
85 }
|
|
86
|
|
87 //##-3- Writes a data in a RTC Backup data Register0 #######################
|
|
88 // HAL_RTCEx_BKUPWrite(&RTCHandle,RTC_BKP_DR0,0x32F2);
|
|
89 }
|
|
90 */
|
|
91
|
|
92
|
|
93 /* ##-1- Configure the RTC peripheral #######################################
|
|
94 Configure RTC prescaler and RTC data registers
|
|
95 RTC configured as follow:
|
|
96 - Hour Format = Format 24
|
|
97 - Asynch Prediv = Value according to source clock
|
|
98 - Synch Prediv = Value according to source clock
|
|
99 - OutPut = Output Disable
|
|
100 - OutPutPolarity = High Polarity
|
|
101 - OutPutType = Open Drain
|
|
102 */
|
|
103
|
|
104
|
|
105 void MX_RTC_init(void)
|
|
106 {
|
|
107
|
|
108 RTC_TimeTypeDef sTime;
|
|
109 RTC_DateTypeDef sDate;
|
|
110 // RTC_AlarmTypeDef sAlarm;
|
|
111
|
|
112 /**Initialize RTC and set the Time and Date
|
|
113 */
|
|
114 RTCHandle.Instance = RTC;
|
|
115 RTCHandle.Init.HourFormat = RTC_HOURFORMAT_24;
|
|
116 RTCHandle.Init.AsynchPrediv = 127;
|
|
117 RTCHandle.Init.SynchPrediv = 255;
|
|
118 RTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
|
|
119 RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
|
120 RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
|
121 HAL_RTC_Init(&RTCHandle);
|
|
122
|
|
123 sTime.Hours = 11;
|
|
124 sTime.Minutes = 0;
|
|
125 sTime.Seconds = 0;
|
|
126 sTime.SubSeconds = 0;
|
|
127 sTime.TimeFormat = RTC_HOURFORMAT12_AM;
|
|
128 sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
|
|
129 sTime.StoreOperation = RTC_STOREOPERATION_RESET;
|
|
130 HAL_RTC_SetTime(&RTCHandle, &sTime, FORMAT_BCD);
|
|
131
|
|
132 sDate.WeekDay = RTC_WEEKDAY_SUNDAY;
|
|
133 sDate.Month = RTC_MONTH_FEBRUARY;
|
|
134 sDate.Date = 15;
|
|
135 sDate.Year = 17;
|
|
136 HAL_RTC_SetDate(&RTCHandle, &sDate, FORMAT_BCD);
|
|
137
|
|
138
|
|
139 /*
|
|
140 RTCHandle.Instance = RTC;
|
|
141 RTCHandle.Init.HourFormat = RTC_HOURFORMAT_24;
|
|
142 RTCHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;
|
|
143 RTCHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV;
|
|
144 RTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
|
|
145 RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
|
146 RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
|
147
|
|
148 HAL_RTC_Init(&RTCHandle);
|
|
149 */
|
|
150 }
|
|
151
|
|
152
|
|
153 void RTC_StopMode_2seconds(void)
|
|
154 {
|
|
155 /* Enable Power Control clock */
|
|
156 __HAL_RCC_PWR_CLK_ENABLE();
|
|
157
|
|
158 /* Disable Wake-up timer */
|
|
159 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
160
|
|
161 /* Enable Wake-up timer */
|
|
162 HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, (0x1000-1), RTC_WAKEUPCLOCK_RTCCLK_DIV16);
|
|
163
|
|
164 /* FLASH Deep Power Down Mode enabled */
|
|
165 HAL_PWREx_EnableFlashPowerDown();
|
|
166
|
|
167 /*## Enter Stop Mode #######################################################*/
|
|
168 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
|
|
169
|
|
170 /* Configures system clock after wake-up from STOP: enable HSI, PLL and select
|
|
171 PLL as system clock source (HSI and PLL are disabled in STOP mode) */
|
|
172 SYSCLKConfig_STOP();
|
|
173
|
|
174 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
175 }
|
|
176
|
|
177
|
|
178 void RTC_Stop_11ms(void)
|
|
179 {
|
|
180 /* Disable Wake-up timer */
|
|
181 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
182
|
|
183 /* Enable Wake-up timer */
|
|
184 HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, (0x18-1), RTC_WAKEUPCLOCK_RTCCLK_DIV16);
|
|
185
|
|
186 /* FLASH Deep Power Down Mode enabled */
|
|
187 HAL_PWREx_DisableFlashPowerDown();
|
|
188
|
|
189 /*## Enter Stop Mode #######################################################*/
|
|
190 HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
|
|
191
|
|
192 /* Configures system clock after wake-up from STOP: enable HSI, PLL and select
|
|
193 PLL as system clock source (HSI and PLL are disabled in STOP mode) */
|
|
194 SYSCLKConfig_STOP();
|
|
195
|
|
196 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
197 }
|
|
198
|
|
199
|
|
200 static void RTC_Error_Handler(void)
|
|
201 {
|
|
202 while(1);
|
|
203 }
|
|
204
|
|
205
|
|
206 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/
|