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;
|
232
|
36 stimestructure.TimeFormat = RTC_HOURFORMAT_24;
|
38
|
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 {
|
232
|
107 /* Initialize RTC */
|
38
|
108 RTCHandle.Instance = RTC;
|
|
109 RTCHandle.Init.HourFormat = RTC_HOURFORMAT_24;
|
|
110 RTCHandle.Init.AsynchPrediv = 127;
|
|
111 RTCHandle.Init.SynchPrediv = 255;
|
|
112 RTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
|
|
113 RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
|
114 RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
|
115 HAL_RTC_Init(&RTCHandle);
|
|
116 }
|
|
117
|
|
118
|
|
119 void RTC_StopMode_2seconds(void)
|
|
120 {
|
|
121 /* Enable Power Control clock */
|
|
122 __HAL_RCC_PWR_CLK_ENABLE();
|
|
123
|
|
124 /* Disable Wake-up timer */
|
|
125 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
126
|
|
127 /* Enable Wake-up timer */
|
|
128 HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, (0x1000-1), RTC_WAKEUPCLOCK_RTCCLK_DIV16);
|
|
129
|
|
130 /* FLASH Deep Power Down Mode enabled */
|
|
131 HAL_PWREx_EnableFlashPowerDown();
|
|
132
|
|
133 /*## Enter Stop Mode #######################################################*/
|
|
134 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
|
|
135
|
|
136 /* Configures system clock after wake-up from STOP: enable HSI, PLL and select
|
|
137 PLL as system clock source (HSI and PLL are disabled in STOP mode) */
|
|
138 SYSCLKConfig_STOP();
|
|
139
|
|
140 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
141 }
|
|
142
|
|
143
|
|
144 void RTC_Stop_11ms(void)
|
|
145 {
|
|
146 /* Disable Wake-up timer */
|
|
147 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
148
|
|
149 /* Enable Wake-up timer */
|
|
150 HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, (0x18-1), RTC_WAKEUPCLOCK_RTCCLK_DIV16);
|
|
151
|
|
152 /* FLASH Deep Power Down Mode enabled */
|
|
153 HAL_PWREx_DisableFlashPowerDown();
|
|
154
|
|
155 /*## Enter Stop Mode #######################################################*/
|
|
156 HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
|
|
157
|
|
158 /* Configures system clock after wake-up from STOP: enable HSI, PLL and select
|
|
159 PLL as system clock source (HSI and PLL are disabled in STOP mode) */
|
|
160 SYSCLKConfig_STOP();
|
|
161
|
|
162 HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
|
163 }
|
|
164
|
|
165
|
|
166 static void RTC_Error_Handler(void)
|
|
167 {
|
|
168 while(1);
|
|
169 }
|
|
170
|
|
171
|
|
172 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/
|