@@ -86,7 +86,7 @@ uint64_t stm32_peripherals_rtc_raw_ticks(uint8_t *subticks) {
86
86
uint32_t time = (uint32_t )(RTC -> TR & RTC_TR_RESERVED_MASK );
87
87
uint32_t date = (uint32_t )(RTC -> DR & RTC_DR_RESERVED_MASK );
88
88
uint32_t ssr = (uint32_t )(RTC -> SSR );
89
- while (ssr != first_ssr ) {
89
+ if (ssr != first_ssr ) {
90
90
first_ssr = ssr ;
91
91
time = (uint32_t )(RTC -> TR & RTC_TR_RESERVED_MASK );
92
92
date = (uint32_t )(RTC -> DR & RTC_DR_RESERVED_MASK );
@@ -184,13 +184,16 @@ void stm32_peripherals_rtc_set_alarm(uint8_t alarm_idx, uint32_t ticks) {
184
184
185
185
alarm .AlarmTime .SubSeconds = rtc_clock_frequency - 1 -
186
186
((raw_ticks % TICK_DIVISOR ) * 32 );
187
+ if (alarm .AlarmTime .SubSeconds > rtc_clock_frequency ) {
188
+ alarm .AlarmTime .SubSeconds = alarm .AlarmTime .SubSeconds +
189
+ rtc_clock_frequency ;
190
+ }
187
191
alarm .AlarmTime .DayLightSaving = RTC_DAYLIGHTSAVING_NONE ;
188
192
alarm .AlarmTime .StoreOperation = RTC_STOREOPERATION_SET ;
189
193
// Masking here means that the bits are ignored so we set none of them.
190
194
alarm .AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_NONE ;
191
195
alarm .AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE ;
192
196
alarm .Alarm = (alarm_idx == PERIPHERALS_ALARM_A ) ? RTC_ALARM_A : RTC_ALARM_B ;
193
-
194
197
HAL_RTC_SetAlarm_IT (& hrtc , & alarm , RTC_FORMAT_BIN );
195
198
HAL_NVIC_EnableIRQ (RTC_Alarm_IRQn );
196
199
alarmed_already [alarm_idx ] = false;
0 commit comments