summaryrefslogtreecommitdiff
path: root/bsp/stm32/libraries
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-12-30 08:09:49 +0800
committerGitHub <[email protected]>2020-12-30 08:09:49 +0800
commitb2a6dbadf43c023128dc6b310afd562f0de0ff10 (patch)
treef66fe4658eefe52438689e85049c8f4e1c5eefbb /bsp/stm32/libraries
parentce034e6762cf56f0cd29c2e438c8306719e7367a (diff)
parentf91089b57809543afe0b40257002efbe41f8c089 (diff)
Merge pull request #4135 from balanceTWK/master_hal_delay
[BSP][STM32] update void HAL_Delay(__IO uint32_t Delay)
Diffstat (limited to 'bsp/stm32/libraries')
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_common.c24
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);
}
/**