HAL_Delay延时不准确

HAL_Delay 延时误差大

某次使用HAL_Delay函数的发现delay和自己预想的不太一致,始终是多一些时间,导致出现了一些问题。

于是乎测试了一下HAL_Delay函数的延时时间。

测试delay时间

程序中有个1ms的定时器中断,会导致delay的时间稍微多点。

在while循环中通过反转引脚的状态来查看delay 1ms时间;

// 测试主要代码
while(1)
{
    HAL_Delay(1);
    HAL_GPIO_TogglePin(TP_19_GPIO_Port, TP_19_Pin);
}

image-20240710163042020

测试显示,相对应的引脚反转的时间是实际的2ms左右,比预设的要多出 1ms;

后又查看delay 2ms 的时间

// 测试主要代码
while(1)
{
    HAL_Delay(2);
    HAL_GPIO_TogglePin(TP_19_GPIO_Port, TP_19_Pin);
}

image-20240710163322203

还是比预设的多出 1ms;

事情变得有趣起来了。

查看 HAL_Delay 函数的实现

追 HAL_Delay 函数

__weak void HAL_Delay(uint32_t Delay)
{
  uint32_t tickstart = HAL_GetTick();
  uint32_t wait = Delay;

  /* Add a freq to guarantee minimum wait */
  if (wait < HAL_MAX_DELAY)
  {
    wait += (uint32_t)(uwTickFreq);
  }

  while ((HAL_GetTick() - tickstart) < wait)
  {
  }
}

发现自己在内部悄悄的将延时时间更改为了 Delay + (uint32_t)(uwTickFreq)

uwTickFreq默认是1,也就是HAL_Delay 函数实际延时的时间是要比设置的值要大的,最大是多出 1 ms的时间;

估计是为了保证用户设置的延时一定被满足,也就是最少延时用户设定的时间。

时的时间是要比设置的值要大的,最大是多出 1 ms的时间;

估计是为了保证用户设置的延时一定被满足,也就是最少延时用户设定的时间。

HAL_Delay 函数 是个虚函数,用户可根据自己的需求将其重写。

相关推荐

  1. 005 交换机

    2024-07-11 22:04:03       25 阅读
  2. 【Bug】.net6 cap总线+rabbitmq消息收

    2024-07-11 22:04:03       60 阅读
  3. MFC 实现,并且进行消息分发,阻塞

    2024-07-11 22:04:03       41 阅读
  4. Redis简易队列

    2024-07-11 22:04:03       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 22:04:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 22:04:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 22:04:03       62 阅读
  4. Python语言-面向对象

    2024-07-11 22:04:03       72 阅读

热门阅读

  1. (C++哈希02) 四数相加 赎金信

    2024-07-11 22:04:03       23 阅读
  2. 超详细Python教程——面向对象相关知识

    2024-07-11 22:04:03       17 阅读
  3. 2024前端面试每日一更——简述MVVM?

    2024-07-11 22:04:03       25 阅读
  4. 呼叫中心遭遇UDP攻击,如何快速恢复服务?

    2024-07-11 22:04:03       24 阅读
  5. conda 重命名虚拟环境

    2024-07-11 22:04:03       22 阅读
  6. conda

    2024-07-11 22:04:03       20 阅读
  7. Facebook应用开发:认证与授权登录流程详解

    2024-07-11 22:04:03       23 阅读