中断简介
Author:余生
想象一下你在图书馆安静地看书,突然手机响了。你暂停看书,先接电话处理事情,处理完再继续看书。这种 “暂停当前工作去处理更紧急的事情” 的机制,在单片机里就叫中断。
它是怎么工作的?
在 STM32 中,中断系统允许 CPU 在执行主程序时,能够及时响应外部或内部发生的事件,并进行相应的处理,而不会错过重要的信号或数据。它就像一个 “优先级插队” 机制。
主要组成部分
- 中断源:就是触发中断请求的地方。
- 外部中断:比如按下按键、传感器检测到变化等。
- 内部中断:比如定时器溢出、串口接收数据完成等。
- 中断向量表:记录着每个中断源对应的中断服务函数(ISR)地址。当某个中断发生时,CPU 会根据中断向量表跳转到相应的 ISR 运行。
- 中断优先级:如果有多个中断同时发生,CPU 需要知道哪个更重要,先处理哪个。STM32 支持设置中断的优先级和子优先级来决定处理顺序。
- 中断使能与失能:不是所有中断都需要处理,可以通过配置来选择哪些中断是开启状态,可以触发;哪些是关闭状态,即使发生了也不会被打扰。
在 STM32 里怎么用?
使用中断主要分为以下几个步骤:
- 使能全局中断:告诉 STM32 可以开始接受中断请求。
- 配置具体外设的中断功能:比如你想让按键按下时触发中断,就需要配置好 GPIO 相关的中断功能。
- 编写中断服务函数(ISR):这是当中断发生时,CPU 会执行的代码段。这个函数必须尽可能短小精悍,快速完成任务后返回主程序。
- 使能对应中断:确保该中断源已经被使能,可以触发中断。
举个例子
假设你正在写一个程序控制 LED 灯闪烁,同时需要检测用户是否按下了按钮。如果不用中断,你可能需要不断地轮询(polling)检查按钮的状态,这样既浪费 CPU 资源又效率低下。
使用中断的话,当按钮被按下时,会产生一个中断信号,CPU 会暂停当前的 LED 闪烁任务,转向执行预先设定好的中断服务函数,如改变 LED 的颜色或者亮度,完成后继续回到原来的 LED 闪烁任务。
一句话总结:
中断是一种可以让 CPU 暂时放下手头工作,去处理更重要的突发事件的机制,通过这种方式可以使程序更加高效和响应迅速。