HAL库定时器stm32f1
时间: 2025-05-08 16:18:33 浏览: 16
### STM32F1 HAL库 定时器 使用教程
#### 一、定时器初始化
在使用STM32F1系列微控制器的HAL库配置定时器之前,需要先完成定时器外设的初始化工作。这通常通过`MX_TIMx_Init()`函数实现,其中`TIMx`表示具体的定时器编号(如TIM2)。该函数会在CubeMX工具生成的代码中自动生成。
以下是典型的定时器初始化结构体定义:
```c
TIM_HandleTypeDef htim2;
void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim2.Instance = TIM2;
htim2.Init.Prescaler = 7199; // 设置预分频值
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数模式
htim2.Init.Period = 999; // 自动重载值
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
}
```
上述代码设置了定时器的工作参数[^1],包括预分频值和自动重载值,用于控制定时器的时间间隔。
---
#### 二、启用定时器中断
为了使能定时器的中断功能,在初始化完成后需调用以下函数:
```c
HAL_TIM_Base_Start_IT(&htim2);
```
此函数启动了定时器并使其进入中断模式。当定时器达到设定的周期值后会触发一次中断事件,并执行相应的中断服务程序。
---
#### 三、处理定时器中断回调
在HAL库中,可以通过覆盖默认的回调函数来响应定时器中断事件。例如,对于TIM2定时器,可以编写如下回调函数:
```c
uint16_t Num = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2){
Num++;
printf("Num:%d\n", Num); // 打印当前计数值
}
}
```
每当定时器发生周期溢出时,都会调用这个回调函数[^3]。在此处可以根据实际需求添加具体逻辑操作。
---
#### 四、其他注意事项
- **时钟源设置**:确保正确配置了系统的时钟树以及对应的APB总线频率,因为这些会影响最终的实际定时精度[^2]。
- **优先级调整**:如果项目中有多个中断源,则可能还需要合理分配各中断向量表中的抢占优先级与子优先级关系。
---
### 总结
以上展示了基于STM32F1 HAL库配置基础定时器的主要流程及其核心要点。从硬件资源的选择到软件层面的具体实现细节均有所涉及,能够帮助开发者快速搭建起一个简单的定时应用框架。
---
阅读全文
相关推荐


















