hal库系统滴答定时器 systick
时间: 2025-03-21 12:15:11 浏览: 43
### STM32 HAL库中SysTick系统滴答定时器的配置与使用
#### 初始化过程
在STM32 HAL库中,`HAL_Init()` 函数被用来初始化硬件抽象层。此函数内部会调用 `HAL_InitTick()` 方法来设置系统的滴答定时器[^3]。具体来说,`HAL_InitTick()` 调用了底层的 `SysTick_Config()` 来完成实际的配置工作。
默认情况下,在重置之后使用的时钟源为HSI(高速内部振荡器),并且通过定义宏 `TICK_INT_PRIORITY` 设置中断优先级,默认值为最低优先级15U。
#### 配置步骤详解
为了实现精确的时间管理功能,通常需要调整以下几个方面:
- **时间间隔设定**
可以通过修改传递给 `HAL_InitTick()` 的参数或者直接操作 `SysTick->LOAD` 寄存器来自定义所需的延时周期。例如如果希望获得更短或更长的计数单位,则需重新计算加载到该寄存器中的数值以便匹配目标频率[^1]。
- **回调机制注册**
如果想要响应每次触发事件可以利用 HAL 提供的相关 API 注册自己的处理逻辑。比如当发生超时时执行某些特定的任务序列等行为模式可以通过自定义 handler 实现。
#### 示例代码展示
下面给出一段简单的例子演示如何基于 HAL 库创建并启动一个每秒一次的循环打印消息程序:
```c
#include "stm32f4xx_hal.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while(1){
// 延迟一秒
HAL_Delay(1000);
printf("One second passed.\n");
}
}
// 自定义 SysTick 中断服务例程 (可选)
void HAL_IncTick(){
__IO uint32_t temp;
/* Increment the global tick */
if ((temp = uwTickFreq) != 0UL){
uwTick += temp;
}else{
uwTick++;
}
}
```
上述代码片段展示了基本框架结构以及如何结合标准外设驱动库一起工作的场景下运用 Systick 功能模块的方法。
---
阅读全文
相关推荐



















