diff options
| author | tangweikang <[email protected]> | 2020-12-08 10:48:22 +0800 |
|---|---|---|
| committer | tangweikang <[email protected]> | 2020-12-08 14:36:38 +0800 |
| commit | f91089b57809543afe0b40257002efbe41f8c089 (patch) | |
| tree | eb0ea6dbb11e556df28a5ac7a8c2cbfa2a672eae /bsp/stm32 | |
| parent | 3f122bd790231ad097cc2346fa574a660eb294da (diff) | |
[BSP][STM32] update void HAL_Delay(__IO uint32_t Delay)
Diffstat (limited to 'bsp/stm32')
| -rw-r--r-- | bsp/stm32/libraries/HAL_Drivers/drv_common.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_common.c b/bsp/stm32/libraries/HAL_Drivers/drv_common.c index f150d81fef..bf7ed20e94 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_common.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_common.c @@ -30,7 +30,7 @@ void rt_hw_systick_init(void) #if defined (SOC_SERIES_STM32H7) HAL_SYSTICK_Config((HAL_RCCEx_GetD1SysClockFreq()) / RT_TICK_PER_SECOND); #elif defined (SOC_SERIES_STM32MP1) - HAL_SYSTICK_Config(HAL_RCC_GetSystemCoreClockFreq() / RT_TICK_PER_SECOND); + HAL_SYSTICK_Config(HAL_RCC_GetSystemCoreClockFreq() / RT_TICK_PER_SECOND); #else HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / RT_TICK_PER_SECOND); #endif @@ -71,7 +71,17 @@ void HAL_ResumeTick(void) void HAL_Delay(__IO uint32_t Delay) { - rt_thread_mdelay(Delay); + if (rt_thread_self()) + { + rt_thread_mdelay(Delay); + } + else + { + for (rt_uint32_t count = 0; count < Delay; count++) + { + rt_hw_us_delay(1000); + } + } } /* re-implement tick interface for STM32 HAL */ @@ -90,7 +100,7 @@ void _Error_Handler(char *s, int num) { /* USER CODE BEGIN Error_Handler */ /* User can add his own implementation to report the HAL error return state */ - while(1) + while (1) { } /* USER CODE END Error_Handler */ @@ -107,10 +117,12 @@ void rt_hw_us_delay(rt_uint32_t us) start = SysTick->VAL; reload = SysTick->LOAD; us_tick = SystemCoreClock / 1000000UL; - do { + do + { now = SysTick->VAL; - delta = start > now ? start - now : reload + start - now; - } while(delta < us_tick * us); + delta = start >= now ? start - now : reload + start - now; + } + while (delta < us_tick * us); } /** |
