1. STM32基础定时器原理与配置详解
在嵌入式开发中,定时器是最基础也最常用的外设之一。STM32的TIM6属于基础定时器(Basic Timer),相比通用定时器功能更简单,但正好适合初学者理解和掌握定时器的核心原理。我以STM32F1系列为例,分享如何配置TIM6实现500ms定时中断,并控制GPIO引脚翻转。
基础定时器TIM6/7的主要特点:
- 16位自动重装载计数器
- 16位可编程预分频器
- 仅支持向上计数模式
- 可触发DAC同步
- 没有外部IO引脚,纯内部使用
提示:基础定时器与通用定时器的核心区别在于没有输入捕获/输出比较功能,适合做简单定时和触发用途。
1.1 时钟源与分频机制
STM32的定时器时钟通常来自APB1总线(TIM6/7挂在APB1)。以STM32F103为例,当APB1预分频系数为1时,定时器时钟等于APB1时钟(72MHz);如果APB1预分频系数不为1,定时器时钟将是APB1时钟的2倍。
时钟路径如下:
code复制HCLK → APB1预分频器 → 如果APB1分频系数≠1则×2 → TIMxCLK
在CubeMX中配置时,可以在Clock Configuration标签页确认TIM6的时钟源和频率。我建议在RCC配置中将APB1预分频系数设为1,这样TIM6时钟就是标准的72MHz,计算更直观。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. TIM6定时器参数配置实战
2.1 定时周期计算原理
定时器中断周期由三个关键参数决定:
- 定时器时钟频率(TIM_CLK)
- 预分频系数(Prescaler)
- 自动重装载值(Period)
计算公式:
code复制定时频率 = TIM_CLK / (Prescaler + 1) / (Period + 1)
定时周期 = 1 / 定时频率
为什么参数都要加1?因为Prescaler和Period都是0-based的寄存器值。例如Prescaler设为7199,实际分频系数是7200。
2.2 500ms定时配置实例
要实现500ms定时,我的配置步骤如下:
- 确定时钟源:TIM6_CLK = 72MHz
- 选择预分频系数:7200-1 = 7199
- 分频后频率:72MHz / 7200 = 10kHz
3
- 分频后频率:72MHz / 7200 = 10kHz
