一、中断
1.什么是中断
操作系统需要管理外设,但是外设的速度远远低于CPU的速度,所以我们需要一种机制来弥补这种速度鸿沟,提高CPU的效率。
为此我们引入了中断机制,让外设在需要操作系统处理外设相关事件的时候,能够主动通知操作系统,即当CPU收到中断或者异常的事件时,打断操作系统和应用的正常执行,暂停执行当前的程序或任务,让操作系统完成外设的相关处理,在完成对这个事件的处理后,再恢复操作系统和应用的正常执行。
举个栗子,当你在读文章时忽然来了一个电话,你会先去接电话,等电话挂断后你又接着回来读文章,接电话这一过程就是执行中断。
正是由于中断机制,计算机系统才能有条不紊地“同时”完成多个任务,中断机制实质上帮助提高了并发“处理”能力。
2.名词区分
中断:处理器运行的一个状态,该状态会打断处理器当前正常的进程。
事件:就是事件,其可能触发中断。
中断事件:触发中断的事件。
举个栗子,一老师在教室里给学生们上课。课堂上的学生可能做出各种行为动作,比方做笔记、打哈气、翻书包、讲小话等,我们把这些行为统称为事件,其中有些行为老师往往只是视而不见,继续他的上课;而有些行为可能导致老师的上课中止,比方讲小话,并对学生的相关行为予以警告、批评或纠正等,然后继续上课。我们把老师因为学生的某些行为而中止授课,并产生后续动作,之后接着上课的这个过程理解为中断或中断响应。我们把可能导致老师上课中断的学生行为理解为中断事件。
结合上面,不难理解中断事件是一种可以导致中断发生的事件,中断则是因为中断事件的发生而导致的后续行为过程。事件与中断事件是包含关系,中断事件属于事件,即事件可分为中断事件或非中断事件,中断是中断事件发生的结果。
3.系统简介
STM32F103 是基于 Cortex‐M3处理器内核设计的,ST 公司(芯片制造商)在原有 CM3 内核基础上,添加了储如定时器、串口、DMA等外设,最终组合成一个STM32单片机。其中 CM3 内核是单片机(MCU)的核心,是单片机的中央处理单元(CPU)。
CM3 的所有中断机制都由 NVIC 实现。 CM3内核支持256个中断,16个内核中断,240个外部中断,并且拥有256级的可编程中断设置。但是STM32只用到了CM3内核的一部分,STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程中断优先级。
STM32F103系列只有60个可屏蔽中断。
二、中断类型
中断包括内部中断和外部中断。
内部中断是通过数时钟脉冲所引起的中断,是不可屏蔽的中断。
外部中断就是通过外部信号所引起的中断,如通过判断引脚电平变化(高电平、低电平)、边沿变化(上升沿、下降沿)等。
1.定时器中断
STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器。
定时器中断的用处
1.时间切片,做操作系统时钟。
2.硬件定时。如我们要做一个计时器就可以使用定时中断来做
3.计数与目标计数。如检测计数产量计数动作计数等,不良超标提醒。
4.外部中断扩展。
5.脉冲发生器与脉冲计数器。如可同时控制几个步进电机。
6.增强系统的实时性。
涉及知识较多,将专门写一篇文章介绍
2.串口中断
当发送寄存器中的数据被全部发送出去后,产生一个中断;当接受寄存器中的收满数据时,产生一个中断。
在这里中断的意义可以类比两个人搬运货物,当一个人把货物送给另一个人后,才能进行接下来的搬运。那如何判断货物是否被送出去了,就需要中断是否被执行来判断。
3.外部中断
STM32单片机的外部中断触发方式为边沿触发,即上升沿触发和下降沿触发。
STM32单片机的每一个GPIO都可以被设置为外部中断输入,根据引脚序号的不同可以将外部中断分为不同的组,分别为PA0-PG0为EXTI0组,以此类推,PA15-PG15为EXTI15组,共16组,并且每一组中同一个时刻只能有一个中断源工作,所以,STM32单片机最多允许同时有16个外部中断。
STM32F103 的中断控制器支持 19个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。
STM32F103 的 19 个外部中断为:
EXTI 线 0~15:对应外部 IO 口的输入中断。
EXTI 线 16:连接到 PVD 输出。
EXTI 线 17:连接到 RTC 闹钟事件。
EXTI 线 18:连接到 USB 唤醒事件。
EXTI 线 19:连接到以太网唤醒事件。
STM32外部中断相关的寄存器
初始化GPIO时要用到如下寄存器:
APB2ENR:开启GPIO时钟和复用时钟
CRH:端口配置高寄存器
CRL:端口配置低寄存器
EXTICR[0]-EXTICR[3]:外部中断配置寄存器
IMR:中断屏蔽寄存器
EMR:事件屏蔽寄存器
FTSR:下降沿触发选择寄存器
RTSR:上升沿触发选择寄存器
三.NVIC
在介绍如何配置中断优先级之前,我们需要先了解下 NVIC。
NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对 Cortex-M3 内核里面的 NVIC 进行裁剪,把不需要的部分去掉,所以说 STM32的 NVIC 是 Cortex-M3 的 NVIC 的一个子集。
四、中断优先级
1.优先级定义
在NVIC中有一个专门的寄存器:中断优先级寄存器NVIC_IPRx,用来配置外部中断的优先级,IPR宽度为8位,原则上每个外部中断可配置的优先级为0~255,数值越小,优先级越高。但是绝大多数CM3芯片都会精简设计,以致实际上支持的优先级数减少,在F103中,只使用了高4位。
用于表达优先级的这4bit,又被分成抢占优先级和子优先级两组。
如果有多个中断同时响应,抢占优先级高的就会先于抢占优先级低的,优先得到执行。
如果抢占优先级相同,就比较子优先级。
如果抢占优先级和子优先级都相同的话,就比较它们的硬件中断编号,编号越小,优先级越高。
2.抢占优先级和响应优先级的区别
高优先级的抢占优先级可以打断低抢占优先级的中断;而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
抢占优先级相同的中断,高响应优先级不能打断低响应优先级。
抢占优先级相同的中断,当中断同时发生时,响应级高的先执行。
抢占和响应优先级都一样则哪个中断先发生,则执行哪个。
表1
注意:一般优先级分组只设置一次,否则会出现中断管理混乱
五、配置外部中断(含CubeMX)
按键点灯实验
1.CubeMXSTM32外部中断配置步骤
1)晶振时钟等基础配置
2)NVIC
15和4bit那里有一定关系,和上方优先级那个表1有关3)引脚配置
有不同的模式,这里咱们选择上升沿
2.程序内 STM32外部中断实现步骤
1)使能 IO 口时钟。
2)调用函数 HAL_GPIO_Init 设置 IO 口模式,触发条件,初始化GPIO为输入。
3)使能 SYSCFG 时钟(开启复用时钟)以及设置 IO口与中断线的映射关系。
4)配置中断优先级(NVIC),并使能中断。
5)在中断服务函数中调用外部中断共用入口函数
HAL_GPIO_EXTI_IRQHandler,设置触发条件。
6)编写外部中断回调函数 HAL_GPIO_EXTI_Callback(中断要做的事在此处执行)。
六、程序实现
在main.c中添加中断服务对象
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_3)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
}
}
/* USER CODE END 4 */
注意:中断里不可以加延时HAL_Delay(),但可以用其他方法达到延时的效果
上一篇:STM32学习笔记(1) GPIO初始化及点亮LED
下一篇:STM32F072RB 实作笔记(六)- 计时器加上中断EXTI_IRQHandler(二)
推荐阅读最新更新时间:2024-11-13 12:26
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 ADF7021BCPZ 的参考设计
- LT8330IS6 48V 升压转换器的典型应用电路
- L7815A 固定输出稳压器的典型应用
- LT3634 演示板,VIN= 3.6V 至 15V,V OUT1 =1.5V@3A,V OUT2 =1.8V@3A,V OUT3 =2.5V@3A
- 使用 Analog Devices 的 LTC3602EFE 的参考设计
- AVR296 AVRUSBRF01 USB/RF Dongle 应用电路
- ST25-TAG-BAG-A包含6个基于ST25TA02K和ST25TA64K的不同项目,2个分别带有2Kbit EEPROM和64 Kbit EEPROM的NFC Forum Type 4标签芯片
- L78L05C 电流调节器的典型应用
- AD5304 8 位 DAC 在光隔离接口中的典型应用
- 具有 6V 输入 UVLO 的 LTC3633AEFE-1 3.3V/1.8V 顺序降压稳压器的典型应用电路