From a27e9e3ca87d1c36fa8c0a59fa835cc5bd6f46d7 Mon Sep 17 00:00:00 2001 From: Vegetto Date: Fri, 12 Jun 2020 12:20:58 +0200 Subject: [PATCH 1/8] Use more efficient modes for STM32L4XX --- libraries/SrcWrapper/src/stm32/low_power.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index bb0de4af93..1fb991b2b9 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -223,12 +223,22 @@ void LowPower_stop(serial_t *obj) HAL_PWREx_EnableFastWakeUp(); #endif #ifdef __HAL_RCC_WAKEUPSTOP_CLK_CONFIG - /* Select HSI as system clock source after Wake Up from Stop mode */ - __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); + /* Select MSI or HSI as system clock source after Wake Up from Stop mode */ + #ifdef RCC_STOP_WAKEUPCLOCK_MSI + __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI); + #else + __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); + #endif #endif /* Enter Stop mode */ - HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + #if defined(STM32L4xx) + if (WakeUpUart == NULL) + // STM32L4xx supports STOP2 mode which halves consumption + HAL_PWREx_EnterSTOP2Mode(STOPEntry); + else + #endif + HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); /* Exit Stop mode reset clocks */ SystemClock_ConfigFromStop(); From c375611e05e83cc35a49b2144f4f9145abd8f8e5 Mon Sep 17 00:00:00 2001 From: Vegetto Date: Fri, 12 Jun 2020 12:22:16 +0200 Subject: [PATCH 2/8] Use PWR_STOPENTRY_WFI --- libraries/SrcWrapper/src/stm32/low_power.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index 1fb991b2b9..d56ee1c219 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -235,7 +235,7 @@ void LowPower_stop(serial_t *obj) #if defined(STM32L4xx) if (WakeUpUart == NULL) // STM32L4xx supports STOP2 mode which halves consumption - HAL_PWREx_EnterSTOP2Mode(STOPEntry); + HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); else #endif HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); From 0165b5f5abaf3707b6d2c38e593d0d21bdb365ec Mon Sep 17 00:00:00 2001 From: Vegetto Date: Fri, 12 Jun 2020 12:56:11 +0200 Subject: [PATCH 3/8] Fix style errors --- libraries/SrcWrapper/src/stm32/low_power.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index d56ee1c219..3bea38e646 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -224,20 +224,21 @@ void LowPower_stop(serial_t *obj) #endif #ifdef __HAL_RCC_WAKEUPSTOP_CLK_CONFIG /* Select MSI or HSI as system clock source after Wake Up from Stop mode */ - #ifdef RCC_STOP_WAKEUPCLOCK_MSI - __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI); - #else - __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); - #endif +#ifdef RCC_STOP_WAKEUPCLOCK_MSI + __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI); +#else + __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); +#endif #endif /* Enter Stop mode */ - #if defined(STM32L4xx) +#if defined(STM32L4xx) if (WakeUpUart == NULL) + { // STM32L4xx supports STOP2 mode which halves consumption HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); - else - #endif + } else +#endif HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); /* Exit Stop mode reset clocks */ From 41b7ceebea3f405504c092cb37c687c32492004c Mon Sep 17 00:00:00 2001 From: Vegetto Date: Fri, 12 Jun 2020 13:47:22 +0200 Subject: [PATCH 4/8] fix style --- libraries/SrcWrapper/src/stm32/low_power.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index 3bea38e646..2c4d163ce6 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -244,7 +244,8 @@ void LowPower_stop(serial_t *obj) /* Exit Stop mode reset clocks */ SystemClock_ConfigFromStop(); #if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY) - if (WakeUpUart != NULL) { + if (WakeUpUart != NULL) + { /* In case of WakeUp from UART, reset its clock source to HSI */ uart_config_lowpower(obj); HAL_UARTEx_DisableStopMode(WakeUpUart); From 22114a151a19569dfd7ad8838f795633708c87de Mon Sep 17 00:00:00 2001 From: Vegetto Date: Fri, 12 Jun 2020 14:01:08 +0200 Subject: [PATCH 5/8] fix style --- libraries/SrcWrapper/src/stm32/low_power.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index 2c4d163ce6..f2e039ec66 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -233,8 +233,7 @@ void LowPower_stop(serial_t *obj) /* Enter Stop mode */ #if defined(STM32L4xx) - if (WakeUpUart == NULL) - { + if (WakeUpUart == NULL) { // STM32L4xx supports STOP2 mode which halves consumption HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); } else From 32fce94391ed386de3a386bce5313731d8873a82 Mon Sep 17 00:00:00 2001 From: Vegetto Date: Fri, 12 Jun 2020 15:27:38 +0200 Subject: [PATCH 6/8] Fix style --- libraries/SrcWrapper/src/stm32/low_power.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index f2e039ec66..307112d2a4 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -232,7 +232,7 @@ void LowPower_stop(serial_t *obj) #endif /* Enter Stop mode */ -#if defined(STM32L4xx) +#if defined(STM32L4xx) if (WakeUpUart == NULL) { // STM32L4xx supports STOP2 mode which halves consumption HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); @@ -243,8 +243,7 @@ void LowPower_stop(serial_t *obj) /* Exit Stop mode reset clocks */ SystemClock_ConfigFromStop(); #if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY) - if (WakeUpUart != NULL) - { + if (WakeUpUart != NULL) { /* In case of WakeUp from UART, reset its clock source to HSI */ uart_config_lowpower(obj); HAL_UARTEx_DisableStopMode(WakeUpUart); From c4bbb646a1b3538e88888bfec2e99f9a6ac51f68 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 3 Jul 2020 17:12:02 +0200 Subject: [PATCH 7/8] Allows to use LPUART1 in STOP2 mode --- libraries/SrcWrapper/src/stm32/low_power.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index 307112d2a4..aac93a7814 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -233,12 +233,14 @@ void LowPower_stop(serial_t *obj) /* Enter Stop mode */ #if defined(STM32L4xx) - if (WakeUpUart == NULL) { + if ((WakeUpUart == NULL) || (WakeUpUart->Instance == (USART_TypeDef *)LPUART1_BASE)) { // STM32L4xx supports STOP2 mode which halves consumption HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); } else #endif - HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + { + HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + } /* Exit Stop mode reset clocks */ SystemClock_ConfigFromStop(); From a6bf021175de9859bba55dad10011ed51f38c0e0 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 3 Jul 2020 17:14:37 +0200 Subject: [PATCH 8/8] Fix astyle --- libraries/SrcWrapper/src/stm32/low_power.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/SrcWrapper/src/stm32/low_power.c b/libraries/SrcWrapper/src/stm32/low_power.c index aac93a7814..d353148551 100644 --- a/libraries/SrcWrapper/src/stm32/low_power.c +++ b/libraries/SrcWrapper/src/stm32/low_power.c @@ -239,7 +239,7 @@ void LowPower_stop(serial_t *obj) } else #endif { - HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); } /* Exit Stop mode reset clocks */