This is a RTC additional function. This is only for Nucleo F401RE & F411RE mbed(Added L152RE, F334R8, L476RG & F746xx). If you connected battery backup circuit for internal RTC, you can make a power-off and reset condition. RTC still has proper time and date.
Dependents: Nucleo_rtos_sample PB_Emma_Ethernet
Please refer following NOTE information.
/users/kenjiArai/notebook/nucleo-series-rtc-control-under-power-onoff-and-re/
SetRTC.h@14:78e453d7bb85, 2016-07-02 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Jul 02 03:00:33 2016 +0000
- Revision:
- 14:78e453d7bb85
- Parent:
- 13:44e5327acb05
Added F746xx and modified main.c
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:e4c20fd769f1 | 1 | /* |
kenjiArai | 0:e4c20fd769f1 | 2 | * mbed Library program |
kenjiArai | 0:e4c20fd769f1 | 3 | * Check & set RTC function and set proper clock if we can set |
kenjiArai | 0:e4c20fd769f1 | 4 | * ONLY FOR "Nucleo Board" |
kenjiArai | 0:e4c20fd769f1 | 5 | * |
kenjiArai | 13:44e5327acb05 | 6 | * Copyright (c) 2014,'15,'16 Kenji Arai / JH1PJL |
kenjiArai | 0:e4c20fd769f1 | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:e4c20fd769f1 | 8 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 13:44e5327acb05 | 9 | * Created: October 24th, 2014 |
kenjiArai | 13:44e5327acb05 | 10 | * Revised: May 28th, 2016 |
kenjiArai | 0:e4c20fd769f1 | 11 | * |
kenjiArai | 0:e4c20fd769f1 | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 0:e4c20fd769f1 | 13 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 0:e4c20fd769f1 | 14 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 0:e4c20fd769f1 | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 0:e4c20fd769f1 | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 0:e4c20fd769f1 | 17 | */ |
kenjiArai | 0:e4c20fd769f1 | 18 | |
kenjiArai | 2:765470eab2a6 | 19 | /* |
kenjiArai | 13:44e5327acb05 | 20 | * CAUTION! You need to modify "rtc_api.c" file in the mbed-dev library. |
kenjiArai | 13:44e5327acb05 | 21 | * Please refer "modify_info_xxx.h" file and/or following my notebook. |
kenjiArai | 2:765470eab2a6 | 22 | * http://developer.mbed.org/users/kenjiArai/notebook/ |
kenjiArai | 2:765470eab2a6 | 23 | * nucleo-series-rtc-control-under-power-onoff-and-re/ |
kenjiArai | 2:765470eab2a6 | 24 | */ |
kenjiArai | 2:765470eab2a6 | 25 | |
kenjiArai | 0:e4c20fd769f1 | 26 | #ifndef SET_RTC_H |
kenjiArai | 0:e4c20fd769f1 | 27 | #define SET_RTC_H |
kenjiArai | 0:e4c20fd769f1 | 28 | |
kenjiArai | 0:e4c20fd769f1 | 29 | #include "mbed.h" |
kenjiArai | 0:e4c20fd769f1 | 30 | |
kenjiArai | 13:44e5327acb05 | 31 | #if defined(TARGET_STM32L152RE) |
kenjiArai | 2:765470eab2a6 | 32 | #define USE_IRQ_FOR_RTC_BKUP // Use interrupt for enter RTC backup mode |
kenjiArai | 2:765470eab2a6 | 33 | #define USE_PB5_FOR_COMP // Use PB5 port for low voltage detection (+5V line) |
kenjiArai | 2:765470eab2a6 | 34 | //#define USE_PB6_FOR_COMP // Use PB6 port for low voltage detection (+5V line) |
kenjiArai | 2:765470eab2a6 | 35 | #endif |
kenjiArai | 2:765470eab2a6 | 36 | |
kenjiArai | 0:e4c20fd769f1 | 37 | #define TIMEOUT ((uint32_t)5000) |
kenjiArai | 0:e4c20fd769f1 | 38 | #define RTC_DAT0 0x55aa55aa |
kenjiArai | 0:e4c20fd769f1 | 39 | #define RTC_DAT1 0xaa55aa55 |
kenjiArai | 0:e4c20fd769f1 | 40 | |
kenjiArai | 0:e4c20fd769f1 | 41 | /** Check and set RTC module inside Nucleo STM32X CPU. |
kenjiArai | 0:e4c20fd769f1 | 42 | * Latest Nucleo board has external LSE Crystal X2 but no proper setting both HW ans SW. |
kenjiArai | 0:e4c20fd769f1 | 43 | * In addition, every power on and/or reset make initial condition even HW Backup condition. |
kenjiArai | 0:e4c20fd769f1 | 44 | * This is cased by mbed initial subroutine problem. |
kenjiArai | 0:e4c20fd769f1 | 45 | * This program intends to use RTC with X2 and works well with battery back-up hardware setting. |
kenjiArai | 0:e4c20fd769f1 | 46 | * |
kenjiArai | 2:765470eab2a6 | 47 | * |
kenjiArai | 0:e4c20fd769f1 | 48 | * @code |
kenjiArai | 0:e4c20fd769f1 | 49 | * #include "mbed.h" |
kenjiArai | 0:e4c20fd769f1 | 50 | * #include "SetRTC.h" |
kenjiArai | 0:e4c20fd769f1 | 51 | * |
kenjiArai | 0:e4c20fd769f1 | 52 | * int main() { |
kenjiArai | 0:e4c20fd769f1 | 53 | * time_t seconds; |
kenjiArai | 0:e4c20fd769f1 | 54 | * |
kenjiArai | 7:fa32602e23ec | 55 | * if (SetRTC(0) == 1) { // No use COMP(PB5 or 6) (only L152RE) |
kenjiArai | 7:fa32602e23ec | 56 | * PRINTF("Use External CLK (Good for RTC)\r\n"); |
kenjiArai | 7:fa32602e23ec | 57 | * } else { |
kenjiArai | 7:fa32602e23ec | 58 | * PRINTF("Use Internal CLK (Bad for RTC)\r\n"); |
kenjiArai | 7:fa32602e23ec | 59 | * } |
kenjiArai | 0:e4c20fd769f1 | 60 | * printf("Time: %s", ctime(&seconds)); |
kenjiArai | 0:e4c20fd769f1 | 61 | * } |
kenjiArai | 0:e4c20fd769f1 | 62 | * @endcode |
kenjiArai | 0:e4c20fd769f1 | 63 | */ |
kenjiArai | 0:e4c20fd769f1 | 64 | |
kenjiArai | 0:e4c20fd769f1 | 65 | /** Check and Set RTC |
kenjiArai | 7:fa32602e23ec | 66 | * @param use_comparator = 1 Use COMP(only for L152 PB5 or 6 set-up), =0 no HW modification |
kenjiArai | 6:ef7d2c83034d | 67 | * @return if proper setting = 1, if not = 0 |
kenjiArai | 0:e4c20fd769f1 | 68 | */ |
kenjiArai | 7:fa32602e23ec | 69 | int32_t SetRTC(uint8_t use_comparator); |
kenjiArai | 0:e4c20fd769f1 | 70 | |
kenjiArai | 2:765470eab2a6 | 71 | /** Show(print) RTC related registers |
kenjiArai | 2:765470eab2a6 | 72 | * @param none |
kenjiArai | 2:765470eab2a6 | 73 | * @return none |
kenjiArai | 2:765470eab2a6 | 74 | */ |
kenjiArai | 0:e4c20fd769f1 | 75 | void show_RTC_reg( void ); |
kenjiArai | 0:e4c20fd769f1 | 76 | |
kenjiArai | 2:765470eab2a6 | 77 | /** Enter RTC initial data from PC Vertual Com |
kenjiArai | 2:765470eab2a6 | 78 | * @param none |
kenjiArai | 2:765470eab2a6 | 79 | * @return none |
kenjiArai | 2:765470eab2a6 | 80 | */ |
kenjiArai | 0:e4c20fd769f1 | 81 | void time_enter_mode(void); |
kenjiArai | 0:e4c20fd769f1 | 82 | |
kenjiArai | 5:1a8e7aed053d | 83 | /** Go to Standbay Mode (Set I/O port and other peripheral low power condition) |
kenjiArai | 2:765470eab2a6 | 84 | * @param none |
kenjiArai | 2:765470eab2a6 | 85 | * @return none |
kenjiArai | 2:765470eab2a6 | 86 | */ |
kenjiArai | 5:1a8e7aed053d | 87 | void goto_standby(void); |
kenjiArai | 2:765470eab2a6 | 88 | |
kenjiArai | 0:e4c20fd769f1 | 89 | #endif // SET_RTC_H |