stm32f103的tim2定时器us级定时
时间: 2025-06-30 19:02:03 浏览: 20
### STM32F103 TIM2 微秒级定时配置
在STM32F103微控制器中,TIM2是一个通用16位定时器,适用于实现微秒级别的精确定时。以下是详细的配置方法以及示例代码。
#### 配置说明
要实现微秒级定时,需合理设置以下几个参数:
- **TIM_Prescaler**: 设置预分频器值,决定计数频率。通过调整该值可控制定时精度。
- **TIM_Period**: 自动重装载寄存器值,决定了定时器的最大计数值。
- **TIM_CounterMode**: 计数模式,通常选择向上计数模式 `TIM_CounterMode_Up`[^2]。
- **时钟源**: 默认情况下,TIM2的时钟来源于APB1总线时钟(即72 MHz)。如果APB1被分频,则实际时钟会相应降低[^4]。
假设目标是实现1 ms的定时间隔,具体计算如下:
- APB1时钟为72 MHz;
- 如果希望每微秒触发一次中断,则需要使能溢出中断并设置合适的预分频和周期值。
#### 示例代码
以下是一段基于标准库的C语言代码示例,展示如何初始化TIM2以实现微秒级定时功能。
```c
#include "stm32f10x.h"
void TIM2_Init(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 99; // ARR=99 对应1us * (PSC+1)*(ARR+1)=1ms
TIM_TimeBaseStructure.TIM_Prescaler = 71; // PSC=71 即系统时钟/72Mhz/(71+1)=1us
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 开启更新中断
TIM_Cmd(TIM2, ENABLE); // 启动TIM2
}
// 中断服务函数
void TIM2_IRQHandler(void) {
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除标志位
// 用户自定义处理逻辑
}
}
```
此代码片段实现了利用TIM2进行1毫秒定时的功能,并注册了一个简单的中断回调来响应事件。
#### 注意事项
- 当前配置中的 `TIM_Prescaler` 和 `TIM_Period` 值是为了演示目的而设定的,请根据实际情况重新计算这些值以便满足特定需求。
- 确保正确启用相应的NVIC优先级组及中断向量表地址映射操作[^5]。
阅读全文
相关推荐

















