什么是中断呢?可以举一个日常生活中的例子来说明,假如你正在给看书,电话铃响了。这时,你放下手中的书,记录下你看书的页数,去接电话。通话完毕,再继续从原来的位置继续看书。这个例子就表现了中断及其处理过程:电话铃声使你暂时中止当前的看书的动作,而去处理更为急需处理的事情(接电话),把急需处理的事情处理完毕之后,再回头来继续原来的事情。
在这个例子中,电话铃声称为"中断请求",你暂停看书去接电话叫作"中断响应",接电话的过程就是"中断处理",相应地,在STM32执行程序的过程中,由于出现某个特殊情况(中断异常),使得CPU中止正在执行程序,而转去执行处理中断服务程序,待中断服务程序执行完毕,再返回断点继续执行原来的程序,这个过程称为中断。
1、中断源
中断源也就是导致产生中断的原因,在STM32中打断正常工作(程序)的异常,我们就叫它为中断源。
2、中断执行的过程
- 主程序正常运行
- 产生中断异常,CPU保存当前程序执行的位置
- 进入中断服务函数
- 处理中断服务函数
- 中断服务函数处理完成后,返回断点处
- 程序继续运行
上图中,步骤:3~5,只有在中断异常产生是才会执行,中断异常产生则步骤3~5立即执行。
3、中断的意义
生活中的情景:假设你有一个朋友来拜访你,但是由于不知道何时到达,你只能在大门等待,于是什么事情也干不了。如果在门口装一个门铃,你就不必在门口等待而去干其它的工作,朋友来了按门铃通知你,你这时才中断你的手头上的工作去开门,这样就避免等待和浪费时间。
STM32:串口阻塞接收机制原理是只有接收到一个字节的数据,才继续往下执行。这种机制的弊端:CPU无法及时处理其他的代码。
例如:
STM32中断机制:如果用了串口中断,则不需要阻塞等待接收数据。
4、中断优先级和中断嵌套
4.1、中断优先级
生活中的情景:你正看书,如果在电话铃响的同时,门铃也响了,那么你将在"接电话"和"开门"这两个中断请求中选择,先响应哪一个请求。考虑优先级的问题。如果"开门"比"接电话"重要(或者说"开门"比"接电话"的优先级高),那么就应该先开门,然后再接电话,接完电话后再回头来继续看书。这就是说,当同时有多个中断请求时,应该先响应优先级较高的中断请求。
STM32:如果有多个中断,则每个中断都应给分配一个优先级。举例:串口1中断需要有自己的优先级,串口2的中断也要有自己优先级。
4.2、中断嵌套