【STM32】中断

这是做了两个小项目后重新回顾中断,以下使两个项目的链接,中断回调函数经常被使用,要深刻理解它的意义.另外如果有时间,会在写一篇HAL库的名称介绍,感谢支持

电动车报警系统https://blog.csdn.net/2301_76153977/article/details/154188748?spm=1001.2014.3001.5501

智能排队控制系统https://blog.csdn.net/2301_76153977/article/details/154238447?spm=1001.2014.3001.5501

本篇将围绕三个大版块并结合上面两个小项目的经验来讲述中断


1 什么是中断

中断是单片机正在执行程序时,由于内部或外部事件的触发,打断当前程序,转而去处理这一事件,当处理完成后再回到原来被打断的地方继续执行原程序的过程。

要深入理解上面这个中断图,比如
systick模拟多线程实验时,为什么两个小灯不同频率闪烁的代码写在中断服务函数里,就能实现功能呢?

答:SysTick 通常配置为每 1ms 产生一次中断

每次中断时,这个函数自动被调用,执行完中断程序再回到断点

函数内部维护两个任务的计时器,实现:

  • 任务1:每秒执行一次(1000ms)
  • 任务2:每0.5秒执行一次(500ms)

在main函数的HAL_Init()函数中默认设置的是每过1ms调用一下中断函数systick_isr(),相当于每过1ms都会检测task1和task2的cnt计数情况。就是每过1ms调用一次中断函数systick_isr(),这1ms后就实现systick_isr()中1000ms的led1和500ms的led2闪烁

2 为什么要中断

2.1 中断的意义

中断的主要意义在于提高 CPU 的效率,而不会一直占用 CPU ,实现对突发事件的实时处理,以及实现程序的并行化和嵌入式系统进程之间的切换。相较于轮询方式(即按照一定的频率和周期不断地检测某些事件的发生),中断在处理一些偶然发生的事情时效率更高。

  • 在链接1中,当振动传感器感受到振动时,PA4收到低电平,用HAL_GPIO_ReadPin读PA4,如果是低电平0(GPIO_PIN_RESET),则标志位为1,此代码在中断回调函数中实现
  • 在链接2中,通过中断实现红外传感器功能,即如果PB4是低电平,则为检测到有人,此代码也在中断回调函数中实现

通过链接1可能初识了中断,这两个案例中还出现了中断服务函数,其实不只这些,中断其实很丰富的,都有什么呢

2.2 中断执行流程

当中断发生时,STM32的执行流程如下:首先,由外设发出中断请求;然后,处理器暂停当前执行的任务,保护现场(如将当前位置的PC地址压栈);接着,程序跳转到对应的中断服务程序(ISR)并执行;中断服务程序执行完毕后,恢复现场(如将栈顶的值送回PC);最后,处理器返回到被中断的位置,继续执行下一个指令。
链接1电动车报警系统中,振动传感器一感受到振动PB4就输出低电平给STM32开发板,相当于PB4发出中断请求,程序跳到中断服务程序并执行,它执行完处理器返回到被中断的位置执行下一个指令

3 STM32中断

3.1 函数名词解释

|--------------------------|------------|-------------------------------------------------------------------|
| HAL_NVIC_SetPriority | 设置中断线的优先级 | HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 0); // 设置EXTI15_10中断线的优先级 |
| HAL_NVIC_EnableIRQ | 使能中断 | HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); // 使能中断 |
| HAL_GPIO_EXTI_IRQHandler | 处理中断请求 | HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12); |
| HAL_GPIO_EXTI_Callback | EXTI线路检测回调 | void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) |

中断服务函数HAL_GPIO_EXTI_IRQHandler会自动调用中断回调函数HAL_GPIO_EXTI_Callback,

看链接1的一部分代码

复制代码
void EXTI15_10_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
}

对于上面代码,结合HAL库定义,意思是先检查指定的EXTI中断线是否被声明,即是否拿到12号中断线,如果它不为0,清除12号中断线,调用关于12引脚的中断回调函数

常用的函数有这几种,不要慌,下面将会讲到它们之间的关系,和什么时候调用~

3.2 STM32****中断框图

3.2.1 NVIC

是 STM32 中的中断控制器。它负责管理和协调处理器的中断请求,是STM32 中处理异步事件的重要机制。
当一个中断请求到达时,NVIC 会确定其优先级决定是否应该中断当前执行的程序,以便及时响应和处理该中断请求。

NVIC配置方法
设置中断分组 → 设置中断优先级 → 使能中断
设置中断分组一般在 HAL_Init 函数中进行。

3.2.2 EXTI

EXTI 是 External Interrupt 的缩写,表示外部中断事件控制器。
EXTI 可以监测指定 GPIO 口的电平信号变化,并在检测到指定条件时,向内核的中断控制器NVIC 发出中断申请。NVIC 在裁决后,如果满足条件,会中断CPU的主程序,使 CPU 转而执行 EXTI 对应的中断服务程序

a AFIO

AFIO 是 Alternate Function Input/Output 的缩写,表示复用功能 IO ,主要用于实现 I/O 端口的复用功能以及外部中断的控制。
STM32 上有很多 I/ O 口以及内置外设(如 I2C 、 ADC 、 ISP 、 USART 等)。为了节省引出管脚的数量,这些内置外设通常与 I/O 口共用管脚,即 I/O 管脚具有复用功能。例如,一个 GPIO 管脚除了可以作为普通的 I/O端口外,还可以被复用为某个内置外设的功能引脚。

3.3 中断配置流程

相关推荐
我先去打把游戏先3 小时前
ESP32C3开发指南(基于IDF):console控制台命令行交互功能
笔记·嵌入式硬件·mcu·物联网·学习·esp32·交互
rit84324994 小时前
基于STM32+OV7725+DHT11+ESP8266的物联网数据采集与显示
stm32·嵌入式硬件·物联网
Shylock_Mister5 小时前
Linux 常用命令大全:从入门到精通
c语言·嵌入式硬件·物联网
准测仪器13 小时前
6项提高电机制造质量的电气测试方案
单片机·嵌入式硬件·制造·电机·电气·放电测试·局部放电测试
ACP广源盛1392462567314 小时前
(ACP广源盛)GSV6172---MIPI/LVDS 信号转换为 Type-C/DisplayPort 1.4/HDMI 2.0 并集成嵌入式 MCU
c语言·开发语言·单片机·嵌入式硬件·音视频
hazy1k14 小时前
51单片机基础-IO扩展(并转串 74HC165)
stm32·单片机·嵌入式硬件·fpga开发·51单片机·1024程序员节
Tony小周14 小时前
使用QKeyEvent keyPress(QEvent::KeyPress, key模拟键盘发送事件,会导致主程序卡死
嵌入式硬件·qt
普中科技17 小时前
【普中STM32F1xx开发攻略--标准库版】-- 第 13 章 STM32 位带操作
stm32·单片机·嵌入式硬件·arm·gpio·普中科技·位带操作
河南博为智能科技有限公司18 小时前
RS485转以太网串口服务器-串口设备联网的理想选择
大数据·服务器·人工智能·单片机·嵌入式硬件·物联网