stm32f103hal库TIM1定时器
时间: 2025-05-18 09:05:52 浏览: 23
### 配置 STM32F103 HAL 库中的 TIM1 定时器
在 STM32F103 的 HAL 库中,TIM1 是一个高级定时器,其配置过程与其他通用定时器类似,但也有一些特殊功能需要注意。以下是关于如何使用 HAL 庢库配置 TIM1 定时器的方法。
#### 初始化结构体定义
首先,在初始化之前需要创建 `TIM_HandleTypeDef` 类型的句柄变量来存储定时器的相关参数。例如:
```c
TIM_HandleTypeDef htim1;
```
#### 设置时钟源与时基
为了使能 TIM1 外设并设置其时钟源,需通过 RCC 控制寄存器启用对应外设的时钟。通常情况下,可以利用 HAL 提供的功能函数完成此操作:
```c
__HAL_RCC_TIM1_CLK_ENABLE();
```
接着设定计数模式(向上/向下)、预分频系数以及自动重装载值等基础属性。这些可以通过修改 `TIM_TimeBaseInitTypeDef` 结构体内成员实现。下面是一个简单的例子展示如何计算合适的预分频数值和周期长度以达到特定频率输出信号的目的[^1]。
假设系统核心运行速度为72MHz,则如果希望得到每秒钟触发一次事件的结果(即频率等于1Hz),那么可以根据如下公式得出相应参数:
- **Prescaler** = (SystemCoreClock / 计数频率) - 1
- **AutoReloadValue** = 每次溢出所需脉冲数量 - 1
对于上述条件而言,
- Prescaler = (72e6 / 1e3) - 1 = 71999
- AutoReloadValue = 999
因此实际代码片段可写成这样子形式:
```c
htim1.Instance = TIM1;
htim1.Init.Prescaler = 71999;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 999;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
{
Error_Handler(); // 错误处理机制
}
```
#### 启动中断服务程序
当一切准备就绪之后,还需要开启相应的中断向量通道以便接收到来自硬件层面上产生的各种异常情况通知消息。这里同样借助于 HAL 函数简化流程:
```c
HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
// 在 main() 中调用该函数启动 IT 方式的计时器
HAL_TIM_Base_Start_IT(&htim1);
```
与此同时也要记得编写对应的 ISR 来响应具体业务逻辑需求。比如前面提到过的切换 LED 状态的操作就可以放在其中执行:
```c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1){
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
}
}
```
以上便是针对 STM32F103 使用 HAL 库快速搭建起基于 TIM1 的简单应用实例全过程介绍。
阅读全文
相关推荐

















