Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@3:7b3edf54c706, 2015-02-18 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Feb 18 09:15:37 2015 +0000
- Revision:
- 3:7b3edf54c706
- Parent:
- 2:77ec44bf1fa5
- Child:
- 4:a9cebfe4715f
Only for L152RE, change Deep sleep mode to Standby mode to reduce backup current
Who changed what in which revision?
| User | Revision | Line number | New 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 | 3:7b3edf54c706 | 9 | * Revised: Feburary 18th, 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 | 2:77ec44bf1fa5 | 21 | // MUST -> need to modify rtc_api.c, please refer SetRTC.h file [CAUTION] 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 | 2:77ec44bf1fa5 | 69 | myled = !myled; |
| kenjiArai | 2:77ec44bf1fa5 | 70 | if (SetRTC() == OK) { |
| kenjiArai | 2:77ec44bf1fa5 | 71 | pc.printf("External"); |
| kenjiArai | 2:77ec44bf1fa5 | 72 | } else { |
| kenjiArai | 2:77ec44bf1fa5 | 73 | pc.printf("Internal"); |
| kenjiArai | 2:77ec44bf1fa5 | 74 | } |
| kenjiArai | 2:77ec44bf1fa5 | 75 | pc.printf(" Xtal for RTC\r\n"); |
| kenjiArai | 2:77ec44bf1fa5 | 76 | show_RTC_reg(); // only for debug purpose |
| kenjiArai | 0:0751c92c0f71 | 77 | // waiting for Initial screen |
| kenjiArai | 0:0751c92c0f71 | 78 | myled = 1; |
| kenjiArai | 0:0751c92c0f71 | 79 | wait(1.0); |
| kenjiArai | 0:0751c92c0f71 | 80 | myled = !myled; |
| kenjiArai | 0:0751c92c0f71 | 81 | wait(1.0); |
| kenjiArai | 0:0751c92c0f71 | 82 | while(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 | 2:77ec44bf1fa5 | 94 | --counter; |
| kenjiArai | 0:0751c92c0f71 | 95 | if (counter){ |
| kenjiArai | 0:0751c92c0f71 | 96 | // 012345678901234567890123456789012345678901234567890123456789012 |
| kenjiArai | 1:7a48c475bbd2 | 97 | pc.printf("Is time correct? If no, hit any key.\r"); |
| kenjiArai | 2:77ec44bf1fa5 | 98 | } |
| kenjiArai | 2:77ec44bf1fa5 | 99 | while (seconds == time(NULL)){ |
| kenjiArai | 0:0751c92c0f71 | 100 | if (pc.readable() == 1){ |
| kenjiArai | 0:0751c92c0f71 | 101 | buf[0] = pc.getc(); // dummy read |
| kenjiArai | 0:0751c92c0f71 | 102 | time_enter_mode(); |
| kenjiArai | 0:0751c92c0f71 | 103 | } |
| kenjiArai | 2:77ec44bf1fa5 | 104 | if (userSW == 0){ |
| kenjiArai | 0:0751c92c0f71 | 105 | #if defined(USE_LCD) |
| kenjiArai | 2:77ec44bf1fa5 | 106 | lcd.locate(0, 0); // 1st line top |
| kenjiArai | 2:77ec44bf1fa5 | 107 | // 12345678 |
| kenjiArai | 2:77ec44bf1fa5 | 108 | lcd.printf(" Enter "); |
| kenjiArai | 2:77ec44bf1fa5 | 109 | lcd.locate(0, 1); // 2nd line top |
| kenjiArai | 2:77ec44bf1fa5 | 110 | // 12345678 |
| kenjiArai | 2:77ec44bf1fa5 | 111 | lcd.printf(" Sleep " ); |
| kenjiArai | 0:0751c92c0f71 | 112 | #endif |
| kenjiArai | 3:7b3edf54c706 | 113 | // 123456789012345678901234567890123456789012345678 |
| kenjiArai | 3:7b3edf54c706 | 114 | pc.printf("\r\nEnter Standby Mode, please push RESET to wake-up\r\n"); |
| kenjiArai | 2:77ec44bf1fa5 | 115 | wait(1.0); |
| kenjiArai | 2:77ec44bf1fa5 | 116 | myled = 0; |
| kenjiArai | 3:7b3edf54c706 | 117 | goto_standby(); |
| kenjiArai | 2:77ec44bf1fa5 | 118 | } |
| kenjiArai | 0:0751c92c0f71 | 119 | } |
| kenjiArai | 2:77ec44bf1fa5 | 120 | if (counter){ |
| kenjiArai | 3:7b3edf54c706 | 121 | // 12345678901234567890123456789012345678901234567890 |
| kenjiArai | 3:7b3edf54c706 | 122 | pc.printf(" \r"); |
| kenjiArai | 2:77ec44bf1fa5 | 123 | } |
| kenjiArai | 2:77ec44bf1fa5 | 124 | myled = !myled; |
| kenjiArai | 0:0751c92c0f71 | 125 | } |
| kenjiArai | 0:0751c92c0f71 | 126 | } |