1. STM32定时器PWM输出与输入捕获实战
对于嵌入式开发者来说,定时器是STM32最强大也最复杂的外设之一。今天我要分享的是如何同时使用TIM2的PWM输出功能和TIM1的输入捕获功能,实现频率和占空比的测量。这个方案在实际项目中非常实用,比如电机控制、电源管理等领域都会用到。
2. 硬件设计与配置要点
2.1 定时器选型策略
在STM32系列中,定时器分为基本定时器、通用定时器和高级定时器三种类型。我们选择TIM2作为PWM发生器,TIM1作为输入捕获定时器,主要基于以下考虑:
- TIM2是通用定时器,具有PWM生成能力且资源占用较少
- TIM1是高级定时器,具有输入捕获和正交编码等高级功能
- 两个定时器独立工作,互不干扰,可以提高系统可靠性
2.2 引脚分配与硬件连接
实现本方案需要正确配置以下引脚:
- TIM2_CH1:PWM输出引脚(如PA0)
- TIM1_CH1:输入捕获通道1(如PA8)
- TIM1_CH2:输入捕获通道2(如PA9)
硬件连接时需要注意:
- PWM输出引脚连接到待测设备
- 待测信号同时接入TIM1_CH1和TIM1_CH2
- 确保信号电压在STM32的IO电平范围内(通常3.3V)
3. 软件配置与初始化
3.1 PWM输出配置(TIM2)
使用STM32CubeMX配置TIM2的PWM输出:
- 选择TIM2,启用Channel1的PWM模式
- 设置预分频器(Prescaler)和自动重装载值(ARR):
- 假设系统时钟为72MHz,要实现1kHz PWM:
- Prescaler = 71 (72MHz/(71+1) = 1MHz)
- ARR = 999 (1MHz/(999+1) = 1kHz)
- 设置脉冲宽度(CCR1值)控制占空比
- 生成代码后添加启动代码:
c复制HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
3.2 输入捕获配置(TIM1)
TIM1的输入捕获需要更复杂的配置:
- 配置Channel1为输入捕获模式,上升沿触发
- 配置Channel2为输入捕获模式,下降沿触发
- 设置预分频器使定时器时钟为1MHz(1u
