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

NUCLEO-F042K6开发板TIM2_CH2无法输出PWM信号问题排查

问题分析与解决办法

针对你在NUCLEO-F042K6上使用TIM2_CH2输出PWM失败的问题,代码中有两处关键错误:

1. GPIO复用功能配置错误

TIM2_CH2对应PA1引脚的复用功能是AF1,但你的代码中错误地配置为AF2:

// 错误代码:配置为AF2
GPIOA->AFR[0] |= (0x2UL << GPIO_AFRL_AFSEL1_Pos);

需要修正为AF1(0x1UL):

// 正确配置:AF1对应TIM2_CH2
GPIOA->AFR[0] |= (0x1UL << GPIO_AFRL_AFSEL1_Pos);

2. TIM_CR1的CMS位配置错误

你直接使用TIM2->CR1 |= TIM_CR1_CMS,这会将CMS的两位同时置1(对应中央对齐模式3)。如果你的应用不需要中央对齐模式,应该保持默认的边缘对齐模式(CMS=00),否则会导致定时器计数行为异常,影响PWM输出。

如果不需要中央对齐,删除该行;如果确实需要中央对齐,需明确设置具体模式(比如TIM_CR1_CMS_0对应模式1,TIM_CR1_CMS_1对应模式2)。

修正后的完整代码

void TIM2_setup(void){
    // Enable Timer 2 clock
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    // I/O port A clock enable
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN;

    // Configure PA1 to Alternate function mode
    GPIOA->MODER |= (0x2UL << GPIO_MODER_MODER1_Pos);
    // Correct AF1 selection for TIM2_CH2 on PA1
    GPIOA->AFR[0] |= (0x1UL << GPIO_AFRL_AFSEL1_Pos);

    // Optional: Remove or adjust CMS if you don't need center-aligned mode
    // TIM2->CR1 |= TIM_CR1_CMS;
    TIM2->CR1 |= TIM_CR1_ARPE;
    // PWM mode 1 for CH2
    TIM2->CCMR1 |= (0x6UL << TIM_CCMR1_OC2M_Pos);
    TIM2->CCMR1 |= TIM_CCMR1_OC2PE;
    TIM2->CCER |= TIM_CCER_CC2E;

    TIM2->ARR = 8;
    TIM2->CCR2 = 6;
    TIM2->PSC = 0;
    TIM2->CNT = 0;

    TIM2->CR1 |= TIM_CR1_CEN;
}

额外验证建议

  • 确认PA1引脚在NUCLEO板上的连接:NUCLEO-F042K6的PA1对应Arduino引脚A1,可直接用示波器测量该引脚的输出。
  • 检查TIM2的时钟源:APB1时钟默认是48MHz(STM32F042的系统时钟),PSC=0时定时器时钟为48MHz,ARR=8对应PWM周期为(8+1)/48MHz = 187.5ns,CCR2=6对应占空比约66.7%。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:13:10