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:
Sat Feb 14 11:35:34 2015 +0000
Revision:
1:7a48c475bbd2
Parent:
0:0751c92c0f71
Child:
2:77ec44bf1fa5
support L152 mbed. Need to modify rtc_api.c in mbed-src.

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 0:0751c92c0f71 5 * Copyright (c) 2015 Kenji Arai / JH1PJL
kenjiArai 0:0751c92c0f71 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:0751c92c0f71 7 * http://mbed.org/users/kenjiArai/
kenjiArai 0:0751c92c0f71 8 * Created: January 17th, 2015
kenjiArai 1:7a48c475bbd2 9 * Revised: Feburary 14th, 2015
kenjiArai 0:0751c92c0f71 10 *
kenjiArai 0:0751c92c0f71 11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:0751c92c0f71 12 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:0751c92c0f71 13 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:0751c92c0f71 14 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:0751c92c0f71 15 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:0751c92c0f71 16 */
kenjiArai 0:0751c92c0f71 17
kenjiArai 0:0751c92c0f71 18 // Include ---------------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 19 #include "mbed.h"
kenjiArai 0:0751c92c0f71 20 #include "TextLCD.h"
kenjiArai 1:7a48c475bbd2 21 // MUST -> need to modify rtc_api.c, please refer SetRTC.h file [CATION] and modify_info_xxx.h
kenjiArai 0:0751c92c0f71 22 #include "SetRTC.h"
kenjiArai 0:0751c92c0f71 23
kenjiArai 0:0751c92c0f71 24 // Definition ------------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 25 #define SHOW_KEY_PROMPT 30
kenjiArai 0:0751c92c0f71 26
kenjiArai 0:0751c92c0f71 27 #define USE_LCD
kenjiArai 0:0751c92c0f71 28
kenjiArai 1:7a48c475bbd2 29 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_L152RE)
kenjiArai 1:7a48c475bbd2 30 #else
kenjiArai 1:7a48c475bbd2 31 #error "Target is only Nucleo F401RE, F411RE and L152RE"
kenjiArai 1:7a48c475bbd2 32 #endif
kenjiArai 1:7a48c475bbd2 33
kenjiArai 0:0751c92c0f71 34 // Object ----------------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 35 DigitalIn userSW(USER_BUTTON);
kenjiArai 0:0751c92c0f71 36 DigitalOut myled(LED1); // Indicate the sampling period
kenjiArai 0:0751c92c0f71 37 Serial pc(USBTX, USBRX);
kenjiArai 0:0751c92c0f71 38 #if defined(USE_LCD)
kenjiArai 0:0751c92c0f71 39 I2C i2c(D14,D15); // SDA, SCL
kenjiArai 0:0751c92c0f71 40 TextLCD_I2C_N lcd(&i2c, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A)
kenjiArai 0:0751c92c0f71 41 #endif
kenjiArai 0:0751c92c0f71 42
kenjiArai 0:0751c92c0f71 43 // RAM -------------------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 44
kenjiArai 0:0751c92c0f71 45 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 46
kenjiArai 0:0751c92c0f71 47 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 48
kenjiArai 0:0751c92c0f71 49 //-------------------------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 50 // Control Program
kenjiArai 0:0751c92c0f71 51 //-------------------------------------------------------------------------------------------------
kenjiArai 0:0751c92c0f71 52 int main()
kenjiArai 0:0751c92c0f71 53 {
kenjiArai 0:0751c92c0f71 54 char buf[42]; // data buffer for text
kenjiArai 0:0751c92c0f71 55 time_t seconds;
kenjiArai 0:0751c92c0f71 56 uint8_t counter = SHOW_KEY_PROMPT;
kenjiArai 0:0751c92c0f71 57
kenjiArai 0:0751c92c0f71 58 #if defined(USE_LCD)
kenjiArai 0:0751c92c0f71 59 // lcd
kenjiArai 0:0751c92c0f71 60 lcd.locate(0, 0); // 1st line top
kenjiArai 0:0751c92c0f71 61 // 12345678
kenjiArai 0:0751c92c0f71 62 lcd.printf(" RTC ");
kenjiArai 0:0751c92c0f71 63 lcd.locate(0, 1); // 2nd line top
kenjiArai 0:0751c92c0f71 64 // 12345678
kenjiArai 0:0751c92c0f71 65 lcd.puts(" JH1PJL ");
kenjiArai 0:0751c92c0f71 66 lcd.setContrast(0x14);
kenjiArai 0:0751c92c0f71 67 #endif
kenjiArai 0:0751c92c0f71 68 pc.printf("\r\n\r\nTest Nucleo RTC Function\r\n");
kenjiArai 0:0751c92c0f71 69 // waiting for Initial screen
kenjiArai 0:0751c92c0f71 70 myled = 1;
kenjiArai 0:0751c92c0f71 71 wait(1.0);
kenjiArai 0:0751c92c0f71 72 myled = !myled;
kenjiArai 0:0751c92c0f71 73 wait(1.0);
kenjiArai 0:0751c92c0f71 74 myled = !myled;
kenjiArai 0:0751c92c0f71 75 if (SetRTC() == OK) {
kenjiArai 0:0751c92c0f71 76 pc.printf("External Xtal for RTC\r\n");
kenjiArai 0:0751c92c0f71 77 } else {
kenjiArai 0:0751c92c0f71 78 pc.printf("Internal Xtal for RTC\r\n");
kenjiArai 0:0751c92c0f71 79 }
kenjiArai 0:0751c92c0f71 80 show_RTC_reg(); // only for debug purpose
kenjiArai 0:0751c92c0f71 81 while(1) {
kenjiArai 1:7a48c475bbd2 82 myled = 1;
kenjiArai 0:0751c92c0f71 83 seconds = time(NULL);
kenjiArai 0:0751c92c0f71 84 strftime(buf, 40, " %B %d,'%y, %H:%M:%S\r\n", localtime(&seconds));
kenjiArai 0:0751c92c0f71 85 pc.printf("[Time] %s", buf);
kenjiArai 0:0751c92c0f71 86 #if defined(USE_LCD)
kenjiArai 0:0751c92c0f71 87 lcd.locate(0, 0); // 1st line top
kenjiArai 0:0751c92c0f71 88 strftime(buf, 40, "%b%d'%y", localtime(&seconds));
kenjiArai 0:0751c92c0f71 89 lcd.printf(buf);
kenjiArai 0:0751c92c0f71 90 lcd.locate(0, 1); // 2nd line top
kenjiArai 0:0751c92c0f71 91 strftime(buf, 10, "%H:%M:%S", localtime(&seconds));
kenjiArai 0:0751c92c0f71 92 lcd.printf(buf);
kenjiArai 0:0751c92c0f71 93 #endif
kenjiArai 0:0751c92c0f71 94 if (counter){
kenjiArai 0:0751c92c0f71 95 --counter;
kenjiArai 0:0751c92c0f71 96 // 012345678901234567890123456789012345678901234567890123456789012
kenjiArai 1:7a48c475bbd2 97 pc.printf("Is time correct? If no, hit any key.\r");
kenjiArai 0:0751c92c0f71 98 wait(1.0);
kenjiArai 0:0751c92c0f71 99 if (pc.readable() == 1){
kenjiArai 0:0751c92c0f71 100 buf[0] = pc.getc(); // dummy read
kenjiArai 0:0751c92c0f71 101 time_enter_mode();
kenjiArai 0:0751c92c0f71 102 counter = SHOW_KEY_PROMPT;
kenjiArai 0:0751c92c0f71 103 }
kenjiArai 0:0751c92c0f71 104 pc.printf(" \r");
kenjiArai 0:0751c92c0f71 105 } else {
kenjiArai 0:0751c92c0f71 106 wait(1.0);
kenjiArai 0:0751c92c0f71 107 }
kenjiArai 0:0751c92c0f71 108 if (userSW == 0){
kenjiArai 0:0751c92c0f71 109 #if defined(USE_LCD)
kenjiArai 0:0751c92c0f71 110 lcd.locate(0, 0); // 1st line top
kenjiArai 0:0751c92c0f71 111 // 12345678
kenjiArai 0:0751c92c0f71 112 lcd.printf(" Enter ");
kenjiArai 0:0751c92c0f71 113 lcd.locate(0, 1); // 2nd line top
kenjiArai 0:0751c92c0f71 114 // 12345678
kenjiArai 0:0751c92c0f71 115 lcd.printf(" Sleep " );
kenjiArai 0:0751c92c0f71 116 #endif
kenjiArai 0:0751c92c0f71 117 pc.printf("\r\nEnter Deep Sleep Mode, please push RESET to wake-up\r\n");
kenjiArai 0:0751c92c0f71 118 wait(1.0);
kenjiArai 1:7a48c475bbd2 119 myled = 0;
kenjiArai 1:7a48c475bbd2 120 deepsleep_preparation();
kenjiArai 0:0751c92c0f71 121 deepsleep();
kenjiArai 0:0751c92c0f71 122 }
kenjiArai 0:0751c92c0f71 123 }
kenjiArai 0:0751c92c0f71 124 }