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

STM32F401RET6输入捕获模式中断未触发问题求助

排查TIM5输入捕获中断未触发的问题

以下是针对你代码的逐一排查和修复点:

1. 必须清除中断标志位

中断触发后,必须手动清除TIM5->SR寄存器中的CC3IF标志,否则NVIC会持续认为中断未处理,后续中断无法正常触发。修改中断处理函数:

void TIM5_IRQHandler (void){
    if(TIM5->SR & TIM_SR_CC3IF){
        value1 = (uint32_t)READ_REG(TIM5->CCR3);
        CLEAR_BIT(TIM5->SR, TIM_SR_CC3IF); // 清除捕获中断标志
    }
    // 若需处理更新中断,同步清除UIF标志
    if(TIM5->SR & TIM_SR_UIF){
        CLEAR_BIT(TIM5->SR, TIM_SR_UIF);
    }
}

2. 补全GPIO上下拉配置

PA2默认是浮空输入,若外部信号驱动能力弱或电平不稳定,无法被正确识别。根据你的输入信号电平,添加上下拉配置:

// 示例:配置为上拉输入(适配低电平有效的信号)
MODIFY_REG(GPIOA->PUPDR, GPIO_PUPDR_PUPDR2, 1U << GPIO_PUPDR_PUPDR2_Pos);
// 若信号为高电平有效,改为下拉输入
// MODIFY_REG(GPIOA->PUPDR, GPIO_PUPDR_PUPDR2, 2U << GPIO_PUPDR_PUPDR2_Pos);

3. 修正定时器预分频配置(不影响中断,但影响频率计算)

你期望定时器时钟为10kHz,但当前PSC=15的配置不符合预期:STM32F401的APB1时钟默认是42MHz,定时器时钟为APB1时钟×2(预分频>1时)即84MHz,实际计数频率为84MHz/(15+1)=5.25MHz。若要得到10kHz,PSC应设置为:

WRITE_REG(TIM5->PSC, 8399U); // 84MHz/(8399+1)=10kHz

4. 验证外部输入信号有效性

  • 确保输入信号电平符合STM32 IO标准(高电平≥2V,低电平≤0.8V)。
  • 用示波器测量PA2引脚,确认有清晰的边沿变化脉冲输入。

5. 确认NVIC配置合理性

你已启用TIM5中断并设置优先级,需确保:

  • 系统中无更高优先级中断持续占用CPU(你的代码中无其他中断,此点可忽略)。
  • 中断优先级分组配置合法(默认分组下优先级1有效)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:52:21