stm32 定时器 hal
时间: 2024-12-27 07:20:03 浏览: 7
### STM32定时器使用HAL库
#### 初始化配置
为了初始化STM32的定时器并设置其基本功能,可以利用HAL库简化操作流程。通过调用`__HAL_RCC_TIMx_CLK_ENABLE()`函数来使能定时器时钟[^1]。
```c
// 使能TIM2时钟
__HAL_RCC_TIM2_CLK_ENABLE();
```
接着定义一个定时器句柄结构体变量用于存储定时器参数:
```c
TIM_HandleTypeDef htim2;
```
随后需填充此句柄中的成员以完成具体配置工作,例如设定预分频系数(PSC),自动重装载寄存器(ARR)等值,从而决定计数频率以及周期时间长度:
```c
htim2.Instance = TIM2; // 设置使用的定时器实例为TIM2
htim2.Init.Prescaler = 8399; // 配置预分频器,假设系统时钟为84MHz,则此处实现1ms中断一次的效果
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式向上计数
htim2.Init.Period = 999; // 自动重载值,即溢出次数,在这里也表示每秒触发一次更新事件
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;// 时钟分割因子设为1
if (HAL_TIM_Base_Init(&htim2) != HAL_OK){
Error_Handler(); // 如果初始化失败则跳转到错误处理程序
}
```
以上代码片段展示了如何基于HAL库创建和初始化一个基础定时器对象,并设置了该定时器的工作方式及其主要特性。
#### 启动与停止定时器
当一切准备就绪之后就可以启动定时器了,这可以通过调用`HAL_TIM_Base_Start_IT()`方法轻松做到;同样地,如果想要暂停它的话也可以借助于对应的关闭接口如`HAL_TIM_Base_Stop_IT()`. 这两个API允许开发者灵活控制定时行为的发生时刻.
```c
// 开启定时器中断
HAL_TIM_Base_Start_IT(&htim2);
// 关闭定时器中断
HAL_TIM_Base_Stop_IT(&htim2);
```
上述过程描述了一个完整的从硬件资源分配到最后实际运行起来的过程,其中涉及到多个层次上的抽象封装使得整个编程体验更加友好便捷.
阅读全文