
本文概述
STM32定时器是嵌入式面试高频考点。定时器分为基本、通用、高级和低功耗四类,PWM频率等于时钟频率除以预分频值加1再乘自动重装载值加1,占空比由捕获比较寄存器决定。输出比较支持PWM模式,输入捕获可测脉冲宽度和频率,高级定时器带死区控制用于电机驱动。配置流程涉及时钟使能、GPIO复用、时基参数设置和输出比较配置。
核心要点速览
STM32定时器分四类:基本定时器(TIM6/7)、通用定时器(TIM2-5)、高级定时器(TIM1/8)、低功耗定时器
PWM频率 = 时钟频率 / ((PSC+1) × (ARR+1)),占空比 = CCR / (ARR+1) × 100%
输出比较模式有多种:冻结、匹配置位、匹配清零、PWM模式1/2等
输入捕获可测量脉冲宽度和信号频率,配合DMA可实现多通道高频采集
高级定时器带死区时间控制和刹车输入,专用于电机驱动等功率电子场景
一、面试题
请说明STM32定时器的工作原理,以及PWM输出的配置步骤和参数计算。
二、面试官考察点
1. 寄存器级理解
是否理解定时器的时基单元、PSC预分频器、ARR自动重装载寄存器、CCR捕获比较寄存器等核心寄存器的作用。
2. 实际配置能力
能否讲出完整的配置流程,从时钟使能、GPIO配置到时基初始化、输出比较设置,反映动手经验。
3. 参数计算能力
给定需求(频率、分辨率、占空比范围)能否反推出PSC和ARR的取值,这是项目中常遇到的问题。
4. 功能广度认知
是否知道定时器除了PWM还能做输入捕获、输出比较、编码器接口、单脉冲模式等其他功能。
三、回答思路
1. STM32定时器的分类和特点
| 类型 | 代表 | 主要功能 | 典型应用 |
|---|---|---|---|
| 基本定时器 | TIM6、TIM7 | 16位向上计数,无输入输出通道 | 定时中断、DAC触发 |
| 通用定时器 | TIM2-TIM5 | 16位或32位,4个独立通道,支持PWM/输入捕获/输出比较 | PWM输出、脉冲测量、编码器 |
| 高级定时器 | TIM1、TIM8 | 通用定时器全部功能+死区插入+刹车输入+互补输出 | 电机驱动、开关电源 |
| 低功耗定时器 | LPTIM | 低功耗模式下仍可工作 | 低功耗唤醒、低频率测量 |
2. PWM输出的原理
PWM即脉冲宽度调制,核心是定时器的CNT计数器从0递增到ARR值,不断循环。当CNT小于CCR时输出一个电平,大于CCR时输出另一个电平,这样就产生了固定频率、可调占空比的方波。
关键公式:
PWM频率 = 定时器时钟频率 / ((PSC + 1) × (ARR + 1))
占空比 = CCR / (ARR + 1) × 100%
PWM分辨率 = log2(ARR + 1) 位
3. PWM输出配置步骤
以STM32F103的TIM2_CH1为例,使用标准库配置流程:
使能时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE) 和 GPIO时钟
配置GPIO为复用推挽输出(TIM2_CH1对应PA0引脚)
配置定时器时基:设置PSC预分频值和ARR自动重装载值
配置输出比较模式:选择PWM模式1或2,设置CCR初始值
使能输出比较通道和定时器主输出
启动定时器:TIM_Cmd(TIM2, ENABLE)
4. 定时器的其他功能
输入捕获
检测外部引脚上的电平跳变并记录当前计数值,可测量脉冲宽度、信号周期和频率。配合上升沿/下降沿分别捕获,可以算出高电平和低电平持续时间。高频测量时可用DMA搬运捕获值,减少CPU占用。
输出比较
当计数器与CCR匹配时改变输出电平,可产生精确延时的脉冲。与PWM的区别是输出比较只在匹配时刻动作一次,而PWM是周期性自动翻转。常用于单脉冲输出、波形生成和定时触发。
编码器接口
通用定时器的两个通道可配置为编码器接口模式,自动计算旋转方向和位置,无需CPU参与。用于直流有刷电机的闭环位置和速度检测。
死区与刹车
高级定时器特有功能。死区时间用于防止上下桥臂直通,刹车输入用于过流等故障时快速关断输出,是电机驱动和电源应用的重要安全机制。
四、追问(4个)
追问1:PWM模式1和模式2有什么区别?
PWM模式1:CNT小于CCR时输出有效电平,大于时输出无效电平。PWM模式2:CNT小于CCR时输出无效电平,大于时输出有效电平。两种模式在计数方向不同时表现不同,但在向上计数模式下,两者的区别就是输出电平相反。实际应用中选哪种取决于需要高电平有效还是低电平有效,以及极性配置的组合。
追问2:怎么用定时器测量一个未知频率的方波?
两种方法:测频法和测周法。测频法在固定闸门时间(如1秒)内计数脉冲个数,适合高频信号。测周法用已知频率的定时器时钟计数信号一个周期内的时钟数,适合低频信号。具体实现:配置定时器输入捕获为上升沿触发,第一次上升沿记录CCR值,第二次上升沿再记录一次,差值就是周期对应的时钟数,除以时钟频率就是信号周期。频率很低时可以测多个周期取平均提高精度。
追问3:PWM输出频率不够高怎么办?
几个方向:提高定时器时钟频率(检查APB预分频器设置,确认定时器是否运行在最高时钟);减小ARR值(牺牲分辨率换频率);使用高速的定时器(有些系列的高级定时器或专用定时器时钟更高);如果是多路PWM且频率一致,考虑用定时器的主从模式同步,或用DMA加GPIO模拟更高频率的输出。分辨率不够的情况下,如果只是调光调速等应用,影响通常不大。
追问4:定时器更新中断和比较中断有什么区别?
更新中断(UEV)发生在计数器溢出(向上计数到ARR或向下计数到0)时,对应PWM的每个周期开始或结束。比较中断(CCxIF)发生在计数器与CCR匹配时。更新中断频率等于PWM频率,比较中断在每个PWM周期内也会触发一次。如果只需要周期性做事情,用更新中断就行;如果要在特定占空比时刻触发ADC采样等操作,就用比较中断,配合DMA可以实现PWM周期内的精准采样。
五、失分表达
"PWM频率就是定时器时钟频率除以ARR"——忽略了PSC预分频器,正确公式要考虑PSC+1和ARR+1
"所有定时器功能一样"——基本定时器没有输出通道,高级定时器才有死区和刹车
"占空比等于CCR除以ARR"——应该是CCR除以(ARR+1),ARR是计数上限值,计数从0开始
"PWM只能用于电机调光"——PWM还广泛用于D类功放、开关电源、通信调制等领域
六、准备动作
熟悉定时器时基结构:CNT、PSC、ARR、CCR各寄存器的作用
能手算PWM频率和占空比,给定需求能反推PSC和ARR
能讲出PWM输出、输入捕获、输出比较三种模式的区别和配置差异
准备一个实际项目案例,比如电机调速、LED调光或脉冲测量
了解高级定时器的死区时间计算和刹车功能应用场景
七、核心关键词
STM32定时器 PWM输出 输入捕获 输出比较 预分频器 占空比 编码器接口 死区控制

扫码关注



























