HAL库中的延时函数
函数原型__weak void HAL_Delay(__IO uint32_t Delay)
{
uint32_t tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay)
{
}
}
注释中延时是ms。怎么算出来的。另外下面的系统滴答中断多长时间进入一次
void SysTick_Handler(void)
{
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
}
时钟/x,写入参数,x就是想要定时的时间 HAL_GetTick()每次可以获取一个ms(注意看注释或其源代码),然后与刚进HAL_Delay时的基准做对比,到达Delay后,退出,即完成延时。
SysTick_Handler的调用周期要在中断中才能查询到吧,这里只是一个向量处理函数,看不出时间频率。 :lol:lol:lol:lol:lol:lol:lol:lol:lol 看代码就晓得了,systick是1ms的Stm32xx_hal.c中HAL_InitTick中有写的 __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
/*Configure the SysTick to have interrupt in 1ms time basis*/
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
/*Configure the SysTick IRQ priority */
HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0);
/* Return function status */
return HAL_OK;
}
static __IO uint32_t uwTick;
__weak void HAL_IncTick(void)
{
uwTick++;
}
__weak uint32_t HAL_GetTick(void)
{
return uwTick;
}
__weak void HAL_Delay(__IO uint32_t Delay)
{
uint32_t tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay)
{
}
}
Paderboy 发表于 2015-5-30 17:10
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
谢谢,明白了 1ms的延时 HAL库里怎么实现微秒级的延时? 1ms 一次中断,每一次中断uwTick++;
页:
[1]