From a227a9438c834032beb292a06a62b471eb487a02 Mon Sep 17 00:00:00 2001 From: Erwan GOURIOU Date: Wed, 13 Jul 2016 16:12:12 +0200 Subject: [PATCH] [STM32F1xx] Sleep API factorization In order to enable sleep API factorization, HAL_Suspend/ResumeTick functions have been implemented in hal_tick.c for each platform. --- .../TARGET_DISCO_F100RB/hal_tick.c | 15 +++++++++++++++ .../TARGET_NUCLEO_F103RB/hal_tick.c | 15 +++++++++++++++ .../hal/TARGET_STM/TARGET_STM32F1/sleep.c | 17 +++++------------ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/hal_tick.c b/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/hal_tick.c index f28b3c8260..e7dd5a8e3a 100644 --- a/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/hal_tick.c +++ b/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/hal_tick.c @@ -131,6 +131,21 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { return HAL_OK; } +void HAL_SuspendTick(void) +{ + TimMasterHandle.Instance = TIM_MST; + + // Disable HAL tick and us_ticker update interrupts (used for 32 bit counter) + __HAL_TIM_DISABLE_IT(&TimMasterHandle, (TIM_IT_CC2 | TIM_IT_UPDATE)); +} + +void HAL_ResumeTick(void) +{ + TimMasterHandle.Instance = TIM_MST; + + // Enable HAL tick and us_ticker update interrupts (used for 32 bit counter) + __HAL_TIM_ENABLE_IT(&TimMasterHandle, (TIM_IT_CC2 | TIM_IT_UPDATE)); +} /** * @} */ diff --git a/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/hal_tick.c b/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/hal_tick.c index 64d7340b42..05a2d19d23 100644 --- a/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/hal_tick.c +++ b/hal/targets/cmsis/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/hal_tick.c @@ -132,6 +132,21 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { return HAL_OK; } +void HAL_SuspendTick(void) +{ + TimMasterHandle.Instance = TIM_MST; + + // Disable HAL tick and us_ticker update interrupts (used for 32 bit counter) + __HAL_TIM_DISABLE_IT(&TimMasterHandle, (TIM_IT_CC2 | TIM_IT_UPDATE)); +} + +void HAL_ResumeTick(void) +{ + TimMasterHandle.Instance = TIM_MST; + + // Enable HAL tick and us_ticker update interrupts (used for 32 bit counter) + __HAL_TIM_ENABLE_IT(&TimMasterHandle, (TIM_IT_CC2 | TIM_IT_UPDATE)); +} /** * @} */ diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F1/sleep.c b/hal/targets/hal/TARGET_STM/TARGET_STM32F1/sleep.c index 6a96136eb8..eedcdb6784 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F1/sleep.c +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F1/sleep.c @@ -34,20 +34,13 @@ #include "cmsis.h" #include "hal_tick.h" -static TIM_HandleTypeDef TimMasterHandle; - -void sleep(void) -{ - TimMasterHandle.Instance = TIM_MST; - - // Disable HAL tick and us_ticker update interrupts - __HAL_TIM_DISABLE_IT(&TimMasterHandle, (TIM_IT_CC2 | TIM_IT_UPDATE)); - +void sleep(void) { + // Stop HAL systick + HAL_SuspendTick(); // Request to enter SLEEP mode HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); - - // Enable HAL tick and us_ticker update interrupts - __HAL_TIM_ENABLE_IT(&TimMasterHandle, (TIM_IT_CC2 | TIM_IT_UPDATE)); + // Restart HAL systick + HAL_ResumeTick(); } void deepsleep(void)