From a5a4c6a5035bfd359c12b4d673e1fedffba40d8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E8=BF=9E=E9=92=8A?= Date: Wed, 16 Jan 2019 16:38:16 +0800 Subject: [PATCH] Update board.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化void rt_hw_us_delay(rt_uint32_t us) --- bsp/stm32f10x-HAL/drivers/board.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/bsp/stm32f10x-HAL/drivers/board.c b/bsp/stm32f10x-HAL/drivers/board.c index 5c7e44c4f8..6df16a2127 100644 --- a/bsp/stm32f10x-HAL/drivers/board.c +++ b/bsp/stm32f10x-HAL/drivers/board.c @@ -186,15 +186,12 @@ void rt_hw_board_init(void) */ void rt_hw_us_delay(rt_uint32_t us) { - rt_uint32_t delta; - us = us * (SysTick->LOAD / (1000000 / RT_TICK_PER_SECOND)); - delta = SysTick->VAL; - if (delta < us) - { - /* wait current OSTick left time gone */ - while (SysTick->VAL < us); - us -= delta; - delta = SysTick->LOAD; - } - while (delta - SysTick->VAL < us); + unsigned int start, now, delta, reload, us_tick; + start = SysTick->VAL; + reload = SysTick->LOAD; + us_tick = SystemCoreClock / 1000000UL; + do{ + now = SysTick->VAL; + delta = start > now ? start - now : reload + start - now; + } while(delta < us_tick * us); }