【洋桃技术支持】编号0002:中断函数调用冲突问题
提问:
杜老师,我的程序进入到中断之后,执行完一次中断就不返回主函数了,请问这是什么原因呢?
问题的扩展:
在开启中断函数后 (下图中的NVIC_Configuration函数),程序编译正常,但在单片机上运行时则会发生各种未知的错误。关掉中断后错误消失。这种因开启中断而产生的错误是什么原因导致的?

解答:
关于中断函数出错的问题,有很多可能的原因。比如中断重复触发、函数嵌套错误、中断向量控制器设置错误、电路设计问题等。
在使用洋桃开发板做中断实验的案例中,因为使用了洋桃现有硬件,可排除因电路设计导致的问题。如果是使用了洋桃的示例程序,也可以排除中断向量控制器设置错误的问题。这里要注意:如果您不是用我们的洋桃1号开发板,不是用我们的示例程序,则需要注意这两处问题。最后可能的就是中断重复触发、函数嵌套错误问题。
1,中断重复触发问题
重复触发一般出现在外部电平触发的情况,比如我们设置某一个IO接口在低电平时触发中断,当接口为低电平后,中断触发。可是中断处理函数执行完成退出后,外部接口还是低电平,这时又会再一次进入中断处理函数,只要低电平不离开,中断就会一直循环。给开发者的感觉就是中断不能退回到主函数的假象。
解决这个问题可以通过在中断触发后断开触发源,也就是让接口强制拉高,这样观察中断是否回到主函数。对于这种问题最好的方法就是把IO接口设置为使用“上升沿”或“下降沿”触发,这样可以保证只有接口从高到低电平,或从低到高电平的一瞬间触发,而在电平稳定在高或低的时候不重复触发。

本文分析了单片机中断函数在执行后无法返回主函数的常见问题,包括中断重复触发和函数嵌套错误。提出了中断重复触发时通过改变触发方式或断开触发源来避免循环中断,以及避免主函数和中断函数调用相同子函数导致的数据错乱。解决方案包括使用独立的延时函数和保护共享数据的方法。
最低0.47元/天 解锁文章
1809

被折叠的 条评论
为什么被折叠?



