0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SysTick与HAL_Delay的关系与注意事项

CHANBAEK 来源:头条号秋天滴风 作者:头条号秋天滴风 2023-04-21 11:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

SysTick与HAL_Delay的关系与注意事项

本文将介绍SysTick与HAL_Delay()函数之间的关系,以及使用HAL_Delay()函数的注意事项;

一.HAL_Delay()函数实现的原理、与SysTick的关系

下面我们先看一下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)
  {
  }
}

从源码可以看出该函数将我们传入的参数与HAL_GetTick()-tickstart比较,若不满足条件则退出while、若满足

接下来我们追一下HAL_GetTick()的源代码:

__weak uint32_t HAL_GetTick(void)
{
return uwTick;
}

接着追一下uwTick ,发现在下面这个函数中对它的值进行了操作:

__weak void HAL_IncTick(void)
{
uwTick += uwTickFreq;
}

接着追一下uwTickFreq 发现uwTickFreq = 1,接着追一下HAL_IncTick(void)函数:

发现HAL_IncTick(void)函数是在SysTick的中断回调函数内调用的;

综上可知HAL_Delay与SysTick的关系:HAL_Delay函数的执行、最终是依赖于SysTick的每触发一次SysTick的中断耗时1ms,HAL_GetTick()-tickstart会增大1、知道差值等于HAL_Delay的传入参数。

二、由SysTick与HAL_Delay之间的关系可知,我们在使用HAL_Delay的时候需要注意:当在中断中使用了HAL_Delay函数,则该中断的抢占优先级必须低于SysTick中断的优先级,否则会导致SysTick中断不能抢占该中断函数、最终导致HAL_GetTick()-tickstart的值不会变,从而陷入死循环中。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 中断
    +关注

    关注

    5

    文章

    920

    浏览量

    43879
  • 源码
    +关注

    关注

    8

    文章

    689

    浏览量

    31521
  • 函数
    +关注

    关注

    3

    文章

    4422

    浏览量

    67863
  • Systick
    +关注

    关注

    0

    文章

    67

    浏览量

    14020
  • HAL
    HAL
    +关注

    关注

    2

    文章

    75

    浏览量

    13750
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问CW32F030的硬件注意事项有哪些?

    CW32F030的硬件注意事项有哪些
    发表于 12-25 08:20

    请问IAP功能升级流程中有哪些注意事项

    IAP 功能升级流程中有哪些注意事项
    发表于 12-23 07:55

    BNC转接头接线注意事项

    本文从工程角度总结BNC转接头接线过程中的关键注意事项,涵盖阻抗匹配、接线规范、工艺选择及检测要点,帮助用户避免常见接线问题。
    的头像 发表于 12-19 14:04 640次阅读
    BNC转接头接线<b class='flag-5'>注意事项</b>

    迅为RK3588开发板Android系统烧写及注意事项

    迅为RK3588开发板Android系统烧写及注意事项
    的头像 发表于 12-03 15:17 7433次阅读
    迅为RK3588开发板Android系统烧写及<b class='flag-5'>注意事项</b>

    驱动板PCB布线的注意事项

    PCB Layout 注意事项 1)布局注意事项: ●● 整体布局遵循功率回路与小信号控制回路分开布局原则,功率部分和控制部分的 GND 分开回流到输入 GND。 ●● 芯片的放置方向优先考虑驱动
    发表于 12-02 07:40

    Enclustra瑞苏盈科产品使用注意事项

    我们准备了关于瑞苏盈科产品使用的注意事项,旨在帮助客户更快,更好的使用瑞苏盈科的产品,实现以最小化的成本提供理想的解决方案,帮助客户打造独树一帜的产品并减少上市时间。瑞苏盈科核心板使用注意事项:电子
    的头像 发表于 11-28 10:28 820次阅读
    Enclustra瑞苏盈科产品使用<b class='flag-5'>注意事项</b>

    CW32F030在使用中的注意事项有哪些?

    CW32F030在使用中的注意事项有哪些?
    发表于 11-18 06:20

    在rtthread的main函数里用HAL_Delay函数不起作用是哪里的问题?

    在rtthread的main函数里用HAL_Delay函数无效,我设置延时500ms打印一次,但是实际上,一秒打印了几百次,很显然是HAL_Delay出现了问题。用RT_thread_mdelay
    发表于 09-15 07:53

    emWin AppWizard 开发注意事项有哪些?

    emWin AppWizard 开发注意事项
    发表于 09-04 06:18

    别让这些细节毁了PCBA!焊接注意事项清单

    一站式PCBA加工厂家今天为大家讲讲PCBA加工中电子元器件焊接注意事项有哪些?PCBA加工中电子元器件焊接注意事项。 电子元器件焊接关键注意事项 在PCBA加工中,焊接工艺直接影响电路板的可靠性
    的头像 发表于 07-23 09:26 1519次阅读

    智多晶PLL使用注意事项

    在FPGA设计中,PLL(锁相环)模块作为核心时钟管理单元,通过灵活的倍频、分频和相位调整功能,为系统提供多路高精度时钟信号。它不仅解决了时序同步问题,还能有效消除时钟偏移,提升系统稳定性。本文将深入探讨智多晶PLL在实际应用中的关键注意事项,帮助工程师规避常见设计风险。
    的头像 发表于 06-13 16:37 1783次阅读
    智多晶PLL使用<b class='flag-5'>注意事项</b>

    美国Odyssey奥德赛电池充电注意事项全解析

    Odyssey奥德赛电池充电注意事项全解析 奥德赛电池作为高性能的深循环铅酸电池,广泛应用于汽车启动、摩托车、船舶以及备用电源系统中。正确的充电方法不仅能够延长电池寿命,还能保障其性能稳定发挥
    的头像 发表于 05-19 16:31 1298次阅读
    美国Odyssey奥德赛电池充电<b class='flag-5'>注意事项</b>全解析

    IGBT器件的防静电注意事项

    IGBT作为功率半导体器件,对静电极为敏感。我将从其静电敏感性原理入手,详细阐述使用过程中防静电的具体注意事项与防护措施,确保其安全稳定运行。
    的头像 发表于 05-15 14:55 2196次阅读

    手机喇叭气密性检测仪的注意事项

    使用手机喇叭气密性检测仪的注意事项包括以下几点:一、使用前注意事项仔细阅读手机喇叭气密性检测仪的使用说明书,了解设备的操作方法和注意事项。检查气密性检测仪的各部件是否完好,包括压力表、传感器、连接
    的头像 发表于 05-15 13:38 903次阅读
    手机喇叭气密性检测仪的<b class='flag-5'>注意事项</b>

    设置射频网络分析仪的测试条件有哪些注意事项

    射频网络分析仪(VNA)的测试条件设置直接影响测量结果的准确性和可靠性。以下从仪器配置、被测器件(DUT)特性、环境干扰、校准与验证四个维度,系统梳理关键注意事项及解决方案。一、仪器配置与参数设置
    发表于 05-06 16:02