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
相关产品推荐
相关产品推荐

