1. STM32高级定时器深度解析
在嵌入式系统开发中,定时器是最基础也是最核心的外设之一。STM32系列微控制器提供了丰富多样的定时器资源,其中高级定时器(TIM1和TIM8)因其强大的功能在电机控制、电源管理等复杂应用中扮演着关键角色。与通用定时器相比,高级定时器增加了互补输出、死区控制、刹车功能等特性,使其成为工业控制领域的理想选择。
特别提示:高级定时器的功能虽然强大,但其配置复杂度也相应提高。建议在理解基本定时器工作原理的基础上,再深入学习高级定时器的特性。
1.1 高级定时器核心架构
高级控制定时器的功能框图是其灵魂所在,完整理解这个框图对掌握高级定时器至关重要。从时钟源到控制器,从时基单元到输入输出通道,每个模块都经过精心设计以满足工业级应用需求。
1.1.1 时钟源选择机制
高级定时器提供四种灵活的时钟源选择:
- 内部时钟源(CK_INT):最常见的168MHz系统时钟
- 外部时钟模式1:通过TIx引脚输入外部时钟信号
- 外部时钟模式2:通过ETR引脚输入外部触发信号
- 内部触发输入:用于定时器级联
在实际项目中,我经常使用内部时钟源作为基础时钟,但在需要同步多个定时器的场合,外部时钟模式或内部触发模式就显示出其价值。例如,在多电机协同控制系统中,通过ETR引脚同步所有定时器可以确保控制信号的严格同步。
1.1.2 时基单元精妙设计
高级定时器的时基单元包含几个关键寄存器:
- 16位预分频器(PSC):实现1至65536分频
- 16位计数器(CNT):支持递增、递减和中心对齐三种计数模式
- 16位自动重载寄存器(ARR):决定定时周期
- 8位重复计数器(RCR):高级定时器特有功能
这里有个容易忽视但非常重要的细节:当ARPE位使能时,对ARR的修改会先写入影子寄存器,直到更新事件发生时才会生效。这种机制在需要动态调整PWM频率时非常有用,可以避免中间状态导致的波形畸变。
1.2 输入捕获功能实战
输入捕获功能是测量外部信号脉宽和频率的利器。高级定时器在这方面的设计尤为出色,特别是其PWM输入模式,可以同时测量周期和占空比。
1.2.1 基本测量原理
常规的脉宽测量流程通常需要:
- 配置为上升沿捕获,记录第一个上升沿时刻CNT值
- 切换为下降沿捕获,记录下降沿时刻CNT值
- 再次切换为上升沿捕获,记录第二个上升沿时刻CNT值
- 通过计算这些值的差值得到脉宽和周期
这种方法虽然可行,但在实际应用中会遇到两个主要问题:一是频繁切换捕获边沿增加了软件复杂度;二是在高频信号下容易丢失捕获事件。这正是PWM输入模式要解决的问题。
1.2.2 PWM输入模式精解
PWM输入模式是STM32定时器的一个亮点功能,它通过硬件自动完成以下操作:
- 将一路PWM输入信号分为两路:TI1FP1和TI1FP2
- 一路用于触发捕获(通常选择上升沿)
- 另一路由硬件自动配置为相反的极性捕获
- 自动复位计数器实现精确周期测量
在我的一个无人机电调项目中,使用PWM输入模式测量遥控器信号,相比传统方法,代码量减少了40%,测量精度提高了近10倍。配置关键代码如下:
c复制TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_PWMIConfig(TIM8, &TIM_ICInitStructure);
1.3 输出比较与PWM生成
输出比较功能是定时器最常用的功能之一,高级定时器在
