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

HAL库中的延时函数

[复制链接]
wambob 提问时间: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)
  {
  }
}


wambob 回答时间: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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版