1. STM32F103RC定时器PWM输出实战指南
在嵌入式开发中,PWM(脉冲宽度调制)是最基础也最实用的功能之一。我最近用STM32CubeMX为STM32F103RC配置TIMER2输出PWM时,发现网上教程要么过于简单,要么跳过了关键细节。今天我就把整个配置过程、原理分析和调试心得完整分享出来,特别适合刚接触HAL库的开发者参考。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件与开发环境准备
2.1 硬件选型解析
STM32F103RC这款Cortex-M3芯片有4个通用定时器(TIM2-TIM5),每个定时器有4个独立通道。选择TIMER2是因为:
- 它具备完整的PWM输出功能
- 不与其他常用外设(如USB、CAN)冲突
- 所有IO口均可复用为TIM2通道输出
2.2 软件工具链配置
建议使用以下组合:
- STM32CubeMX 6.6.1(最新稳定版)
- Keil MDK 5.37(或STM32CubeIDE)
- ST-Link V2调试器
注意:安装CubeMX时务必勾选STM32F1系列HAL库,否则找不到对应芯片型号
3. CubeMX工程配置详解
3.1 时钟树配置关键点
在RCC配置中:
- 选择外部高速晶振(HSE)
- 系统时钟设为72MHz
- APB1预分频器设为2(TIM2时钟为36MHz)
计算公式:
code复制PWM频率 = TIM2时钟 / (PSC + 1) / (ARR + 1)
例如要生成1kHz PWM:
- 设PSC=35 → 计数器时钟=1MHz
- 设ARR=999 → 周期=1000个计数=1ms
3.2 TIM2参数配置步骤
- 在Pinout视图找到TIM2
- 选择Channel1为"PWM Generation CH1"
- 配置Parameter Settings:
- Prescaler (PSC): 35
- Counter Mode: Up
- Period (ARR): 999
- Pulse: 初始占空比50%(设为500)
- CH Polarity: High
3.3 GPIO复用配置技巧
PA0默认是TIM2_CH1的复用功能:
- 在GPIO设置中将PA0设为Alternat
