1 | HAL_Init();
|
2 |
|
3 | /* Configure the system clock to 2 MHz */
|
4 | SystemClock_Config();
|
5 |
|
6 | /* Configure LED3 */
|
7 | BSP_LED_Init(LED3);
|
8 |
|
9 | /* Configure RTC */
|
10 | RTC_Config();
|
11 |
|
12 | /* Configure the system Power */
|
13 | SystemPower_Config();
|
14 |
|
15 | /* Check and handle if the system was resumed from StandBy mode */
|
16 | if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
|
17 | {
|
18 | /* Clear Standby flag */
|
19 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
|
20 | }
|
21 |
|
22 | /* Insert 5 seconds delay */
|
23 | HAL_Delay(5000);
|
24 |
|
25 | /* The Following Wakeup sequence is highly recommended prior to each Standby mode entry
|
26 | mainly when using more than one wakeup source this is to not miss any wakeup event.
|
27 | - Disable all used wakeup sources,
|
28 | - Clear all related wakeup flags,
|
29 | - Re-enable all used wakeup sources,
|
30 | - Enter the Standby mode.
|
31 | */
|
32 | /* Disable all used wakeup sources*/
|
33 | HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
|
34 |
|
35 | /* Clear all related wakeup flags */
|
36 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
|
37 |
|
38 | /* Re-enable all used wakeup sources*/
|
39 | /* ## Setting the Wake up time ############################################*/
|
40 | /* RTC Wakeup Interrupt Generation:
|
41 | the wake-up counter is set to its maximum value to yield the longuest
|
42 | stand-by time to let the current reach its lowest operating point.
|
43 | The maximum value is 0xFFFF, corresponding to about 33 sec. when
|
44 | RTC_WAKEUPCLOCK_RTCCLK_DIV = RTCCLK_Div16 = 16
|
45 |
|
46 | Wakeup Time Base = (RTC_WAKEUPCLOCK_RTCCLK_DIV /(LSI))
|
47 | Wakeup Time = Wakeup Time Base * WakeUpCounter
|
48 | = (RTC_WAKEUPCLOCK_RTCCLK_DIV /(LSI)) * WakeUpCounter
|
49 | ==> WakeUpCounter = Wakeup Time / Wakeup Time Base
|
50 |
|
51 | To configure the wake up timer to 28s the WakeUpCounter is set to 0xFFFF:
|
52 | Wakeup Time Base = 16 /(~37.000KHz) = ~0.432 ms
|
53 | Wakeup Time = 0.432 ms * WakeUpCounter
|
54 | Therefore, with wake-up counter = 0xFFFF = 65,535
|
55 | Wakeup Time = 0,432 ms * 65,535 = 28,311 s ~ 28 sec. */
|
56 | HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0x0FFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
|
57 |
|
58 | /* Enter the Standby mode */
|
59 | HAL_PWR_EnterSTANDBYMode();
|
60 |
|
61 | while (1)
|
62 | {
|
63 | }
|