In the past, you need modify rtc_api.c in mbed-dev source code. From this revision, you can just use RTC function all of conditions (Normal, Reset, Stand-by, Power OFF).

Note

From now on, you do NOT need any modification for mbed-dev library because STM team updates rtc_api.c source code and support RTC function under reset & standby condition includes power off condition (You need additional VBAT back-up hardware).

Please refer following NOTE information.
/users/kenjiArai/notebook/nucleo-series-rtc-control-under-power-onoff-and-re/

Committer:
kenjiArai
Date:
Mon Jan 11 07:55:27 2021 +0000
Revision:
13:c1f984932e98
Parent:
12:8cb1f89541d1
Child:
14:4b03106ece1f
add boards

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:0751c92c0f71 1 /*
kenjiArai 0:0751c92c0f71 2 * mbed Application program
kenjiArai 0:0751c92c0f71 3 * RTC (inside STM32x CPU) test program
kenjiArai 0:0751c92c0f71 4 *
kenjiArai 12:8cb1f89541d1 5 * Copyright (c) 2015,'16,'17,'20, '21 Kenji Arai / JH1PJL
kenjiArai 10:806cfec92eb6 6 * http://www7b.biglobe.ne.jp/~kenjia/
kenjiArai 10:806cfec92eb6 7 * https://os.mbed.com/users/kenjiArai/
kenjiArai 0:0751c92c0f71 8 * Created: January 17th, 2015
kenjiArai 13:c1f984932e98 9 * Revised: January 11th, 2021
kenjiArai 9:6a64b0207f72 10 */
kenjiArai 9:6a64b0207f72 11
kenjiArai 9:6a64b0207f72 12 /* mbed library now suports RTC continuous operation at Reset & Power ON/OFF
kenjiArai 9:6a64b0207f72 13 --------------------------------------------------------------------------
kenjiArai 9:6a64b0207f72 14 In the past, rtc_api.c (inside mbed) alway made a reset RTC registers
kenjiArai 9:6a64b0207f72 15 when user push a reset buttom or terninate a power.
kenjiArai 9:6a64b0207f72 16 Even if user configures a back-up circuit for RTC, mbed board could not
kenjiArai 9:6a64b0207f72 17 keep proper time.
kenjiArai 10:806cfec92eb6 18 --> Right now, you don't worry thoese issue.
kenjiArai 0:0751c92c0f71 19 */
kenjiArai 0:0751c92c0f71 20
kenjiArai 9:6a64b0207f72 21 /*
kenjiArai 9:6a64b0207f72 22 ----- Tested board -----
kenjiArai 9:6a64b0207f72 23 / Reset: / Stanby: / power off and restart:
kenjiArai 9:6a64b0207f72 24 Nucleo-F401RE / ok / ok / ok (need following Back-up Circuit)
kenjiArai 9:6a64b0207f72 25 Nucleo-F411RE / ok / ok / ok (need following Back-up Circuit)
kenjiArai 9:6a64b0207f72 26 Nucleo-F446RE / ok / ok / ok (need following Back-up Circuit)
kenjiArai 12:8cb1f89541d1 27 not support on Mbed-os6.6.0 Nucleo-F334R8
kenjiArai 9:6a64b0207f72 28 Nucleo-L476RG / ok / ok / ok (need following Back-up Circuit)
kenjiArai 10:806cfec92eb6 29 DISCO-L45VG-IOT/ ok / ok / ok (Need additional hardware)
kenjiArai 9:6a64b0207f72 30 Nucleo-L152RE / ok / ok / no check (Need additional hardware)
kenjiArai 9:6a64b0207f72 31 Nucleo-L073RZ / ok / ok / no check (Need additional hardware)
kenjiArai 12:8cb1f89541d1 32 not support on Mbed-os6.6.0 Nucleo-L053R8
kenjiArai 13:c1f984932e98 33
kenjiArai 13:c1f984932e98 34 ----- add tested board -----
kenjiArai 13:c1f984932e98 35 Nucleo-F446ZE
kenjiArai 13:c1f984932e98 36 DISCO-F746NG
kenjiArai 13:c1f984932e98 37 Nucleo-F746ZG
kenjiArai 13:c1f984932e98 38 DISCO-F769NI
kenjiArai 13:c1f984932e98 39 Nucleo-H743ZI2
kenjiArai 13:c1f984932e98 40 Nucleo-F303K8
kenjiArai 13:c1f984932e98 41 Nucleo-L432KC
kenjiArai 0:0751c92c0f71 42
kenjiArai 9:6a64b0207f72 43 < Back-up circuit >
kenjiArai 9:6a64b0207f72 44 CN7 VIN <- SBD <- 330 Ohm <- CR2032 + - -> CN7 GND
kenjiArai 9:6a64b0207f72 45 Remove SB45 Zero Ohm resistor
kenjiArai 11:2e514d955a2b 46
kenjiArai 10:806cfec92eb6 47 ----- PLEASE REFER FOLLOWS ----
kenjiArai 10:806cfec92eb6 48 https://os.mbed.com/users/kenjiArai/notebook/
kenjiArai 10:806cfec92eb6 49 nucleo-series-rtc-control-under-power-onoff-and-re/
kenjiArai 9:6a64b0207f72 50 */
kenjiArai 8:bf593344668e 51
kenjiArai 9:6a64b0207f72 52 // Include --------------------------------------------------------------------
kenjiArai 9:6a64b0207f72 53 #include "mbed.h"
kenjiArai 9:6a64b0207f72 54
kenjiArai 9:6a64b0207f72 55 // Definition -----------------------------------------------------------------
kenjiArai 13:c1f984932e98 56 #if defined(TARGET_DISCO_F746NG) \
kenjiArai 13:c1f984932e98 57 || defined(TARGET_NUCLEO_F746ZG) \
kenjiArai 13:c1f984932e98 58 || defined(TARGET_DISCO_F769NI) \
kenjiArai 13:c1f984932e98 59 || defined(TARGET_NUCLEO_F446ZE) \
kenjiArai 13:c1f984932e98 60 || defined(TARGET_NUCLEO_H743ZI2)
kenjiArai 8:bf593344668e 61 #define PUSHED_SW 1 // Active high
kenjiArai 13:c1f984932e98 62 #elif defined(TARGET_NUCLEO_F303K8) \
kenjiArai 13:c1f984932e98 63 || defined(TARGET_NUCLEO_L432KC)
kenjiArai 13:c1f984932e98 64 #define USER_BUTTON A0 // temporary setting
kenjiArai 13:c1f984932e98 65 #define PUSHED_SW 0 // Active low
kenjiArai 8:bf593344668e 66 #else
kenjiArai 8:bf593344668e 67 #define PUSHED_SW 0 // Active low
kenjiArai 1:7a48c475bbd2 68 #endif
kenjiArai 1:7a48c475bbd2 69
kenjiArai 10:806cfec92eb6 70 #define LONGLONGTIME 2147483647
kenjiArai 10:806cfec92eb6 71
kenjiArai 9:6a64b0207f72 72 // Object ---------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 73 DigitalIn userSW(USER_BUTTON);
kenjiArai 10:806cfec92eb6 74 DigitalOut myled(LED1); // Indicate the sampling period
kenjiArai 11:2e514d955a2b 75 // Create a BufferedSerial object to be used by the system I/O retarget code
kenjiArai 11:2e514d955a2b 76 static BufferedSerial pc(USBTX, USBRX, 9600);
kenjiArai 0:0751c92c0f71 77
kenjiArai 9:6a64b0207f72 78 // RAM ------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 79
kenjiArai 9:6a64b0207f72 80 // ROM / Constant data --------------------------------------------------------
kenjiArai 10:806cfec92eb6 81 const char *const msg0 = "Is a time correct? If no, please hit any key. ";
kenjiArai 10:806cfec92eb6 82 const char *const msg1 = "<Push USER SW then enter the Standby mode> ";
kenjiArai 0:0751c92c0f71 83
kenjiArai 9:6a64b0207f72 84 // Function prototypes --------------------------------------------------------
kenjiArai 11:2e514d955a2b 85 FileHandle *mbed::mbed_override_console(int fd);
kenjiArai 9:6a64b0207f72 86 static void time_enter_mode(void);
kenjiArai 9:6a64b0207f72 87 static void chk_and_set_time(char *ptr);
kenjiArai 10:806cfec92eb6 88 static int32_t xatoi (char **str, int32_t *res);
kenjiArai 10:806cfec92eb6 89 static void get_line (char *buff, int32_t len);
kenjiArai 10:806cfec92eb6 90 static void usr_sw_irq(void);
kenjiArai 10:806cfec92eb6 91 extern void print_revision(void);
kenjiArai 9:6a64b0207f72 92
kenjiArai 9:6a64b0207f72 93 //------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 94 // Control Program
kenjiArai 9:6a64b0207f72 95 //------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 96 int main()
kenjiArai 0:0751c92c0f71 97 {
kenjiArai 11:2e514d955a2b 98 char buf[64];
kenjiArai 0:0751c92c0f71 99 time_t seconds;
kenjiArai 4:a9cebfe4715f 100 uint8_t wait_counter = 0;
kenjiArai 0:0751c92c0f71 101
kenjiArai 11:2e514d955a2b 102 puts("\r\n\r\nTest Nucleo RTC Function.");
kenjiArai 10:806cfec92eb6 103 print_revision();
kenjiArai 2:77ec44bf1fa5 104 myled = !myled;
kenjiArai 10:806cfec92eb6 105 thread_sleep_for(500);
kenjiArai 0:0751c92c0f71 106 myled = !myled;
kenjiArai 10:806cfec92eb6 107 thread_sleep_for(500);
kenjiArai 10:806cfec92eb6 108 while(true) {
kenjiArai 0:0751c92c0f71 109 seconds = time(NULL);
kenjiArai 8:bf593344668e 110 strftime(buf, 50, " %B %d,'%y, %H:%M:%S\r\n", localtime(&seconds));
kenjiArai 11:2e514d955a2b 111 printf("[Time] %s", buf);
kenjiArai 11:2e514d955a2b 112 printf("%s", msg0);
kenjiArai 11:2e514d955a2b 113 printf("%s", msg1);
kenjiArai 11:2e514d955a2b 114 puts("\r");
kenjiArai 4:a9cebfe4715f 115 wait_counter = 0;
kenjiArai 11:2e514d955a2b 116 while (seconds == time(NULL)) {
kenjiArai 11:2e514d955a2b 117 if (pc.readable() == 1) {
kenjiArai 11:2e514d955a2b 118 pc.read(buf,1); // dummy read
kenjiArai 0:0751c92c0f71 119 time_enter_mode();
kenjiArai 0:0751c92c0f71 120 }
kenjiArai 11:2e514d955a2b 121 if (userSW == PUSHED_SW) { // goto sleep
kenjiArai 11:2e514d955a2b 122 while (userSW == PUSHED_SW) {
kenjiArai 10:806cfec92eb6 123 thread_sleep_for(10);
kenjiArai 10:806cfec92eb6 124 }
kenjiArai 10:806cfec92eb6 125 thread_sleep_for(10);
kenjiArai 11:2e514d955a2b 126 puts("Entered the standby mode. ");
kenjiArai 13:c1f984932e98 127 #if defined(TARGET_NUCLEO_F303K8) || defined(TARGET_NUCLEO_L432KC)
kenjiArai 13:c1f984932e98 128 puts("Please change A0 level for wake-up(Reset).");
kenjiArai 13:c1f984932e98 129 #else
kenjiArai 11:2e514d955a2b 130 puts("Please push USER BUTTON to wake-up(Reset).");
kenjiArai 13:c1f984932e98 131 #endif
kenjiArai 2:77ec44bf1fa5 132 myled = 0;
kenjiArai 13:c1f984932e98 133
kenjiArai 10:806cfec92eb6 134 InterruptIn usr_sw(USER_BUTTON);
kenjiArai 10:806cfec92eb6 135 thread_sleep_for(1000);
kenjiArai 10:806cfec92eb6 136 DigitalIn dmy0(LED1);
kenjiArai 10:806cfec92eb6 137 DigitalIn dmy1(USBTX);
kenjiArai 10:806cfec92eb6 138 DigitalIn dmy2(USBRX);
kenjiArai 13:c1f984932e98 139 usr_sw.fall(&usr_sw_irq); // actual push or chattering
kenjiArai 10:806cfec92eb6 140 thread_sleep_for(LONGLONGTIME);
kenjiArai 2:77ec44bf1fa5 141 }
kenjiArai 10:806cfec92eb6 142 thread_sleep_for(50);
kenjiArai 11:2e514d955a2b 143 if (++wait_counter > (2000 / 50)) {
kenjiArai 4:a9cebfe4715f 144 break;
kenjiArai 4:a9cebfe4715f 145 }
kenjiArai 0:0751c92c0f71 146 }
kenjiArai 11:2e514d955a2b 147 // delete previous strings
kenjiArai 11:2e514d955a2b 148 printf("\033[2A");
kenjiArai 11:2e514d955a2b 149 puts(""); // null
kenjiArai 8:bf593344668e 150 uint8_t n = strlen(msg0) + strlen(msg1);
kenjiArai 11:2e514d955a2b 151 memset(buf, ' ', 64);
kenjiArai 11:2e514d955a2b 152 if (n > 64) {
kenjiArai 11:2e514d955a2b 153 n -= 64;
kenjiArai 11:2e514d955a2b 154 pc.write(buf, 64);
kenjiArai 2:77ec44bf1fa5 155 }
kenjiArai 11:2e514d955a2b 156 if (n > 64) {
kenjiArai 11:2e514d955a2b 157 pc.write(buf, 64);
kenjiArai 11:2e514d955a2b 158 } else {
kenjiArai 11:2e514d955a2b 159 pc.write(buf, n);
kenjiArai 11:2e514d955a2b 160 }
kenjiArai 11:2e514d955a2b 161 printf("\033[G");
kenjiArai 2:77ec44bf1fa5 162 myled = !myled;
kenjiArai 0:0751c92c0f71 163 }
kenjiArai 0:0751c92c0f71 164 }
kenjiArai 9:6a64b0207f72 165
kenjiArai 11:2e514d955a2b 166 // the system I/O retarget
kenjiArai 11:2e514d955a2b 167 FileHandle *mbed::mbed_override_console(int fd)
kenjiArai 11:2e514d955a2b 168 {
kenjiArai 11:2e514d955a2b 169 return &pc;
kenjiArai 11:2e514d955a2b 170 }
kenjiArai 11:2e514d955a2b 171
kenjiArai 10:806cfec92eb6 172 // Interrupt for wake up
kenjiArai 10:806cfec92eb6 173 static void usr_sw_irq(void)
kenjiArai 10:806cfec92eb6 174 {
kenjiArai 10:806cfec92eb6 175 system_reset(); // restart from RESET condition
kenjiArai 10:806cfec92eb6 176 }
kenjiArai 10:806cfec92eb6 177
kenjiArai 10:806cfec92eb6 178 // Time adjustment
kenjiArai 10:806cfec92eb6 179 static void time_enter_mode(void)
kenjiArai 9:6a64b0207f72 180 {
kenjiArai 9:6a64b0207f72 181 char *ptr;
kenjiArai 9:6a64b0207f72 182 char linebuf[64];
kenjiArai 9:6a64b0207f72 183
kenjiArai 11:2e514d955a2b 184 puts("Set time into RTC.");
kenjiArai 12:8cb1f89541d1 185 puts(" e.g. >21 1 6 12 34 56 -> January 06,'21, 12:34:56");
kenjiArai 11:2e514d955a2b 186 puts(" If time is fine, just hit enter key.");
kenjiArai 11:2e514d955a2b 187 linebuf[0] = '>';
kenjiArai 11:2e514d955a2b 188 pc.write(linebuf, 1);
kenjiArai 9:6a64b0207f72 189 ptr = linebuf;
kenjiArai 9:6a64b0207f72 190 get_line(ptr, sizeof(linebuf));
kenjiArai 11:2e514d955a2b 191 puts("\r");
kenjiArai 9:6a64b0207f72 192 chk_and_set_time(ptr);
kenjiArai 9:6a64b0207f72 193 }
kenjiArai 9:6a64b0207f72 194
kenjiArai 10:806cfec92eb6 195 // Change string -> integer
kenjiArai 10:806cfec92eb6 196 static int32_t xatoi(char **str, int32_t *res)
kenjiArai 9:6a64b0207f72 197 {
kenjiArai 10:806cfec92eb6 198 uint32_t val;
kenjiArai 10:806cfec92eb6 199 uint8_t c, radix, s = 0;
kenjiArai 9:6a64b0207f72 200
kenjiArai 9:6a64b0207f72 201 while ((c = **str) == ' ') (*str)++;
kenjiArai 9:6a64b0207f72 202 if (c == '-') {
kenjiArai 9:6a64b0207f72 203 s = 1;
kenjiArai 9:6a64b0207f72 204 c = *(++(*str));
kenjiArai 9:6a64b0207f72 205 }
kenjiArai 9:6a64b0207f72 206 if (c == '0') {
kenjiArai 9:6a64b0207f72 207 c = *(++(*str));
kenjiArai 9:6a64b0207f72 208 if (c <= ' ') {
kenjiArai 9:6a64b0207f72 209 *res = 0;
kenjiArai 9:6a64b0207f72 210 return 1;
kenjiArai 9:6a64b0207f72 211 }
kenjiArai 9:6a64b0207f72 212 if (c == 'x') {
kenjiArai 9:6a64b0207f72 213 radix = 16;
kenjiArai 9:6a64b0207f72 214 c = *(++(*str));
kenjiArai 9:6a64b0207f72 215 } else {
kenjiArai 9:6a64b0207f72 216 if (c == 'b') {
kenjiArai 9:6a64b0207f72 217 radix = 2;
kenjiArai 9:6a64b0207f72 218 c = *(++(*str));
kenjiArai 9:6a64b0207f72 219 } else {
kenjiArai 9:6a64b0207f72 220 if ((c >= '0')&&(c <= '9')) {
kenjiArai 9:6a64b0207f72 221 radix = 8;
kenjiArai 9:6a64b0207f72 222 } else {
kenjiArai 9:6a64b0207f72 223 return 0;
kenjiArai 9:6a64b0207f72 224 }
kenjiArai 9:6a64b0207f72 225 }
kenjiArai 9:6a64b0207f72 226 }
kenjiArai 9:6a64b0207f72 227 } else {
kenjiArai 9:6a64b0207f72 228 if ((c < '1')||(c > '9')) {
kenjiArai 9:6a64b0207f72 229 return 0;
kenjiArai 9:6a64b0207f72 230 }
kenjiArai 9:6a64b0207f72 231 radix = 10;
kenjiArai 9:6a64b0207f72 232 }
kenjiArai 9:6a64b0207f72 233 val = 0;
kenjiArai 9:6a64b0207f72 234 while (c > ' ') {
kenjiArai 9:6a64b0207f72 235 if (c >= 'a') c -= 0x20;
kenjiArai 9:6a64b0207f72 236 c -= '0';
kenjiArai 9:6a64b0207f72 237 if (c >= 17) {
kenjiArai 9:6a64b0207f72 238 c -= 7;
kenjiArai 9:6a64b0207f72 239 if (c <= 9) return 0;
kenjiArai 9:6a64b0207f72 240 }
kenjiArai 9:6a64b0207f72 241 if (c >= radix) return 0;
kenjiArai 9:6a64b0207f72 242 val = val * radix + c;
kenjiArai 9:6a64b0207f72 243 c = *(++(*str));
kenjiArai 9:6a64b0207f72 244 }
kenjiArai 9:6a64b0207f72 245 if (s) val = -val;
kenjiArai 9:6a64b0207f72 246 *res = val;
kenjiArai 9:6a64b0207f72 247 return 1;
kenjiArai 9:6a64b0207f72 248 }
kenjiArai 9:6a64b0207f72 249
kenjiArai 9:6a64b0207f72 250 // Get key input data
kenjiArai 10:806cfec92eb6 251 static void get_line(char *buff, int32_t len)
kenjiArai 9:6a64b0207f72 252 {
kenjiArai 9:6a64b0207f72 253 char c;
kenjiArai 11:2e514d955a2b 254 char bf[8];
kenjiArai 10:806cfec92eb6 255 int32_t idx = 0;
kenjiArai 9:6a64b0207f72 256
kenjiArai 9:6a64b0207f72 257 for (;;) {
kenjiArai 11:2e514d955a2b 258 pc.read(bf, 1);
kenjiArai 11:2e514d955a2b 259 c = bf[0];
kenjiArai 11:2e514d955a2b 260 //printf("0x%x \r\n", c);
kenjiArai 9:6a64b0207f72 261 if (c == '\r') {
kenjiArai 9:6a64b0207f72 262 buff[idx++] = c;
kenjiArai 9:6a64b0207f72 263 break;
kenjiArai 9:6a64b0207f72 264 }
kenjiArai 9:6a64b0207f72 265 if ((c == '\b') && idx) {
kenjiArai 9:6a64b0207f72 266 idx--;
kenjiArai 11:2e514d955a2b 267 const char bf_bs[] =
kenjiArai 11:2e514d955a2b 268 {0x1b, '[', '1', 'D', ' ', 0x1b, '[', '1', 'D'};
kenjiArai 11:2e514d955a2b 269 pc.write(bf_bs, 9);
kenjiArai 9:6a64b0207f72 270 }
kenjiArai 9:6a64b0207f72 271 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 9:6a64b0207f72 272 buff[idx++] = c;
kenjiArai 11:2e514d955a2b 273 pc.write(bf, 1);
kenjiArai 9:6a64b0207f72 274 }
kenjiArai 9:6a64b0207f72 275 }
kenjiArai 9:6a64b0207f72 276 buff[idx] = 0;
kenjiArai 11:2e514d955a2b 277 bf[0] = '\n';
kenjiArai 11:2e514d955a2b 278 pc.write(bf, 1);
kenjiArai 9:6a64b0207f72 279 }
kenjiArai 9:6a64b0207f72 280
kenjiArai 10:806cfec92eb6 281 // Check key input strings and set time
kenjiArai 10:806cfec92eb6 282 static void chk_and_set_time(char *ptr)
kenjiArai 9:6a64b0207f72 283 {
kenjiArai 10:806cfec92eb6 284 int32_t p1;
kenjiArai 9:6a64b0207f72 285 struct tm t;
kenjiArai 9:6a64b0207f72 286 time_t seconds;
kenjiArai 9:6a64b0207f72 287
kenjiArai 9:6a64b0207f72 288 if (xatoi(&ptr, &p1)) {
kenjiArai 9:6a64b0207f72 289 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 11:2e514d955a2b 290 printf("Year:%d ",p1);
kenjiArai 9:6a64b0207f72 291 xatoi( &ptr, &p1 );
kenjiArai 9:6a64b0207f72 292 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 11:2e514d955a2b 293 printf("Month:%d ",p1);
kenjiArai 9:6a64b0207f72 294 xatoi( &ptr, &p1 );
kenjiArai 9:6a64b0207f72 295 t.tm_mday = (uint8_t)p1;
kenjiArai 11:2e514d955a2b 296 printf("Day:%d ",p1);
kenjiArai 9:6a64b0207f72 297 xatoi( &ptr, &p1 );
kenjiArai 9:6a64b0207f72 298 t.tm_hour = (uint8_t)p1;
kenjiArai 11:2e514d955a2b 299 printf("Hour:%d ",p1);
kenjiArai 9:6a64b0207f72 300 xatoi( &ptr, &p1 );
kenjiArai 9:6a64b0207f72 301 t.tm_min = (uint8_t)p1;
kenjiArai 11:2e514d955a2b 302 printf("Min:%d ",p1);
kenjiArai 9:6a64b0207f72 303 xatoi( &ptr, &p1 );
kenjiArai 9:6a64b0207f72 304 t.tm_sec = (uint8_t)p1;
kenjiArai 11:2e514d955a2b 305 printf("Sec: %d \r\n",p1);
kenjiArai 9:6a64b0207f72 306 } else {
kenjiArai 9:6a64b0207f72 307 return;
kenjiArai 9:6a64b0207f72 308 }
kenjiArai 9:6a64b0207f72 309 seconds = mktime(&t);
kenjiArai 9:6a64b0207f72 310 set_time(seconds);
kenjiArai 11:2e514d955a2b 311 // Show Time with several example
kenjiArai 9:6a64b0207f72 312 // ex.1
kenjiArai 11:2e514d955a2b 313 printf(
kenjiArai 9:6a64b0207f72 314 "Date: %04d/%02d/%02d, %02d:%02d:%02d\r\n",
kenjiArai 9:6a64b0207f72 315 t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec
kenjiArai 9:6a64b0207f72 316 );
kenjiArai 11:2e514d955a2b 317 char buf[64];
kenjiArai 9:6a64b0207f72 318 // ex.2
kenjiArai 9:6a64b0207f72 319 strftime(buf, 40, "%x %X", localtime(&seconds));
kenjiArai 11:2e514d955a2b 320 printf("Date: %s\r\n", buf);
kenjiArai 9:6a64b0207f72 321 // ex.3
kenjiArai 9:6a64b0207f72 322 strftime(buf, 40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 11:2e514d955a2b 323 printf("Date: %s\r\n", buf);
kenjiArai 9:6a64b0207f72 324 // ex.4
kenjiArai 9:6a64b0207f72 325 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 11:2e514d955a2b 326 printf("Date: %s\r\n", buf);
kenjiArai 9:6a64b0207f72 327 }