[STM32F4] STM32F407定时器编码器模式下,不进入中断

[复制链接]
 楼主| classroom 发表于 2025-2-27 12:15 | 显示全部楼层 |阅读模式
编码器配置的代码如下
void Encode_Init(void)
{
        GPIO_InitTypeDef         GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;
        TIM_ICInitTypeDef        TIM_ICInitStructure;
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//使能GPIOD时钟


                GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4);
                GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_TIM4);
      
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;//
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化

      
        TIM_TimeBaseInitStructure.TIM_Period = 65535;         //自动重装载值
        TIM_TimeBaseInitStructure.TIM_Prescaler=0;  //定时器分频
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseInitStructure.TIM_ClockDivision=0; //设置时钟分割:TDTS=Tck_tim
        TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//初始化TIM4
      
      
      
                TIM_EncoderInterfaceConfig(TIM4,TIM_EncoderMode_TI12,TIM_ICPolarity_BothEdge,TIM_ICPolarity_BothEdge);
                TIM_ICStructInit(&TIM_ICInitStructure);
    TIM_ICInitStructure.TIM_ICFilter = 0;  //输入滤波器
    TIM_ICInit(TIM4, &TIM_ICInitStructure);
    TIM_ClearFlag(TIM4, TIM_FLAG_Update);  //清楚所有标志位
    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //允许中断更新
    TIM4->CNT = 0;
               
    TIM_Cmd(TIM4, ENABLE);  //使能TIM4
}

//定时器3中断服务函数
void TIM4_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中断
        {
                printf("kkkkkkkkk");
        }
        TIM_ClearITPendingBit(TIM4,TIM_IT_Update);  //清除中断标志位
}
香水城 发表于 2025-2-27 14:44 | 显示全部楼层
1、确认中断配置有无问题
2、编码器到底开始计数没有,是否发生计数溢出?
夜阑风雨 发表于 2025-3-14 01:21 | 显示全部楼层
STM32F407 的定时器编码器模式下,如果无法进入中断,可能是由于定时器中断未启用

别乱了阵脚 发表于 2025-3-14 02:32 | 显示全部楼层
NVIC 中断未配置也会这样的,比如NVIC(嵌套向量中断控制器)未配置定时器中断。
中断优先级设置过低,导致其他高优先级中断抢占。

远山寻你 发表于 2025-3-14 02:54 | 显示全部楼层
NVIC 中断未配置也会这样的,比如NVIC(嵌套向量中断控制器)未配置定时器中断。

暖了夏天蓝了海 发表于 2025-3-14 03:43 | 显示全部楼层
中断优先级设置过低,导致其他高优先级中断抢占。

一秒落纱 发表于 2025-3-14 04:00 | 显示全部楼层
定时器的编码器模式配置不正确。这也会出问题的

光辉梦境 发表于 2025-3-14 05:34 | 显示全部楼层
一般来说,可能是中断标志未清除,导致无法再次触发中断。

冰春彩落下 发表于 2025-3-14 06:23 | 显示全部楼层
可能是定时器未启动,导致无法计数和触发中断。

淡漠安然 发表于 2025-3-14 07:48 | 显示全部楼层
编码器的信号未正确连接到定时器的输入引脚。可以检查编码器的信号线是否连接到定时器的 TIMx_CH1 TIMx_CH2 引脚。

三生万物 发表于 2025-3-14 08:39 | 显示全部楼层
使用示波器检查编码器信号是否正常。这样可以判断编码器是否正常

江河千里 发表于 2025-3-14 09:53 | 显示全部楼层
定时器的时钟未启用。确保定时器的时钟已启用。

别乱了阵脚 发表于 2025-3-14 10:32 | 显示全部楼层
未实现定时器的中断服务函数。可能是中断函数没写对呢?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

526

主题

3258

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部