STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介

什么是 NVIC ? NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller 。它 是内核的器件,所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断,其中包含了 16 个系统中断和 240 个外部中断,并且具有 256 级的可编程中断设置。然而芯片厂商一般不会把内核的这些资源全部用完,如 STM32F407 的系统中断有 10 个,外部中断有82 个。

1、NVIC寄存器

2、中断优先级

STM32 中的中断优先级可以分为:抢占式优先级和响应优先级,响应优先级也称子优先级,每个中断源都需要被指定这两种优先级。抢占式优先级和响应优先级的区别:
抢占优先级 :抢占优先级高的中断可以打断正在执行的抢占优先级低的中断。
响应优先级 :抢占优先级相同,响应优先级高的中断不能打断响应优先级低的中断。
还有一种情况就是当两个或者多个中断的抢占式优先级和响应优先级相同时,那么就遵循自然优先级,看中断向量表的中断排序,数值越小,优先级越高。
对于 NVCI 的中断优先级分组: STM32F407 将中断分为 5 个组,组 0~4 。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。

所以中断优先级分组决定了中断优先级控制寄存器位数的分配设置,设置哪几位是抢占优先级,哪几位是响应优先级,所以中断优先级分组就决定了中断的抢占优先级和响应优先级的设置范围。
通过这个表,我们就可以清楚的看到组 0~4 对应的配置关系,例如优先级分组设置为 3 , 那么此时所有的 82 个中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级, 低 1 位是响应优先级。每个中断,你可以设置抢占优先级为 0~7 ,响应优先级为 1 或 0 。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。
HAL_NVIC_SetPriorityGrouping 函数
HAL_NVIC_SetPriorityGrouping 是设置中断优先级分组函数。 这个函数在一个工程里基本只调用一次,而且是在程序 HAL 库初始化函数里面已经被调 ,后续就不会再调用了。因为当后续调用设置成不同的中断优先级分组时,有可能造成前面设置好的抢占优先级和响应优先级不匹配。

3、NVIC的使用

二、EXTI****简介

EXTI 即是外部中断和事件控制器,它是由 20 个产生事件/ 中断请求的边沿检测器组成。每 一条输入线都可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
产生中断线路目的使把输入信号输入到 NVIC,进一步运行中断服务函数,实现功能。而产生事件线路目的是传输一个脉冲信号给其他外设使用,属于硬件级功能。

对于正点原子:

EXTI 的功能框图是最直接把有关 EXTI 的知识点连接起来的图,掌握了该图的来龙去脉,就会对 EXTI 有了一个整体熟悉,编程时候可以得心应手。

三、如何使用中断

1、EXTI中断流程

EXTI 0-15这16根线会与gpio完成映射,EXTI16、17....等输入线是其他外设中断,比如闹钟,USB等,这两者统称为EXTI中断。

2、EXTI中断配置步骤

其中步骤2-5可以使用HAL_GPIO_Init一步到位

四、HAL库中断回调处理机制

五、应用示例

应用步骤​​​​​​​

1、看原理图确定引脚连接

2、使能IO口时钟,完成IO口与中断线的映射关系,设置优先级,设置中断服务函数处理中断,设置中断回调函数实现具体中断处理操作。

按键消抖的实现:

按键按下(GPIO中断)
       |
       v
启动定时器(复位计数器)
       |
       v
   定时器计时(10ms)
       |
       v
定时器计数完成(触发中断)
       |
       v
检查按键状态(确认按下)
       |
       v
停止定时器,设置标志位
       |
       v
   主循环处理中断事件
相关推荐
zxfly20131 小时前
STM32的DMA技术介绍
stm32·单片机·嵌入式硬件
CV金科6 小时前
蓝桥杯—STM32G431RBT6(IIC通信--EEPROM(AT24C02)存储器进行通信)
stm32·单片机·嵌入式硬件·算法·蓝桥杯
嵌入式详谈8 小时前
基于STM32的智能风扇控制系统设计
stm32·单片机·嵌入式硬件
小小怪大梦想8 小时前
RTC实时时钟
stm32·单片机·嵌入式硬件
水饺编程12 小时前
【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-2
linux·嵌入式硬件·fpga开发
电子科技圈12 小时前
IAR全面支持国科环宇AS32X系列RISC-V车规MCU
人工智能·嵌入式硬件·mcu·编辑器
SZPU领跑13 小时前
第十二届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(第一套)
stm32·单片机·算法·职场和发展·蓝桥杯
逢生博客13 小时前
Rust 语言开发 ESP32C3 并在 Wokwi 电子模拟器上运行(esp-hal 非标准库、LCD1602、I2C)
开发语言·后端·嵌入式硬件·rust
Tlog嵌入式15 小时前
蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键
arm开发·stm32·单片机·mcu·物联网·蓝桥杯·iot
打地基的小白16 小时前
UART通信—基于江科大源码基础进行的改进和解析
单片机·嵌入式硬件·uart通信·代码详解