一、中断介绍
1.中断概念
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
2.中断过程
中断过程包括:
- 中断发出中断请求
- 判断当前处理机是否允许中断和该中断源是否被屏蔽
- 优先权排队
- 处理机执行完当前指令或当前指令无法执行完,则立即停止当前程序,保护断点地址和处理机当前状态,转入相应的中断服务程序
- 执行中断服务程序
- 恢复被保护的状态,执行“中断返回”指令回到被中断的程序或转入其他程序
3.中断目的
采用中断方式工作有很多好处,包括:
- 提高计算机系统效率,通过中断协调处理机和外部设备的处理速度
- 维持系统可靠正常工作,通过中断系统向操作系统发出请求,由操作系统来实现人为干预
- 满足实时处理要求,随时向处理机发出中断请求,随时进行响应
- 提供故障现场处理手段,如果出现故障可以立刻发起中断请求,提高系统可靠性
4.中断优先级
如果在同一时刻,有多个中断源发起中断请求,处理机只会对优先级高的进行应答,然后再处理优先级别低的中断请求。
在stm32中,一个中断的优先级由两部分决定,一个是抢占式优先级,还有一个是响应优先级。两个优先级组成了一个4位的控制字。
5.中断使用流程
- 中断的相关配置
- 设置优先级分组
- 书写中断服务程序
二、外部中断控制器EXTI
管理23个外部中断线(EXTI Line),0~15号外部中断线用于由GPIO引脚触发的外部中断。当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备外部中断的功能,可以设置外部中断的触发方式。
三、实验流程
了解完中断后,我们用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关,采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。由于没有开关,所以使用一根杜邦线代替
-
建立工程
打开STM32CubeMX建立工程,选择芯片,我使用的是STM32F103C8,根据自己的芯片类型选择。 -
引脚配置
将PA5
设置为GPIO_Output
,然后将PB15
设置为GPIO_EXTI13
,如图所示
-
外设配置
GPIO模式设置为推免模式,触发模式为下降沿触发。PA5设置名字为LD,PB15设置为B1_EXTI -
NVIC设置
将外部中断线EXTI_Line[15:10]使能
-
配置中断优先级
优先级分组为第4组,16级抢占优先级;修改外部中断线 直接使用由中断编号设置的默认中断优先级EXTI line[15:10]的抢占优先级为15
四、编写代码
生成工程之后,需要在main.c文件当中添加代码
添加如图所示的外部中断回调函数
在①外部中断的初始化函数当中,②为将外部中断的触发方式设置为下降沿触发,③为设置外部中断的优先级为15,并将这个外部中断使能。
五、实验效果
连接电路后,将BOOT0置为1,BOOT1置为1通过mcuisp软件烧录.hex程序,
烧录程序后断电BOOT0,1复位,BOOT0置为1,BOOT1置为1,接电
首先,PB15引脚接入3V时,LED为亮,然后断开,接入GND,一个下降沿到来,收到中断请求,LED灭。
六、总结
通过此次实验,了解了中断是如何进行的,以及在STM32当中中断的使用方法,采用中断的方式和直接存储器的方式,中断的响应速度非常快,一个中断的产生时间是微秒级别的,只要接收到一个中断请求,马上就可以进行处理。
参考资料:stm32之中断系统.