stm32 HAL库延时函数delay
时间: 2025-01-03 20:41:57 浏览: 26
### STM32 HAL库延时函数 `HAL_Delay` 的使用方法与实现原理
#### 使用方法
在STM32 HAL库中,`HAL_Delay()` 是用于毫秒级延迟的标准API。此函数接受一个参数——表示等待时间的无符号整型数值(单位为毫秒),并在此期间挂起当前线程。
要调用该函数,需先确保已经初始化了系统的滴答定时器(SYSTICK),通常是在项目启动文件(`main.c`)中的`HAL_InitTick()`被调用之后完成这一操作[^1]。
```c
// Example of using HAL_Delay function.
HAL_Delay(1000); // Delay for 1 second (1000 milliseconds).
```
#### 实现原理
`HAL_Delay()` 函数依赖于Systick定时器来提供精确的时间基准。当程序执行到这个函数时,它会记录下当前时刻,并不断查询直到达到指定数量的周期才返回控制权给后续指令继续运行。具体来说:
- Systick是一个24位向下计数的倒计数定时器;
- 当配置好预设值后,每过一次系统时钟频率对应的周期就减去一;
- 到达零的时候会产生溢出事件通知CPU更新全局变量SysTick->VAL重新加载重装载寄存器里的初值;
- 同时也会触发中断服务例程(ISR)增加由硬件维护的一个递增计数器ms_ticks[]。
因此,通过这种方式可以实现较为精准可靠的软件延时效果。
然而需要注意的是,在某些特定场景比如ISR内部不应该直接调用`HAL_Delay()`因为这可能会造成不可预测的行为甚至死锁现象发生,正如提到过的按键消抖应用案例所示[^3]。
对于更短时间尺度上的微秒级别延迟,则可能需要用到其他机制如基于DWT(Deprecated Watchdog Timer)组件的方法或是利用更高精度的通用TIMx外设来进行编程设计[^2]。
阅读全文