【STM32+HAL+Proteus】系列学习教程---中断(NVIC、EXTI、按键)

实现目标

1、掌握STM32的中断知识

2、学会STM32CubeMX软件关于中断的配置

3、具体目标:1、外部中断检测按键,每按一次计一次数,满5次LED1状态取反。


一、中断概述

1.1、中断定义

CPU执行程序时,由于发生了某种随机的事件(包括外部或内部),让CPU暂时停下正在运行的程序,转而去执行一段处理事件的程序(中断服务子程序或中断处理程序),当这段程序执行完时(事件处理完时),程序又返回被停下的程序继续执行,这一过程称为中断 。引发中断的称为中断源 。中断可分为外部中断内部中断

中断程序执行中又出现了中断,那么这种情况又叫做中断嵌套

1.2、中断的作用和意义

中断的最终目的是高效处理紧急程序,并且不会占用CPU资源。还有就是能实现程序的并行化,实现嵌入式系统进程之间的切换等。

  • 实时控制:在确定的时间内对相应事件做出相应;例如:温度控制;
  • 故障处理:检测到故障,需要第一时间进行处理;
  • 数据传输:不确定数据何时会来,利用中断进行控制;

1.3、STM32的中断

STM32F10x芯片有84个中断通道,包括16个内核中断68 个可屏蔽中断,这些中断通道已按照不同优先级顺序固定分配给相应的外部设备。

具体可参考:STM32F103的中文参考手册(9.1.2中断和异常向量)

二、 NVIC(中断向量控制器)

2.1 NVIC基本概念

NVIC 英文全称是Nested Vectored Interrupt Controller ,中文意思就是嵌套向量中断控制器 ,通俗的讲它就是一个开关与选择器 。它属于M3内核 的一个外设,控制着芯片的中断相关功能。M3 内核都是支持256 个中断 ,其中包含了16 个系统中断240 个外部中断 ,并且具有256 级的可编程中断设置。

2.2、中断处理机制

工作过程:

对于外部产生的中断不管是串口、定时器、IIC还是EXTI ,GPIO都由做NVIC来管理,NVIC的主要功能可以概括为:1. 中断管理;2.支持异常及中断向量化处理;3.支持嵌套中断。

2.3、STM32中断优先级

多个中断 同时到来时,CPU该执行那个中断呢?这个时候就需要用到中断优先级,给中断的执行顺序排个序,优先级高的可以比优先级低的先执行,甚至优先级高的可以打断正在执行的优先级低的中断程序。

STM32F103芯片支持60个可屏蔽中断通道,每个中断通道都具备自己的中断优先级控制字节(8位,但是STM32F103中只使用4位,高4位有效),用于表达优先级的高4位又可以组成抢占式优先级响应优先级,通常也把响应优先级称为"亚优先级"或"副优先级",每个中断源都需要被指定这两种优先级。

|--------------------------|-----------------------------------------------------------------------------|-------------------------------------|--------------------------------------------|
| NVIC_PriorityGroup | 抢占优先级 取值范围 | 响应优先级 取值范围 | 描述 |
| NVIC_PriorityGroup_0 | 0 | 0**~15 | **抢占优先级占0位,** **响应优先级占4位** |
| NVIC_PriorityGroup_1 | 0
1 | 07 | **抢占优先级占1位,** **响应优先级占3位** |
| NVIC_PriorityGroup_2 | 0
123 | 0123 | **抢占优先级占2位,** **响应优先级占2位** |
| NVIC_PriorityGroup_3 | 0
1234567 | 01 | **抢占优先级占3位,** **响应优先级占1位** |
| NVIC_PriorityGroup_4 | 0
15 | 0 | **抢占优先级占4位,** **响应优先级占0**位** |

优先级判断原则:

中断优先级的数值越小,优先级级别越高。先判断抢占优先级的大小,如果抢占优先级相同(两者不能相互打断),则比较响应优先级的大小,若抢占优先级和响应优先级均相同,则根据中断向量表中的顺序来决定。

