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/
Diff: SetRTC.cpp
- Revision:
- 9:1af4e107ca7b
- Parent:
- 6:ef7d2c83034d
- Child:
- 10:16ee1c956319
diff -r ef7d2c83034d -r 1af4e107ca7b SetRTC.cpp --- a/SetRTC.cpp Thu Feb 19 02:56:12 2015 +0000 +++ b/SetRTC.cpp Sat May 23 21:07:12 2015 +0000 @@ -7,7 +7,7 @@ * http://www.page.sannet.ne.jp/kenjia/index.html * http://mbed.org/users/kenjiArai/ * Created: October 24th, 2014 - * Revised: Feburary 19th, 2015 + * Revised: May 24th, 2015 * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_L152RE) +#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) \ + || defined(TARGET_NUCLEO_L152RE) || defined(TARGET_NUCLEO_F334R8) //#define DEBUG // use Communication with PC(UART) @@ -109,7 +110,7 @@ timeout = HAL_GetTick() + TIMEOUT; PRINTF("Time-Out %d\r\n", timeout); // Wait till LSE is ready -#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) +#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)|| defined(TARGET_NUCLEO_F334R8) while((RCC->BDCR & 0x02) != 2){ #else while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) { @@ -159,7 +160,9 @@ } } // Connect LSI to RTC +#if !defined(TARGET_NUCLEO_F334R8) __HAL_RCC_RTC_CLKPRESCALER(RCC_RTCCLKSOURCE_LSI); +#endif __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSI); return 1; } @@ -176,7 +179,7 @@ HAL_PWR_EnableBkUpAccess(); // Check backup condition if ( check_RTC_backup_reg() ) { -#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) +#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F334R8) if ((RCC->BDCR & 0x8307) == 0x8103){ #else if ((RCC->CSR & 0x430703) == 0x410300) { @@ -204,7 +207,9 @@ // Enable LSE Oscillator if (set_RTC_LSE() == 1) { // Connect LSE to RTC +#if !defined(TARGET_NUCLEO_F334R8) __HAL_RCC_RTC_CLKPRESCALER(RCC_RTCCLKSOURCE_LSE); +#endif __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE); PRINTF("Set LSE/External\r\n"); return 1; @@ -252,9 +257,11 @@ pcr.printf( " ISR =0x...%05x, PRER =0x..%06x, WUTR =0x....%04x\r\n", RTC->ISR, RTC->PRER, RTC->WUTR ); +#if !defined(TARGET_NUCLEO_F334R8) pcr.printf( " CALIBR=0x....%04x, ALRMAR=0x%08x, ALRMBR=0x%08x\r\n", RTC->CALIBR, RTC->ALRMAR, RTC->ALRMBR ); +#endif pcr.printf( " WPR =0x......%02x, SSR =0x....%04x, SHIFTR=0x....%04x\r\n", RTC->WPR, RTC->SSR, RTC->SHIFTR @@ -264,7 +271,7 @@ RTC->TSTR, RTC->TSDR, RTC->TSSSR ); pcr.printf( "Show RCC registers (only RTC Related reg.)\r\n" ); -#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) +#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F334R8) pcr.printf( " RCC_BDCR=0x...%05x\r\n", RCC->BDCR); #else pcr.printf( " RCC_CSR =0x%08x\r\n", RCC->CSR); @@ -539,6 +546,6 @@ } #endif // defined(TARGET_NUCLEO_L152RE) -#else // defined(TARGET_NUCLEO_F401RE,TARGET_NUCLEO_F411RE,TARGET_NUCLEO_L152RE) +#else // defined(TARGET_NUCLEO_F401RE,_F411RE,_L152RE,_F334R8) #error "No suport this mbed, only for Nucleo mbed" -#endif // defined(TARGET_NUCLEO_F401RE,TARGET_NUCLEO_F411RE,TARGET_NUCLEO_L152RE) +#endif // defined(TARGET_NUCLEO_F401RE,_F411RE,_L152RE,_F334R8)