18
18
STM32RTC& rtc = STM32RTC::getInstance();
19
19
20
20
/* 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
+ */
25
25
static const char * mydate = __DATE__;
26
26
static const char * mytime = __TIME__;
27
27
// static const char* mydate = "Dec 31 2017";
28
28
// static const char* mytime = "23:59:56";
29
29
30
30
/* 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
+ */
41
41
static int8_t userPredA = 99 ;
42
42
static int16_t userPredS = 9999 ;
43
43
@@ -55,16 +55,16 @@ static STM32RTC::Hour_Format hourFormat = STM32RTC::HOUR_24;
55
55
static STM32RTC::AM_PM period = STM32RTC::AM;
56
56
57
57
#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;
61
61
#endif
62
62
static STM32RTC::Alarm_Match DHHMMSS_MATCH = STM32RTC::MATCH_DHHMMSS;
63
63
64
64
void setup ()
65
65
{
66
66
Serial.begin (115200 );
67
- while (!Serial) {}
67
+ while (!Serial) {}
68
68
}
69
69
70
70
void loop ()
@@ -88,7 +88,7 @@ void loop()
88
88
Serial.println (" Invalid input" );
89
89
continue ;
90
90
}
91
- switch (c) {
91
+ switch (c) {
92
92
case ' 1' :
93
93
default :
94
94
Serial.println (" Test will use LSI_CLOCK" );
@@ -105,20 +105,19 @@ void loop()
105
105
}
106
106
break ;
107
107
}
108
-
109
108
Serial.println (" Testing asynchronous and synchronous prescaler setting" );
110
109
int8_t a;
111
110
int16_t s;
112
111
rtc.getPrediv (&a, &s);
113
112
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);
115
114
rtc_config (clkSource, rtc.HOUR_24 , mydate, mytime);
116
115
Serial.print (" Async/Sync for selected clock: " );
117
116
rtc.getPrediv (&a, &s);
118
- Serial.print (a); Serial. print ( ' / ' ); Serial. println ( s);
117
+ Serial.printf ( " %i/%i \n " , a, s);
119
118
rtc.end ();
120
119
121
- if (clkSource == rtc.HSE_CLOCK ) {
120
+ if (clkSource == rtc.HSE_CLOCK ) {
122
121
Serial.print (" User Async/Sync set to " );
123
122
Serial.print (userPredA);
124
123
Serial.print (" /" );
@@ -127,15 +126,15 @@ void loop()
127
126
rtc.setPrediv (userPredA, userPredS);
128
127
rtc_config (clkSource, rtc.HOUR_24 , mydate, mytime);
129
128
rtc.getPrediv (&a, &s);
130
- Serial.print (a); Serial. print ( ' / ' ); Serial. println ( s);
129
+ Serial.printf ( " %i/%i \n " , a, s);
131
130
printDateTime (10 , 1000 , false );
132
131
}
133
132
134
133
Serial.print (" User Async/Sync reset use the computed one: " );
135
134
rtc.setPrediv (-1 , -1 );
136
135
rtc_config (clkSource, rtc.HOUR_24 , mydate, mytime);
137
136
rtc.getPrediv (&a, &s);
138
- Serial.print (a); Serial. print ( ' / ' ); Serial. println ( s);
137
+ Serial.printf ( " %i/%i \n " , a, s);
139
138
140
139
// Check date change
141
140
Serial.println (" Testing date and time" );
@@ -158,22 +157,25 @@ void loop()
158
157
159
158
Serial.println (" Using Epoch API, set to Jan 1, 2016" );
160
159
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 ());
166
163
printDateTime (1 , 1000 , false );
167
164
}
168
165
169
166
Serial.println (" \n Testing alarm" );
170
167
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
175
176
176
177
#ifndef STM32F1xx
178
+ Serial.println (" \n Every minute" );
177
179
rtc.attachInterrupt (alarmMatch, (void *)&SS_MATCH);
178
180
rtc.setAlarmSeconds (alarmSeconds);
179
181
rtc.enableAlarm (rtc.MATCH_SS );
@@ -203,7 +205,11 @@ void loop()
203
205
Serial.println (" \n Every month" );
204
206
rtc_setTime (mydate, mytime);
205
207
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
206
211
rtc.setAlarmTime (alarmHours, alarmMinutes, alarmSeconds);
212
+ #endif
207
213
rtc.setAlarmDay (alarmDay);
208
214
rtc.enableAlarm (rtc.MATCH_DHHMMSS );
209
215
printDateTime (20 , 1000 , true );
@@ -219,33 +225,33 @@ void alarmMatch(void *data)
219
225
{
220
226
STM32RTC::Alarm_Match m = *(STM32RTC::Alarm_Match*)data;
221
227
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" );
248
255
break ;
249
256
}
250
- }
251
-
257
+ }
0 commit comments