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:
- 5:1a8e7aed053d
- Parent:
- 2:765470eab2a6
- Child:
- 6:ef7d2c83034d
diff -r 1c1012abfe32 -r 1a8e7aed053d SetRTC.cpp --- 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);