一、中断介绍
1. 中断是什么
中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序
。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。
中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
中断分为同步中断
和异步中断
:
-
同步中断:同步中断是当指令执行时由控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。
-
异步中断:异步中断是由其他硬件设备依照 CPU时钟信号随机产生的。
通常所说的中断指的是异步中断
,我们将同步中断称为异常。(异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的)
2. 中断的作用
跟据中断的定义,我们可以通过中断使处理器转而去优先运行正常控制流之外的代码。
当中断信号达到肘,CPU必须停止它当前正在做的事情,并且切换到一个另一个活动。为了做到这就要在内核态堆钱保存程序计数器的当前值 (寄存器的内容) ,并把与中断类型相关的地址放进程序计数量。
中断处理
:指CPU响应中断,转入中断处理程序,系统开始处理中断。
中断响应
:指CPU收到中断请求后转向相应的事件处理程序。
中断屏蔽
:指在中断请求产生后,系统用软件方式有选择地封锁部分中断而允许其余部分中断仍能得到响应。
3. 中断类型及优先级
中断类型:
- 硬中断:通过处理器中断信号线产生的中断
- 软中断:通过非法指令或特殊指令触发的中断
中断优先级:
- 多个中断同时出现时,处理器先响应高优先级的中断
- 低优先级中断的ISR执行时,可以被高优先级中断再次打断
- ISR比App Code拥有更高的执行优先级
二、中断方式点灯
1. 新建工程
-
创建一个
STM32F407
的STM2CubeMX
项目:
-
外设设置
设置指示灯LED引脚PF9
,设置引脚模式为输出模式GPIO_Output
。
设置按键引脚PF8
,设置引脚为外部中断功能,PF8
与外部中断线EXIT8
连接GPIO_EXIT8
对于LED对应的PF9
管脚,默认设置即可,名字设为LED
对于开关对应管脚PF8
,设置其触发方式为上升沿触发External Interrupt Mode with Rising edge trigger detection
User Label
处设置名字为F8_EXTI
-
使能对应的外部中断线,点击
Enabled
-
设置
Project Manager
后,生成代码:
2. 编写代码
打开工程,搜索HAL_GPIO_EXTI_Callback
函数
该函数为外部中断回调函数,__weak表示此函数为虚函数,需要用户重写。
在main.c文件中找个地方重新写如下:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if( GPIO_Pin == F8_EXTI_Pin)//判断外部中断源
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);//翻转LED状态
}
}
编译一下,没有出错
3. 烧录验证
- 将代码烧录到核心板中
- 电路连接
三、总结
本文通过了解中断的相关知识,基于STM32F407使用STM32CubeMX实现了开关接高电平时,LED亮灯;接低电平时,LED灭灯的点灯操作。