【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的状态取反,亮灭交替。


总结

相关推荐
芯橦2 小时前
【瑞昱RTL8763E】音频
单片机·嵌入式硬件·mcu·物联网·音视频·visual studio code·智能手表
夜间去看海6 小时前
基于单片机的智能浇花系统
单片机·嵌入式硬件·智能浇花
VirtuousLiu7 小时前
LM74912-Q1用作电源开关
单片机·嵌入式硬件·ti·电源设计·lm74912·电源开关
打地基的小白7 小时前
软件I2C-基于江科大源码进行的原理解析和改造升级
stm32·单片机·嵌入式硬件·通信模式·i2c
Echo_cy_7 小时前
STM32 DMA+AD多通道
stm32·单片机·嵌入式硬件
朴人7 小时前
【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】
stm32·单片机·嵌入式硬件·foc
追梦少年时7 小时前
STM32中断——外部中断
stm32·单片机·嵌入式硬件
bai_lan_ya8 小时前
stm32定时器中断和外部中断
stm32·单片机·嵌入式硬件
玄奕子8 小时前
GPT对话知识库——在STM32的平台下,通过SPI读取和写入Flash的步骤。
stm32·单片机·gpt·嵌入式·嵌入式驱动
py.鸽鸽8 小时前
王者农药更新版
stm32