stm32g474ret6的hal库延时函数
时间: 2025-06-01 18:56:09 浏览: 27
### STM32G474RET6 HAL 库中延时函数的使用方法
在 STM32G474RET6 的 HAL 库中,提供了多种延时功能以满足不同的应用场景。这些延时函数主要分为两类:基于软件计数器的简单延迟和基于硬件定时器的精确延迟。
#### 1. **HAL 提供的基础延时函数**
HAL 库中最常用的延时函数是 `HAL_Delay()`,这是一个基于毫秒级的时间延迟函数。其实现依赖于系统滴答(SysTick)定时器[^1]。以下是该函数的具体用法:
```c
void HAL_Delay(uint32_t Delay);
```
- 参数 `Delay` 表示需要延迟的毫秒数。
- 此函数会阻塞当前的任务执行流程直到指定的时间过去为止。
例如,在主循环中插入一段 1 秒的延迟可按如下方式编写:
```c
HAL_Delay(1000); // 延迟 1000 毫秒即 1 秒
```
需要注意的是,由于 `HAL_Delay()` 是通过 SysTick 计算得出的实际流逝时间,因此它的精度受限于系统的时钟频率以及可能存在的其他中断处理开销[^1]。
#### 2. **自定义微秒级别延时**
对于某些实时性强的应用场景而言,仅依靠 `HAL_Delay()` 可能无法达到所需的精准度尤其是亚毫秒级别的控制需求。此时可以借助 TIMx 定时器配合回调机制构建更精细粒度的延时逻辑[^2]。
下面是一个创建基于 TIM2 的微秒级延时的例子:
##### (1)初始化 TIM2 定时器
首先要在 CubeMX 中配置好通用定时器 TIM2,并开启相应的中断服务例程ISR。假设预分频系数 Prescaler=83,自动重装载值 ARR=999,则可以获得大约 1us 的分辨率[(SystemCoreClock/(Prescaler+1))/(ARR+1)]。
##### (2)实现具体的延时代码
接着可以在应用程序部分增加类似这样的辅助宏/函数来简化调用过程:
```c
#define MICROS_PER_TICK ((float)(SystemCoreClock / (TIM2->PSC + 1)) / (TIM2->ARR + 1))
uint32_t micros_start = __HAL_TIM_GET_COUNTER(&htim2);
while ((__HAL_TIM_GET_COUNTER(&htim2) - micros_start) < desired_microseconds * MICROS_PER_TICK);
```
这里的关键在于利用了 `__HAL_TIM_GET_COUNTER()` 来获取当前计数值从而动态比较差值得知已经过了多久[^3]。
---
###
阅读全文
相关推荐


















