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

STM32F0引脚PA1、PA5编码器模式配置后TIM2->CNT无变化问题

编码器模式下TIM2->CNT始终为0的问题排查与解决

问题场景

已将增量编码器连接至PA1、PA5引脚,配置TIM2为编码器模式后,读取TIM2->CNT始终为0,无法随编码器旋转更新数值。

核心问题与修正方案

1. GPIO与TIM初始化顺序颠倒

TIM模块初始化时,对应的GPIO引脚尚未配置为复用功能模式,导致TIM无法捕获引脚输入信号。必须先完成GPIO的模式、复用功能配置,再初始化TIM。

2. 未配置GPIO上下拉电阻

编码器引脚默认处于浮空状态,无法稳定采集A/B相的电平变化,需根据编码器输出类型配置上拉或下拉电阻(多数增量编码器为推挽输出,建议配置上拉)。

3. GPIO MODER配置未清除原有状态

直接使用|=操作符配置MODER寄存器,若引脚原有模式非输入(如模拟模式),会导致最终模式错误。需先清零对应位,再设置复用功能模式。

4. 可选:编码器极性匹配(按需调整)

若编码器A/B相的电平变化与TIM配置的极性不匹配,也会导致计数异常。可根据编码器 datasheet,调整TIM2->CCER中的CC1P/CC2P位(置1表示反转极性)。

修正后的完整代码

void init_hardware_timer_version(void)
{
    // 1. 启用GPIOA和TIM2时钟
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

    // 2. 配置GPIO引脚
    // 先清除PA1和PA5的MODER原有配置
    GPIOA->MODER &= ~(GPIO_MODER_MODER1_Msk | GPIO_MODER_MODER5_Msk);
    // 设置为复用功能模式(10)
    GPIOA->MODER |= GPIO_MODER_MODER1_1 | GPIO_MODER_MODER5_1;
    
    // 配置AF1对应TIM2_CH2(PA1)和TIM2_CH1(PA5)
    GPIOA->AFR[0] &= ~((0xF << (1*4)) | (0xF << (5*4)));
    GPIOA->AFR[0] |= (1 << (1*4)) | (1 << (5*4));
    
    // 配置上拉电阻,稳定引脚电平
    GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1_Msk | GPIO_PUPDR_PUPDR5_Msk);
    GPIOA->PUPDR |= GPIO_PUPDR_PUPDR1_0 | GPIO_PUPDR_PUPDR5_0;

    // 3. 初始化TIM2编码器模式
    TIM2->ARR = 12; // 自动重载值可按需调整
    
    // 配置CC1和CC2为输入模式,映射到TI1/TI2
    TIM2->CCMR1 &= ~(TIM_CCMR1_CC1S_Msk | TIM_CCMR1_CC2S_Msk);
    TIM2->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;
    
    // 配置捕获极性(根据编码器调整,此处为默认不反转)
    TIM2->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);
    
    // 编码器模式3:TI1和TI2的边沿都触发计数
    TIM2->SMCR &= ~TIM_SMCR_SMS_Msk;
    TIM2->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1;
    
    // 启用计数器
    TIM2->CR1 |= TIM_CR1_CEN;
}

验证步骤

  1. 检查编码器硬件连接:确认A相接PA5、B相接PA1,电源和地线连接正确
  2. 烧录修正后的代码,旋转编码器后读取TIM2->CNT,观察数值是否随旋转方向递增/递减
  3. 若仍无变化,可尝试反转CC1P或CC2P位,调整极性匹配编码器输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:40:56