嵌入式学习笔记4.STM32中断系统及外部中断EXTI

STM32中断系统

1.NVIC:嵌套向量中断控制器


2.STM32中断优先级设置

中断源通过中断通道向内核发出中断申请,设置中断源的优先级实际上是设置通道的优先级。中断通道的优先级通过NVIC中的中断优先级寄存器NVIC_IP进置,该寄存器是8位,理论上可以配置256个中断优先级。STM32微控制器只使用中的高4位,并分成了两个优先级:抢占优先级(preempitionpriority)和子优先级 priority )。

具体的分组情况如下:

  • 第0组:所有4位用于指定子优先级。
  • 第1组:最高1位用于指定抢占优先级,后面3位用于指定子优先级。
  • 第2组:最高2位用于指定抢占优先级,后面2位用于指定子优先级。
  • 第3组:最高3位用于指定抢占优先级,后面1位用于指定子优先级。·第4组:所有4位用于指定抢占优先级。
  • **在HAL库的初始化过程中,HAL库初始化函数HAL_Init()将优先级分组设置为第 4组,**即只有0~15共16级抢占式优先级,没有子优先级。编号越小的优先级越高:0号为最高,15号为最低。

3.外部中断控制器


4.外部中断

当STM32的GPI0引脚和0~15号外部中断线连接后,此时的GPI0引脚就具备外部中断的功能,中断的触发方式可以选择上升沿触发、下降沿触发或双边沿触发 。为了叙述方便,我们把通过GPIO引脚产生的中断简称为外部中断。

STM32的GPI0引脚数量众多,以STM32F411RET6为例,其GPIO引脚多达50个,但是提供给GPI0引脚使用的外部中断线只有16个。为了解决这个矛盾, STM32按照引脚的编号对GPIO引脚进行了分组:**尾号相同的引脚作为一组,通过一个多路选择器连接到1个外部中断线,**即PAx、PBx、PCx、PDx、PEx、PFx、PGx和PHx作为一组,连接到外部中断线x(FXTIx).x的取值范围是0~15

  • NVIC为EXTI所管理的16个外部中断线提供了7个中断通道。
  • 外部中断线0(EXTI0)外部中断线1(EXTI1)外部中断线2(EXTI2)外部中断线3(EXTI3)和外部中断线4(EXTI4)这5个外部中断线可以连接到独立的中断通道,具有独立的中断服务程序。
  • 外部中断线5至外部中断线9(EXTI5~EXTI9)则连接到同一个中断通道EXTI9_5_IRQ,共享同一个中断服务程序。
  • 外部中断线10至外部中断线15(EXTI10~EXTI15)也是连接到同一个中断通道EXTI15_10_IRQ,共享同一个中断服务程序。
  • 对于共享中断通道(中断服务程序)的外部中断线,在进行中断处理前,还需要判断是哪一个GPIO引脚触发的本次外部中断。

利用Cube MX配置外部中断

这里以一个具体例子为例:

这里完成后就可以生成代码,不过要先自己配置SYS设置串行调试,RCC选择外部时钟


Keil代码

gpio.c文件里


stm32f4xx_it.c文件里

实验现象

外部中断上升沿按键控灯


与任务一操作类似,这里就不给配置过程和代码了,直接给出实验现象

10hz方波外部中断双边沿触发,观察LED灯

相关推荐
想做小南娘,发现自己是女生喵10 分钟前
第三周学习文档 Linux C 多进程与多线程
linux·c语言·学习
北京盛世宏博21 分钟前
异地机房采集踩坑笔记:以太网温湿度记录仪跨网段通信调试实战
开发语言·笔记·单片机·php·传感器·温湿度
奕鼎竜瑆43 分钟前
无监督学习:聚类与降维
学习·数据挖掘·聚类
FakeOccupational1 小时前
【电路笔记 STM32】Cortex-M7 UART DMA模式(DMA&空闲中断&普通模式+DMA&半满/全满中断&循环模式)
笔记·stm32·嵌入式硬件
sramdram1 小时前
国产32位CH32V系列RISC-V单片机
单片机·嵌入式硬件·risc-v·国产32位单片机·risc-v单片机
youcans_2 小时前
【STM32C5教程】(4)GPIO 外部中断实验
stm32·单片机·嵌入式硬件·mcu·stm32c5
听风若依2 小时前
函数栈帧的创建与销毁-重置版
c语言·学习
Wang's Blog2 小时前
Java 项目部署之 Docker工具快速入门: 学习路径与命令速查导引
java·学习·docker
程序猿阿森2 小时前
Warmup 学习率预热详解:为什么训练初期要“先热身再加速”?
深度学习·学习·语言模型