1. STM32定时器与PWM基础认知
第一次接触STM32的定时器模块时,我被其功能多样性震撼到了。作为嵌入式开发中最常用的外设之一,STM32的定时器远不止简单的计时功能,特别是其PWM输出能力,在电机控制、LED调光等场景中发挥着关键作用。以常见的STM32F103系列为例,其定时器资源包括基本定时器(TIM6/TIM7)、通用定时器(TIM2-TIM5)和高级定时器(TIM1/TIM8),每种类型在PWM生成上都有其特定应用场景。
通用定时器TIM2-TIM5是PWM应用的主力,它们具备:
- 16位或32位(部分型号)向上/向下自动重装载计数器
- 4个独立通道,每个通道均可配置为PWM输出
- 支持互补输出的死区时间控制(高级定时器)
- 时钟源可选择内部时钟、外部信号或其它定时器联动
实际项目中遇到过新手容易混淆的概念:定时器的"时钟频率"与"计数频率"。前者指定时器时钟源的输入频率(如72MHz),后者是经过预分频后的实际计数频率,直接影响PWM分辨率。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PWM硬件工作原理深度解析
2.1 核心寄存器配置逻辑
配置PWM输出需要理解几个关键寄存器的作用机制:
- TIMx_ARR (自动重装载寄存器):决定PWM周期
- TIMx_CCRx (捕获/比较寄存器):决定占空比
- TIMx_PSC (预分频器):调整计数频率
- TIMx_CCMRx (捕获/比较模式寄存器):设置PWM模式
以配置TIM3_CH2通道为例,典型初始化流程如下:
c复制// 时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 时基配置
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_TimeBaseStruct.TIM_Prescaler = 72 - 1; // 72MHz/72 = 1MHz计数频率
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStruct.TIM_Period = 1000 - 1; // PWM周期=1000个计数
TIM_TimeBaseStruct.TIM_ClockDivis
