十七很忙! 2024-06-20 20:55 采纳率: 0%
浏览 726

STM32触发中断后无法返回主函数或上一级中断

触发中断后不能返回主函数,主函数卡在被中断的地方,但是中断还可以被正常触发,嵌套中断也会令上一级中断和主函数卡在被中断的地方。

img

img

  • 写回答

5条回答

  • 阿里嘎多学长 2024-06-20 20:55
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据你提供的代码片段,我们可以从以下几个方面来分析和解决STM32中断处理后无法返回主函数的问题:

    1. 中断初始化和配置

      • 检查NVIC_InitEXTI_Init函数的配置是否正确。确保中断通道被正确初始化,优先级设置合理,并且中断触发模式(上升沿触发、下降沿触发等)符合预期。
    2. GPIO操作

      • 确保GPIO模式和速度设置正确。例如,如果某个GPIO用作中断输入,它应该被配置为输入模式。
    3. 中断服务函数(ISR)

      • 检查EXTI9_5_IRQHandlerEXTI3_IRQHandler函数中的逻辑。确保在中断处理完成后,有适当的代码来恢复主函数的执行。
      • 避免在中断服务函数中执行耗时的操作或调用阻塞函数。
    4. 中断标志清除

      • 确保在中断服务函数的末尾调用EXTI_ClearITPendingBit来清除中断标志。这是必须的步骤,以确保中断可以被再次触发。
    5. 避免无限循环或阻塞操作

      • 检查中断服务函数中是否有可能导致程序挂起的无限循环或阻塞调用。
    6. 主函数的阻塞

      • 检查主函数中是否有可能导致程序阻塞的代码,特别是在中断被触发时。
    7. 中断优先级

      • 确保中断优先级设置正确,以避免高优先级中断阻塞低优先级中断的执行。
    8. 硬件问题

      • 检查硬件连接是否正确,确保没有硬件故障导致中断无法正确触发或清除。
    9. 固件问题

      • 确保固件没有其他逻辑错误,如中断使能位未设置,或者中断通道配置错误。
    10. 调试

      • 使用调试工具逐步执行代码,观察中断触发时程序的行为,定位问题发生的具体位置。

    针对你的问题,以下是一些可能的解决方案:

    • 确保EXTI_ClearITPendingBit在每个中断服务函数的末尾被调用。
    • 检查是否有其他中断服务函数可能影响当前中断的处理。
    • 确保没有在中断服务函数中调用可能导致阻塞的函数。
    • 使用调试器检查中断服务函数的执行流程,确保没有逻辑错误。

    如果你需要更具体的帮助,可以提供更详细的代码或错误信息。同时,我可以提供一些参考链接,帮助你进一步了解STM32中断处理和相关配置:

    请注意,以上链接可能需要根据你的具体情况进行调整,以确保它们指向正确的资源。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月20日