1. 项目概述:两路PWM输出的硬件基础
STM32F103作为意法半导体经典的Cortex-M3内核微控制器,其定时器模块的PWM输出功能在电机控制、LED调光等场景中应用广泛。我手头的这块STM32F103C8T6最小系统板,虽然只有64KB Flash和20KB RAM,但内置的高级定时器TIM1和通用定时器TIM2/3/4完全能满足两路独立PWM输出的需求。
实际项目中,我常用TIM1的CH1和CH2通道分别驱动电机和LED。TIM1作为高级定时器,支持互补输出和死区控制,特别适合电机驱动;而TIM2这样的通用定时器,则更适用于简单的PWM调光。选择STM32F103的一个重要原因是其丰富的外设文档和成熟的生态系统——从标准外设库到HAL库,再到直接寄存器操作,开发者可以根据需求灵活选择开发方式。
硬件小贴士:STM32F103的定时器输出引脚多数复用为GPIO的复用功能,需要特别注意数据手册中的"Alternate function mapping"表格。比如TIM1_CH1对应PA8引脚,TIM2_CH1对应PA0引脚。
2. PWM核心原理与STM32实现机制
2.1 PWM的本质与参数关系
PWM(脉冲宽度调制)本质上是通过调节占空比来等效实现模拟量输出。在STM32中,这个功能由定时器的捕获/比较单元实现。关键参数有三个:
- 定时器时钟频率(Timer Clock)
- 自动重装载值(ARR)
- 捕获比较值(CCRx)
PWM频率计算公式为:
code复制PWM频率 = Timer Clock / (PSC + 1) / (ARR + 1)
占空比则由CCRx值决定:
code复制占空比 = CCRx / (ARR + 1) * 100%
2.2 STM32的PWM模式详解
STM32的定时器支持两种PWM模式:
- PWM模式1:CNT < CCRx时输出有效电平,CNT ≥ CCRx时输出无效电平
- PWM模式2:电平逻辑与模式1相反
在电机控制中,我通常选择PWM模式1,因为这种模式下占空比增加意味着有效电平时间延长,更符合直觉。而对于某些需要反向逻辑的外设,比如共阳极LED电路,则可以选择PWM模式2。
调试经验:在Keil调试模式下,可以打开"Lo
