@@ -926,41 +926,43 @@ void STM32RTC::configForLowPower(Source_Clock source)
926
926
#ifdef __HAL_RCC_RTCAPB_CLKAM_ENABLE
927
927
__HAL_RCC_RTCAPB_CLKAM_ENABLE ();
928
928
#endif
929
- if (!RTC_IsConfigured ()) {
929
+
930
+ begin ();
931
+
932
+ if (_clockSource != source) {
933
+ // Save current config
934
+ AM_PM period, alarmPeriod = _alarmPeriod;
935
+ uint32_t subSeconds;
936
+ uint8_t seconds, minutes, hours, weekDay, day, month, years;
937
+ uint8_t alarmSeconds, alarmMinutes, alarmHours, alarmDay;
938
+ Alarm_Match alarmMatch = _alarmMatch;
939
+
940
+ alarmDay = _alarmDay;
941
+ alarmHours = _alarmHours;
942
+ alarmMinutes = _alarmMinutes;
943
+ alarmSeconds = _alarmSeconds;
944
+
945
+ getDate (&weekDay, &day, &month, &years);
946
+ getTime (&seconds, &minutes, &hours, &subSeconds, &period);
947
+
948
+ end ();
930
949
_clockSource = source;
931
950
// Enable RTC
932
- begin ();
933
- } else {
934
- if (_clockSource != source) {
935
- // Save current config
936
- AM_PM period, alarmPeriod = _alarmPeriod;
937
- uint32_t subSeconds;
938
- uint8_t seconds, minutes, hours, weekDay, day, month, years;
939
- uint8_t alarmSeconds, alarmMinutes, alarmHours, alarmDay;
940
- Alarm_Match alarmMatch = _alarmMatch;
941
-
942
- alarmDay = _alarmDay;
943
- alarmHours = _alarmHours;
944
- alarmMinutes = _alarmMinutes;
945
- alarmSeconds = _alarmSeconds;
946
-
947
- getDate (&weekDay, &day, &month, &years);
948
- getTime (&seconds, &minutes, &hours, &subSeconds, &period);
949
-
950
- end ();
951
- _clockSource = source;
952
- // Enable RTC
953
- begin (period);
954
- // Restore config
955
- setTime (seconds, minutes, hours, subSeconds, period);
956
- setDate (weekDay, day, month, years);
957
- setAlarmTime (alarmHours, alarmMinutes, alarmSeconds, alarmPeriod);
958
- setAlarmDay (alarmDay);
959
- if (RTC_IsAlarmSet ()) {
960
- enableAlarm (alarmMatch);
961
- }
951
+ begin (_format);
952
+ // Restore config
953
+ setTime (seconds, minutes, hours, subSeconds, period);
954
+ setDate (weekDay, day, month, years);
955
+ setAlarmTime (alarmHours, alarmMinutes, alarmSeconds, alarmPeriod);
956
+ setAlarmDay (alarmDay);
957
+ if (RTC_IsAlarmSet ()) {
958
+ enableAlarm (alarmMatch);
962
959
}
963
960
}
961
+
962
+ if (!isTimeSet ()) {
963
+ // Set arbitrary time for Lowpower; if not already set
964
+ setTime (12 , 0 , 0 , 0 , AM);
965
+ }
964
966
#endif
965
967
}
966
968
0 commit comments