From 9db719bb57626d72ab84ab0ccd2294bf89158762 Mon Sep 17 00:00:00 2001 From: Dave Hylands Date: Thu, 13 Mar 2014 15:40:34 -0700 Subject: stmhal - More systick cleanup. Fix HAL_Delay --- stmhal/hal/src/stm32f4xx_hal.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'stmhal/hal/src') diff --git a/stmhal/hal/src/stm32f4xx_hal.c b/stmhal/hal/src/stm32f4xx_hal.c index 6df59f9f9..672422553 100644 --- a/stmhal/hal/src/stm32f4xx_hal.c +++ b/stmhal/hal/src/stm32f4xx_hal.c @@ -281,11 +281,13 @@ uint32_t HAL_GetTick(void) */ void HAL_Delay(__IO uint32_t Delay) { - uint32_t timingdelay; - - timingdelay = HAL_GetTick() + Delay; - while(HAL_GetTick() < timingdelay) - { + uint32_t start = HAL_GetTick(); + + // Note that the following works (due to the magic of 2's complement numbers) + // even when Delay causes wraparound. + + while (HAL_GetTick() - start <= Delay) { + __WFI(); // enter sleep mode, waiting for interrupt } } -- cgit v1.2.3