1818STM32RTC& rtc = STM32RTC::getInstance();
1919
2020/* Change these values to set the current initial time
21- *
22- * format: date: "Dec 31 2017" and time: "23:59:56"
23- * by default use built date and time
24- */
21+
22+ format: date: "Dec 31 2017" and time: "23:59:56"
23+ by default use built date and time
24+ */
2525static const char * mydate = __DATE__;
2626static const char * mytime = __TIME__;
2727// static const char* mydate = "Dec 31 2017";
2828// static const char* mytime = "23:59:56";
2929
3030/* Change these values to set user (a)synchronous prescalers
31- * value to test.
32- *
33- * Default 99/9999 are for RTCCLK = 1MHz
34- * Example for DISCO_F746NG with a HSE of 25MHz
35- * HSE divider will be 25 and RTCCLK will be 1MHz. (HSE/HSEdiv)
36- *
37- * To have a calendar clock of 1 Hz:
38- * clk = RTCCLK / ((predA +1) * (predS +1))
39- * clk = 1000000 / ((99 +1) * (9999+1)) = 1 Hz
40- */
31+ value to test.
32+
33+ Default 99/9999 are for RTCCLK = 1MHz
34+ Example for DISCO_F746NG with a HSE of 25MHz
35+ HSE divider will be 25 and RTCCLK will be 1MHz. (HSE/HSEdiv)
36+
37+ To have a calendar clock of 1 Hz:
38+ clk = RTCCLK / ((predA +1) * (predS +1))
39+ clk = 1000000 / ((99 +1) * (9999+1)) = 1 Hz
40+ */
4141static int8_t userPredA = 99 ;
4242static int16_t userPredS = 9999 ;
4343
@@ -55,16 +55,16 @@ static STM32RTC::Hour_Format hourFormat = STM32RTC::HOUR_24;
5555static STM32RTC::AM_PM period = STM32RTC::AM;
5656
5757#ifndef STM32F1xx
58- static STM32RTC::Alarm_Match SS_MATCH = STM32RTC::MATCH_SS;
59- static STM32RTC::Alarm_Match MMSS_MATCH = STM32RTC::MATCH_MMSS;
60- static STM32RTC::Alarm_Match HHMMSS_MATCH = STM32RTC::MATCH_HHMMSS;
58+ static STM32RTC::Alarm_Match SS_MATCH = STM32RTC::MATCH_SS;
59+ static STM32RTC::Alarm_Match MMSS_MATCH = STM32RTC::MATCH_MMSS;
60+ static STM32RTC::Alarm_Match HHMMSS_MATCH = STM32RTC::MATCH_HHMMSS;
6161#endif
6262static STM32RTC::Alarm_Match DHHMMSS_MATCH = STM32RTC::MATCH_DHHMMSS;
6363
6464void setup ()
6565{
6666 Serial.begin (115200 );
67- while (!Serial) {}
67+ while (!Serial) {}
6868}
6969
7070void loop ()
@@ -88,7 +88,7 @@ void loop()
8888 Serial.println (" Invalid input" );
8989 continue ;
9090 }
91- switch (c) {
91+ switch (c) {
9292 case ' 1' :
9393 default :
9494 Serial.println (" Test will use LSI_CLOCK" );
@@ -105,20 +105,19 @@ void loop()
105105 }
106106 break ;
107107 }
108-
109108 Serial.println (" Testing asynchronous and synchronous prescaler setting" );
110109 int8_t a;
111110 int16_t s;
112111 rtc.getPrediv (&a, &s);
113112 Serial.print (" Async/Sync for default LSI clock: " );
114- Serial.print (a); Serial. print ( ' / ' ); Serial. println ( s);
113+ Serial.printf ( " %i/%i \n " , a, s);
115114 rtc_config (clkSource, rtc.HOUR_24 , mydate, mytime);
116115 Serial.print (" Async/Sync for selected clock: " );
117116 rtc.getPrediv (&a, &s);
118- Serial.print (a); Serial. print ( ' / ' ); Serial. println ( s);
117+ Serial.printf ( " %i/%i \n " , a, s);
119118 rtc.end ();
120119
121- if (clkSource == rtc.HSE_CLOCK ) {
120+ if (clkSource == rtc.HSE_CLOCK ) {
122121 Serial.print (" User Async/Sync set to " );
123122 Serial.print (userPredA);
124123 Serial.print (" /" );
@@ -127,15 +126,15 @@ void loop()
127126 rtc.setPrediv (userPredA, userPredS);
128127 rtc_config (clkSource, rtc.HOUR_24 , mydate, mytime);
129128 rtc.getPrediv (&a, &s);
130- Serial.print (a); Serial. print ( ' / ' ); Serial. println ( s);
129+ Serial.printf ( " %i/%i \n " , a, s);
131130 printDateTime (10 , 1000 , false );
132131 }
133132
134133 Serial.print (" User Async/Sync reset use the computed one: " );
135134 rtc.setPrediv (-1 , -1 );
136135 rtc_config (clkSource, rtc.HOUR_24 , mydate, mytime);
137136 rtc.getPrediv (&a, &s);
138- Serial.print (a); Serial. print ( ' / ' ); Serial. println ( s);
137+ Serial.printf ( " %i/%i \n " , a, s);
139138
140139 // Check date change
141140 Serial.println (" Testing date and time" );
@@ -158,22 +157,25 @@ void loop()
158157
159158 Serial.println (" Using Epoch API, set to Jan 1, 2016" );
160159 rtc.setEpoch (1451606400 ); // Jan 1, 2016
161- for (uint32_t i=0 ; i<8 ; i++) {
162- Serial.print (" Unix time = " );
163- Serial.println (rtc.getEpoch ());
164- Serial.print (" Seconds since Jan 1 2000 = " );
165- Serial.println (rtc.getY2kEpoch ());
160+ for (uint32_t i = 0 ; i < 8 ; i++) {
161+ Serial.printf (" Unix time = %u\n " , rtc.getEpoch ());
162+ Serial.printf (" Seconds since Jan 1 2000 = %u\n " , rtc.getY2kEpoch ());
166163 printDateTime (1 , 1000 , false );
167164 }
168165
169166 Serial.println (" \n Testing alarm" );
170167 rtc_config (clkSource, rtc.HOUR_24 , mydate, mytime);
171- byte alarmSeconds = ((seconds+5 )<60 ) ? seconds+5 : 5 ;
172- byte alarmMinutes = ((seconds+5 )<60 ) ? minutes : ((minutes+1 )<60 ) ? minutes+1 : 0 ;
173- byte alarmHours = ((seconds+5 )<60 ) ? hours : ((minutes+1 )<60 ) ? hours : ((hours+1 )<24 ) ? hours+1 : 0 ;
174- byte alarmDay = (hours==alarmHours)? day: ((day+1 )<=31 ) ? day+1 : 1 ;
168+ byte alarmSeconds = ((seconds + 5 ) < 60 ) ? seconds + 5 : 5 ;
169+ byte alarmMinutes = ((seconds + 5 ) < 60 ) ? minutes : ((minutes + 1 ) < 60 ) ? minutes + 1 : 0 ;
170+ byte alarmHours = ((seconds + 5 ) < 60 ) ? hours : ((minutes + 1 ) < 60 ) ? hours : ((hours + 1 ) < 24 ) ? hours + 1 : 0 ;
171+ byte alarmDay = (hours == alarmHours) ? day : ((day + 1 ) <= 31 ) ? day + 1 : 1 ;
172+
173+ #if defined(STM32_RTC_VERSION) && (STM32_RTC_VERSION >= 0x01010000)
174+ rtc.setAlarmSubSeconds (123 );
175+ #endif
175176
176177#ifndef STM32F1xx
178+ Serial.println (" \n Every minute" );
177179 rtc.attachInterrupt (alarmMatch, (void *)&SS_MATCH);
178180 rtc.setAlarmSeconds (alarmSeconds);
179181 rtc.enableAlarm (rtc.MATCH_SS );
@@ -203,7 +205,11 @@ void loop()
203205 Serial.println (" \n Every month" );
204206 rtc_setTime (mydate, mytime);
205207 rtc.attachInterrupt (alarmMatch, (void *)&DHHMMSS_MATCH);
208+ #if defined(STM32_RTC_VERSION) && (STM32_RTC_VERSION >= 0x01010000)
209+ rtc.setAlarmTime (alarmHours, alarmMinutes, alarmSeconds, 123 );
210+ #else
206211 rtc.setAlarmTime (alarmHours, alarmMinutes, alarmSeconds);
212+ #endif
207213 rtc.setAlarmDay (alarmDay);
208214 rtc.enableAlarm (rtc.MATCH_DHHMMSS );
209215 printDateTime (20 , 1000 , true );
@@ -219,33 +225,33 @@ void alarmMatch(void *data)
219225{
220226 STM32RTC::Alarm_Match m = *(STM32RTC::Alarm_Match*)data;
221227
222- Serial.print (" Alarm Match " );
223- switch (m) {
224- case STM32RTC::MATCH_OFF:
225- Serial.println (" MATCH_OFF could not happen" );
226- break ;
227- case STM32RTC::MATCH_YYMMDDHHMMSS:// kept for compatibility
228- case STM32RTC::MATCH_MMDDHHMMSS: // kept for compatibility
229- case STM32RTC::MATCH_DHHMMSS:
230- Serial.println (" MATCH_DHHMMSS" );
231- rtc.setMonth (((rtc.getMonth ()+1 )<13 )? rtc.getMonth ()+1 : 1 );
232- rtc.setEpoch (rtc.getEpoch ()- 10 );
233- break ;
234- case STM32RTC::MATCH_HHMMSS:
235- Serial.println (" MATCH_HHMMSS" );
236- rtc.setEpoch (rtc.getEpoch ()+86395 );
237- break ;
238- case STM32RTC::MATCH_MMSS:
239- Serial.println (" MATCH_MMSS" );
240- rtc.setEpoch (rtc.getEpoch ()+3595 );
241- break ;
242- case STM32RTC::MATCH_SS:
243- Serial.println (" MATCH_SS" );
244- rtc.setEpoch (rtc.getEpoch ()+55 );
245- break ;
246- default :
247- Serial.println (" Unknown STM32RTC::Alarm_Match type" );
228+ Serial.print (" Alarm Match at " );
229+ printDateTime (1 , 0 , false );
230+ switch (m) {
231+ case STM32RTC::MATCH_OFF:
232+ Serial.println (" MATCH_OFF could not happen" );
233+ break ;
234+ case STM32RTC::MATCH_YYMMDDHHMMSS:// kept for compatibility
235+ case STM32RTC::MATCH_MMDDHHMMSS: // kept for compatibility
236+ case STM32RTC::MATCH_DHHMMSS:
237+ Serial.println (" MATCH_DHHMMSS" );
238+ rtc.setMonth (((rtc.getMonth () + 1 ) < 13 ) ? rtc.getMonth () + 1 : 1 );
239+ rtc.setEpoch (rtc.getEpoch () - 10 );
240+ break ;
241+ case STM32RTC::MATCH_HHMMSS:
242+ Serial.println (" MATCH_HHMMSS" );
243+ rtc.setEpoch (rtc.getEpoch () + 86395 );
244+ break ;
245+ case STM32RTC::MATCH_MMSS:
246+ Serial.println (" MATCH_MMSS" );
247+ rtc.setEpoch (rtc.getEpoch () + 3595 );
248+ break ;
249+ case STM32RTC::MATCH_SS:
250+ Serial.println (" MATCH_SS" );
251+ rtc.setEpoch (rtc.getEpoch () + 55 );
252+ break ;
253+ default :
254+ Serial.println (" Unknown STM32RTC::Alarm_Match type" );
248255 break ;
249256 }
250- }
251-
257+ }
0 commit comments