STM32F103 定时器配置
时间: 2025-05-21 15:36:24 浏览: 22
### STM32F103 定时器配置详解
STM32F103系列微控制器提供了丰富的定时器资源,这些定时器可以分为三类:高级控制定时器(TIM1 和 TIM8)、通用定时器(TIM2 至 TIM5)以及基本定时器(TIM6 和 TIM7)。每种类型的定时器适用于不同的场景,开发者可以根据具体需求选择合适的定时器类型[^1]。
以下是关于如何在STM32F103微控制器中配置定时器的一个典型示例:
#### 配置步骤说明
为了实现一个简单的延时功能或者触发中断事件,可以通过以下方式完成定时器的初始化和配置。这里以通用定时器TIM2为例展示其配置过程。
```c
#include "stm32f1xx_hal.h"
void Timer_Init(void) {
__HAL_RCC_TIM2_CLK_ENABLE(); // 启用TIM2时钟
TIM_HandleTypeDef htim;
htim.Instance = TIM2; // 使用TIM2实例
htim.Init.Prescaler = 8399; // 设置预分频值, 假设系统时钟为84MHz,则此值对应约1ms计数间隔
htim.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式向上计数
htim.Init.Period = 999; // 自动重装载寄存器值, 对应总时间为1s (1ms * 1000)
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim); // 初始化定时器基类成员函数
}
int main(void){
HAL_Init();
Timer_Init();
while(1){
HAL_Delay(1000); // 利用已配置好的定时器产生延迟效果
// 执行其他任务...
}
}
```
以上代码片段展示了如何利用HAL库来初始化并运行一个基于TIM2的定时器[^2]。其中`Prescaler`参数决定了每次计数值增加之间的实际时间长度;而`Period`则定义了一个完整的计数周期所需达到的最大计数值。
#### 中断处理机制
如果希望当定时结束时能够自动执行某些特定的操作,则需要进一步设置相应的中断服务程序(ISR),如下所示:
```c
// 在向量表位置注册该ISR地址
void TIM2_IRQHandler(void){
if (__HAL_TIM_GET_IT_SOURCE(&htim,TIM_IT_UPDATE)){
__HAL_TIM_CLEAR_IT(&htim,TIM_IT_UPDATE);
// 插入要响应的动作代码
}
}
```
通过这种方式可以在指定的时间点精确地激活一段逻辑运算或其他外设交互行为。
阅读全文
相关推荐


















