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/

Revision:
5:1a8e7aed053d
Parent:
2:765470eab2a6
Child:
6:ef7d2c83034d
--- a/SetRTC.cpp	Mon Feb 16 12:43:26 2015 +0000
+++ b/SetRTC.cpp	Wed Feb 18 09:14:28 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  16th, 2015
+ *      Revised:  Feburary  18th, 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
@@ -375,12 +375,12 @@
 }
 
 #if defined(TARGET_NUCLEO_L152RE)
-void deepsleep_preparation(void)
+void goto_standby(void)
 {
+    RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN |
+                    RCC_AHBENR_GPIODEN | RCC_AHBENR_GPIOHEN);
+#if 0
     GPIO_InitTypeDef GPIO_InitStruct;
-
-    RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN |
-                    RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIODEN | RCC_AHBENR_GPIOHEN);
     // All other ports are analog input mode
     GPIO_InitStruct.Pin = GPIO_PIN_All;
     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
@@ -392,16 +392,30 @@
     HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
     HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
     HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
-    RCC->AHBENR &= ~(RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN |
-                     RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIODEN | RCC_AHBENR_GPIOHEN);
+#else
+    GPIOA->MODER = 0xffffffff;
+    GPIOB->MODER = 0xffffffff;
+    GPIOC->MODER = 0xffffffff;
+    GPIOD->MODER = 0xffffffff;
+    GPIOE->MODER = 0xffffffff;
+    GPIOH->MODER = 0xffffffff;
+#endif
+    RCC->AHBENR &= ~(RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN |RCC_AHBENR_GPIOCEN |
+                     RCC_AHBENR_GPIODEN | RCC_AHBENR_GPIOHEN);
     while(1) {
+#if 0
+        // Stop mode
         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
+#else
+        // Standby mode
+        HAL_PWR_EnterSTANDBYMode();
+#endif
     }
 }
 #else
-void deepsleep_preparation(void)
+void goto_standby(void)
 {
-    ;   // No implementation
+    deepsleep();   // Not Standby Mode but Deep Sleep Mode
 }
 #endif
 
@@ -411,27 +425,27 @@
 void irq_comp2_handler(void)
 {
     __disable_irq();
-    deepsleep_preparation();
+    goto_standby();
 }
 
 COMP_HandleTypeDef COMP_HandleStruct;
 GPIO_InitTypeDef GPIO_InitStruct;
 
-void set_BOR_level2(void)
+// Set BOR level3 (2.54 to 2.74V)
+void set_BOR_level3(void)
 {
     FLASH_OBProgramInitTypeDef my_flash;
 
     HAL_FLASHEx_OBGetConfig(&my_flash); // read current configuration
-    if (my_flash.BORLevel != OB_BOR_LEVEL2) {
-        my_flash.BORLevel = OB_BOR_LEVEL2;
+    if (my_flash.BORLevel != OB_BOR_LEVEL3) {
+        my_flash.BORLevel = OB_BOR_LEVEL3;
         HAL_FLASHEx_OBProgram(&my_flash);
     }
 }
 
 void set_5v_drop_detect(void)
 {
-    // Set BOR level2 (2.30 to 2.49V)
-    set_BOR_level2();
+    set_BOR_level3();
     // Set Analog voltage input (PB5 or PB6)
 #if defined(USE_PB5_FOR_COMP)
     GPIO_InitStruct.Pin = GPIO_PIN_5; // PB5 comp input
@@ -456,12 +470,10 @@
     COMP_HandleStruct.Init.Output = COMP_OUTPUT_NONE;
     COMP_HandleStruct.Init.Mode = COMP_MODE_HIGHSPEED;
     COMP_HandleStruct.Init.WindowMode = COMP_WINDOWMODE_DISABLED;
-    //COMP_HandleStruct.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING;
     COMP_HandleStruct.Init.TriggerMode = COMP_TRIGGERMODE_IT_FALLING;
     HAL_COMP_Init(&COMP_HandleStruct);
     // Interrupt configuration
     NVIC_SetVector(COMP_IRQn, (uint32_t)irq_comp2_handler);
-//    HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
     HAL_NVIC_SetPriority(COMP_IRQn, 0, 0);
     HAL_NVIC_ClearPendingIRQ(COMP_IRQn);
     HAL_COMP_Start_IT(&COMP_HandleStruct);