你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HAL库中的延时函数

[复制链接]
wamcncn 提问时间:2015-5-30 15:27 /
函数原型
__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();
}
收藏 评论9 发布时间:2015-5-30 15:27

举报

9个回答
你好我好大家好! 回答时间:2015-5-30 16:19:25
时钟/x,写入参数,x就是想要定时的时间
moyanming2013 回答时间:2015-5-30 16:20:54
HAL_GetTick()每次可以获取一个ms(注意看注释或其源代码),然后与刚进HAL_Delay时的基准做对比,到达Delay后,退出,即完成延时。
SysTick_Handler的调用周期要在中断中才能查询到吧,这里只是一个向量处理函数,看不出时间频率。
寂寞如她 回答时间:2015-5-30 16:37:06
anobodykey 回答时间:2015-5-30 17:08:55
看代码就晓得了,systick是1ms的Stm32xx_hal.c中HAL_InitTick中有写的
Paderboy 回答时间:2015-5-30 17:10:47
__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)
  {
  }
}


wamcncn 回答时间:2015-5-30 17:13:27
Paderboy 发表于 2015-5-30 17:10
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)

{

谢谢,明白了
为什么是EEFOCUS小白 回答时间:2015-5-31 10:00:31
1ms的延时
星辰一方 回答时间:2015-10-25 14:32:25
HAL库里怎么实现微秒级的延时?
Ljmp 回答时间:2016-10-27 10:52:26
1ms 一次中断,每一次中断uwTick++;

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版