You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F401RE Nucleo板PA5引脚PWM输出故障求助

Nucleo开发板PA5引脚PWM输出故障排查与修复

以下是你的代码中存在的关键问题及修复方案:

  • 计数器未使能:TIM2计数器必须启动才能生成PWM信号,你的代码遗漏了核心的使能配置:

    TIM2->CR1 |= TIM_CR1_CEN; // 启动TIM2计数器
    
  • 通道映射错误:PA5对应TIM2的通道2(CH2),但你当前配置的是通道1(CH1)相关寄存器,需修改为通道2的配置:

    // 替换原CH1的配置代码
    TIM2->CCMR1 |= (0x6UL << TIM_CCMR1_OC2M_Pos); // CH2配置为PWM模式1(OC2M=110)
    TIM2->CCMR1 |= TIM_CCMR1_OC2PE; // 使能CH2预装载寄存器
    TIM2->CCER &= ~TIM_CCER_CC2P; // CH2输出高电平有效(清除CC2P位)
    TIM2->CCER |= TIM_CCER_CC2E; // 使能CH2输出
    
  • GPIO复用功能位配置错误:PA5的复用功能位位于AFR[0]的第20-23位(每个引脚占4位,引脚5的偏移为5*4=20),你当前的配置仅修改了引脚1的复用位,正确配置:

    GPIOA->AFR[0] |= (1UL << 20); // PA5复用为AF1(TIM2对应的复用功能)
    
  • 缺少PWM占空比配置:必须设置比较寄存器CCR2来定义PWM的占空比,示例设置50%占空比(对应ARR=1000):

    TIM2->CCR2 = 500;
    

修复后的完整配置代码示例:

RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

GPIOA->MODER |= (0x2UL << GPIO_MODER_MODE5_Pos); // 设置PA5为复用模式
GPIOA->AFR[0] |= (1UL << 20); // PA5复用为AF1(TIM2)

TIM2->PSC = 840 - 1;     // 设置预分频器(84MHz / 840 = 100kHz)
TIM2->ARR = 1000;         // 设置自动重载值(PWM周期为10ms)
TIM2->CCMR1 |= (0x6UL << TIM_CCMR1_OC2M_Pos); // CH2 PWM模式1
TIM2->CCMR1 |= TIM_CCMR1_OC2PE; // 使能CH2预装载
TIM2->CR1 |= TIM_CR1_ARPE; // 使能ARR预装载
TIM2->CCER &= ~TIM_CCER_CC2P; // CH2高电平有效
TIM2->CCER |= TIM_CCER_CC2E; // 使能CH2输出
TIM2->CCR2 = 500; // 设置50%占空比
TIM2->EGR |= TIM_EGR_UG; // 生成更新事件,加载预装载值
TIM2->CR1 |= TIM_CR1_CEN; // 启动TIM2计数器

// 注:若不需要中断,可移除以下中断相关配置
TIM2->CR1 |= TIM_CR1_URS;
TIM2->DIER |= (TIM_DIER_CC1IE | TIM_DIER_UIE);
TIM2->SR &= ~(TIM_SR_CC1IF | TIM_SR_UIF);

内容的提问来源于stack exchange,提问作者Petar Ristic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:44:49