summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--stmhal/hal/f4/src/stm32f4xx_hal.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/stmhal/hal/f4/src/stm32f4xx_hal.c b/stmhal/hal/f4/src/stm32f4xx_hal.c
index d388dbf1c..c0965368e 100644
--- a/stmhal/hal/f4/src/stm32f4xx_hal.c
+++ b/stmhal/hal/f4/src/stm32f4xx_hal.c
@@ -337,11 +337,14 @@ __weak uint32_t HAL_GetTick(void)
*/
__weak void HAL_Delay(__IO uint32_t Delay)
{
- uint32_t tickstart = 0U;
- tickstart = HAL_GetTick();
- while((HAL_GetTick() - tickstart) < Delay)
- {
- }
+ 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
+ }
}
/**