假定现在有三个中断源:中断1中断2中断3。设置中断优先级分组为 2,然后设置中断1的抢占优先级为 2,响应优先级为 1。中断2的抢占优先级为 3,响应优先级为0。 中断3的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为: 中断 3>中断 1>中断 2。 上面例子中的中断 1 和中断 3 都可以打断中断 2 的中断。而中断 3 和中断 1却不可以相互打断!

三、EXTI(外部中断)

3.1EXTI的简介

EXTI( External interrupt/event controller)---外部中断/事件控制器,管理了控制器的 ++20 个++ 中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测下降沿检测。 EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

3.2EXTI功能框图

斜杠20,表示在控制器内部类似的信号线路有20个, EXTI总共有20个中断/事件线。

红色代表产生中断,绿色代表产生事件

产生中断线路目的是把输入信号输入到NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用, 并且是电路级别的信号传输,属于硬件级的。

3.3EXIT线与IO映射关系

EXTI有20个中断/事件线,每个GPIO都可以被设置为输入线,占用EXTI0至EXTI15, 还有另外七根用于特定的外设事件,见表 EXTI中断_事件线 。

EXTI0至EXTI15用于GPIO,通过编程控制可以实现任意一个GPIO作为EXTI的输入源。由表 EXTI中断_事件线 可知, EXTI0可以通过AFIO的外部中断配置寄存器1(AFIO_EXTICR1)的EXTI0[3:0]位选择配置为PA0、 PB0、PC0、PD0、PE0、PF0、PG0、PH0或者PI0 。

  • 16个外部中断源EXTI0 - EXTI15,对应7个中断向量,即7个中断服务函数

    • EXTI0、EXTI1、EXTI2、EXTI3、EXTI4:专用
    • EXTI5 ~ EXTI9:共用
    • EXTI10 ~ EXTI15:共用
  • 触发条件

    • 上升沿触发
    • 下降沿触发
    • 双边沿触发

四、原理图设计

按键默认接得有上拉电阻,未按下时单片机检测管脚为高电平,当按键按下,电平由高电平变为低电平。也就是一个下降沿信号

五、STM32CubeMX 配置

配置1:LED1/PB9设置为推挽输出; K1设置为外部中断模式,NVIC组别默认,抢占优先级,响应优先级默认为0,使能外部中断。

配置2:外部中断设置为下降沿触发

六、程序设计

1、定义一个全局变量,用于统计按键按下次数

cpp 复制代码
/* USER CODE BEGIN PV */

 int cnt = 0;//计数变量
 
/* USER CODE END PV */

2、中断回调函数对按键进行处理,次数到达5次,LED1状态取反。

cpp 复制代码
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_11)  //按键K1按下
	{
	    cnt++;
		if(cnt == 5)//按键次数到5次
		{
			cnt = 0;
			HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); //LED1电平翻转
		}		
	}	
		
}

/* USER CODE END 4 */

七、实验效果

八、仿真实现

按键按下5次后,LED1的状态取反,亮灭交替。


总结

相关推荐
电子科技圈1 小时前
芯科科技出展CES 2026并展出如何加速互联智能的未来
科技·嵌入式硬件·mcu·物联网·iot
点灯小铭6 小时前
基于单片机的多路热电偶温度监测与报警器
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
tianyue10010 小时前
STM32G431 ADC 多个channel 采集
stm32·单片机·嵌入式硬件
longson.12 小时前
怎样避免空间碎片而且高效的分配空间
嵌入式硬件·缓存
清风66666612 小时前
基于单片机的水泵效率温差法测量与报警系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
焦糖码奇朵、13 小时前
课设:基于Arduino的无线LED开关控制系统
嵌入式硬件·物联网·arduino·信息与通信·信号处理
z203483152013 小时前
定时器练习报告
单片机·嵌入式硬件
zk0013 小时前
内容分类目录
单片机·嵌入式硬件
安生生申14 小时前
STM32 ESP8266连接ONENET
c语言·stm32·单片机·嵌入式硬件·esp8266
广药门徒14 小时前
电子器件烧毁的底层逻辑与避坑指南
单片机·嵌入式硬件