STM32中断分析

中断一直是单片机中非常重要的一个内容,本此我们来分析一下STM32中的中断模块。希望本此的分享能够让大家对中断有一个比较清晰的认识。

单片机中,通知事件发生的中断信号一般来自于外部INT引脚的输入信号,或是来自定时器、串行I/F等内部的外围功能电路的信号。接收中断信号的是中断控制器。中断控制器根据产生的中断信号的优先级,按优先级顺序发送给CPU。当然,被设定为无效的设备所传送来的中断信号是不会传给CPU的,您也可以屏蔽或忽略它们。CPU根据从中断控制器接收到的指示,执行相应的程序(中断处理)。

中断就是程序在正常运行的过程中发生了不正常的事情,必需要暂停一下去处理这个不正常的事情,其次跑回来继续干正常的事情。它是M4内核的一种实时硬件查询机制。它的发生条件是未知的。我们把这种不正常的事情呢称作异常,异常事件会发生,而发生的时长不确定,一旦发生了异常事件的话立刻去执行。

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程和毕业设计指导,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像白色字体加我也能领取哦,记得口令一哥///

正常运行的程序是主函数(main),代码是由CPU运行的。CPU在主函数里运行是正常的执行过程,当在这个过程中忽然发生了异常事件(中断),CPU必需暂停当前的工作(设下断点),其次跑去能处理这个异常事件的函数中做异常处理(中断效劳函数),处理完这个异常事件后(执行完中断效劳函数),CPU就会跑回刚刚的断点处,继续正常运行下去。

这个过程里面有个设下断点的过程,这个断点是以栈的方式存储的,如图所示:

打开网易新闻 查看精彩图片

同时,中断也是可以嵌套的,在发生中断事件的过程中,可以有优先级高于上一个异常事件的异常来打断上一个中断,过程可以如图所示:

打开网易新闻 查看精彩图片

下面想要分析的是主函数与中断效劳函数的关系,我们都知道主函数能够调用子函数,子函数也能够调用子函数,而子函数不能调用主函数。对于中断效劳函数来说,中断效劳函数与主函数不存在调用关系,它们是平级的。

对于中断效劳函数我们须要注意的是,中断效劳函数是有对应的名称的,我们最好自己去复制,不用自己手打,容易出错,假如错任何一个字母的话,就会成为一个普通的函数。同时,中断效劳函数自身都是没返回值没形参的,因此不能随意写成别的。

对于中断的优先级,中断的优先级和C语言的运算符的优先级一样,数字越小,优先级越高。在中断分为三种优先级:占先优先级,次级优先级也叫响应优先级,最后一个是自然优先级。由于自然优先级根本不参与判断优先级高低,因此我们省略自然你优先级即可。

假如此时有三个事件A、B、C,他们的优先级分别为,A:占先优先级1,次级优先级5,B:占先优先级2,次级优先级2,C: 占先优先级2,次级优先级3。那么假如事件A与事件B同时到来:先执行A;事件B与事件C同时到来:先执行B;事件C正在执行,事件B到来:事件B不能打断事件C的执行。事件C正在执行,事件A到来:事件B能够打断事件C的执行。所以总结就是,假如两个时长同时到来,先鄙偃较占先优先级,再比较次级优先级,按高低分先后;其次独有后面的事件占先优先级高才能够打断前面的事件,否则不行。

中断的优先级会依照ST公司的优先级分组表来确定事件的占先优先级和次级优先级,它是由ARM公司下的ARM架构取出来的局部优先级作为选取的分组的。

打开网易新闻 查看精彩图片

理论部分暂时分析这么多,相信大家对于STM32的中断内容有了一个初步的认识,希望大家能够自己利用更多空余事件多多了解其他的内容,丰富自己的知识储备

想要学习单片机的朋友 ,做毕业设计的同学,关注我们,口令一哥,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

-END-

*本文系网络转载,版权归原作者所有,如有侵权请联系删除