1. STM32 PWM输出原理与实战指南
作为一名嵌入式开发工程师,掌握PWM技术是必备技能。PWM(脉冲宽度调制)广泛应用于电机控制、LED调光、电源管理等领域。相比51单片机需要软件模拟PWM,STM32的硬件PWM具有CPU零占用、精度高、通道多等显著优势。
1.1 PWM基础概念与STM32优势
PWM通过固定周期内调节高电平持续时间(占空比)来控制平均输出电压。就像调节水龙头:周期固定,开闸时间越长,出水量越大。
STM32的硬件PWM与51单片机软件模拟PWM对比:
| 特性 | 51单片机软件PWM | STM32硬件PWM |
|---|---|---|
| 执行方式 | CPU中断手动翻转IO | 硬件自动控制 |
| 最高频率 | 通常<10KHz | 可达36MHz |
| 通道数量 | 一般2路 | 单定时器4路 |
| 时序稳定性 | 易受干扰 | 绝对稳定 |
| CPU占用 | 100%中断时间 | 零占用 |
2. STM32 PWM工作原理详解
2.1 定时器PWM输出机制
STM32通用定时器通过捕获/比较寄存器(CCR)与计数器(CNT)比较,自动控制IO电平:
- CNT从0开始递增
- CNT < CCR时输出高电平
- CNT > CCR时输出低电平
- CNT达到ARR值后重置,开始新周期
2.2 关键参数计算
PWM频率计算公式:
code复制F = 定时器时钟 / [(PSC+1) × (ARR+1)]
占空比计算公式:
code复制D = CCR / (ARR+1) × 100%
常用配置示例:
- 1KHz PWM:PSC=71,ARR=999
- 50Hz舵机控制:PSC=71,ARR=19999
3. 硬件PWM实战配置
3.1 寄存器级配置
以TIM2_CH1(PA0)为例:
c复制// 开启时钟
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// 配置PA0为复用推挽输出
GPIOA->CRL |= GPIO_CRL_MODE0_1 | GPIO
