fix the tick of drv_common.c in stm32 bsp

This commit is contained in:
malongwei 2021-10-11 22:38:59 +08:00
parent 277bb736d7
commit 88133da8e5
1 changed files with 23 additions and 18 deletions

View File

@ -28,20 +28,19 @@ static void reboot(uint8_t argc, char **argv)
MSH_CMD_EXPORT(reboot, Reboot System); MSH_CMD_EXPORT(reboot, Reboot System);
#endif /* RT_USING_FINSH */ #endif /* RT_USING_FINSH */
extern __IO uint32_t uwTick;
static uint32_t sysTickMillisecond = 1;
/* SysTick configuration */ /* SysTick configuration */
void rt_hw_systick_init(void) void rt_hw_systick_init(void)
{ {
#if defined (SOC_SERIES_STM32H7) HAL_SYSTICK_Config(SystemCoreClock / RT_TICK_PER_SECOND);
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);
#else
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / RT_TICK_PER_SECOND);
#endif
#if !defined (SOC_SERIES_STM32MP1)
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
#endif
NVIC_SetPriority(SysTick_IRQn, 0xFF); NVIC_SetPriority(SysTick_IRQn, 0xFF);
sysTickMillisecond = 1000u / RT_TICK_PER_SECOND;
if(sysTickMillisecond == 0)
sysTickMillisecond = 1;
} }
/** /**
@ -53,7 +52,9 @@ void SysTick_Handler(void)
/* enter interrupt */ /* enter interrupt */
rt_interrupt_enter(); rt_interrupt_enter();
HAL_IncTick(); if(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)
HAL_IncTick();
rt_tick_increase(); rt_tick_increase();
/* leave interrupt */ /* leave interrupt */
@ -62,7 +63,15 @@ void SysTick_Handler(void)
uint32_t HAL_GetTick(void) uint32_t HAL_GetTick(void)
{ {
return rt_tick_get_millisecond(); if(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)
HAL_IncTick();
return uwTick;
}
void HAL_IncTick(void)
{
uwTick += sysTickMillisecond;
} }
void HAL_SuspendTick(void) void HAL_SuspendTick(void)
@ -91,6 +100,8 @@ void HAL_Delay(__IO uint32_t Delay)
/* re-implement tick interface for STM32 HAL */ /* re-implement tick interface for STM32 HAL */
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{ {
rt_hw_systick_init();
/* Return function status */ /* Return function status */
return HAL_OK; return HAL_OK;
} }
@ -163,14 +174,8 @@ RT_WEAK void rt_hw_board_init()
/* HAL_Init() function is called at the beginning of the program */ /* HAL_Init() function is called at the beginning of the program */
HAL_Init(); HAL_Init();
/* enable interrupt */
__set_PRIMASK(0);
/* System clock initialization */ /* System clock initialization */
SystemClock_Config(); SystemClock_Config();
/* disable interrupt */
__set_PRIMASK(1);
rt_hw_systick_init();
/* Heap initialization */ /* Heap initialization */
#if defined(RT_USING_HEAP) #if defined(RT_USING_HEAP)