|
36 | 36 |
|
37 | 37 | static RTC_HandleTypeDef RtcHandle;
|
38 | 38 |
|
39 |
| -#if DEVICE_LOWPOWERTIMER |
40 |
| -#define RTC_ASYNCH_PREDIV ((RTC_CLOCK - 1) / 0x8000) |
41 |
| -#else |
42 |
| -#define RTC_ASYNCH_PREDIV (0x007F) |
43 |
| -#endif |
44 |
| - |
45 |
| -#define RTC_SYNCH_PREDIV (RTC_CLOCK / (RTC_ASYNCH_PREDIV + 1) - 1) |
46 |
| - |
47 | 39 | #if DEVICE_LOWPOWERTIMER
|
48 | 40 | static void (*irq_handler)(void);
|
49 | 41 | static void RTC_IRQHandler(void);
|
@@ -114,8 +106,19 @@ void rtc_init(void)
|
114 | 106 | RtcHandle.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
|
115 | 107 | #else /* TARGET_STM32F1 */
|
116 | 108 | RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24;
|
117 |
| - RtcHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV; |
118 |
| - RtcHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV; |
| 109 | + |
| 110 | + /* PREDIV_A : 7-bit asynchronous prescaler */ |
| 111 | +#if DEVICE_LOWPOWERTIMER |
| 112 | + /* PREDIV_A is set to a small value to improve the SubSeconds resolution */ |
| 113 | + /* with a 32768Hz clock, PREDIV_A=7 gives a precision of 244us */ |
| 114 | + RtcHandle.Init.AsynchPrediv = 7; |
| 115 | +#else |
| 116 | + /* PREDIV_A is set to the maximum value to improve the consumption */ |
| 117 | + RtcHandle.Init.AsynchPrediv = 0x007F; |
| 118 | +#endif |
| 119 | + /* PREDIV_S : 15-bit synchronous prescaler */ |
| 120 | + /* PREDIV_S is set in order to get a 1 Hz clock */ |
| 121 | + RtcHandle.Init.SynchPrediv = RTC_CLOCK / (RtcHandle.Init.AsynchPrediv + 1) - 1; |
119 | 122 | RtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
|
120 | 123 | RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
121 | 124 | RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
@@ -304,7 +307,7 @@ static void RTC_IRQHandler(void)
|
304 | 307 |
|
305 | 308 | uint32_t rtc_read_subseconds(void)
|
306 | 309 | {
|
307 |
| - return 1000000.f * ((double)(RTC_SYNCH_PREDIV - RTC->SSR) / (RTC_SYNCH_PREDIV + 1)); |
| 310 | + return 1000000.f * ((double)((RTC->PRER & RTC_PRER_PREDIV_S) - RTC->SSR) / ((RTC->PRER & RTC_PRER_PREDIV_S) + 1)); |
308 | 311 | }
|
309 | 312 |
|
310 | 313 | void rtc_set_wake_up_timer(uint32_t delta)
|
|
0 commit comments