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)