【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 中断配置流程

相关推荐
云山工作室42 分钟前
用于电动汽车的永磁同步电机调速系统建模与仿真(论文+)
stm32·单片机·嵌入式硬件·毕业设计·毕设
yuan199971 小时前
AD7689 12位串行ADC驱动与应用
单片机·嵌入式硬件
磨十三2 小时前
MCU 时钟系统全解析:主时钟、PLL、分频与外设时钟门控
arm开发·单片机·嵌入式硬件
逐步前行2 小时前
Proteus 8.9(四)51单片机仿真
嵌入式硬件·51单片机·proteus
DIY机器人工房2 小时前
嵌入式面试题:纹波率怎么计算;Buck 电路电感值的标准计算式是什么?
stm32·嵌入式硬件·面试题·diy机器人工房
DIY机器人工房3 小时前
嵌入式面试题:电容滤波,低频高频谁来滤?放置顺序怎么定?
stm32·单片机·嵌入式硬件·diy机器人工房
学习路上_write3 小时前
嵌入式系统bringup指南:软硬件调试
c语言·单片机·嵌入式硬件
磨十三5 小时前
ARM Cortex-M 系列 MCU:内核、指令、异常与中断解析
arm开发·单片机·嵌入式硬件
罗汉松(山水白河)6 小时前
关于串口与UDP通讯的实验
单片机·嵌入式硬件·网络协议·udp·tcp·串口、
d111111111d7 小时前
STM32外设--SPI读取W25Q64(学习笔记)硬件SPI
笔记·stm32·单片机·嵌入式硬件·学习