《STM32 HAL库》中断相关函数详尽解析——外部中断服务函数

观前提醒:本文简要回顾了EXTI及NVIC相关知识点,分析了stm32f1系列单片机外部中断回调机制

开始之前,先温习一下有关EXTI和NVIC的知识点

外部中断/事件控制器(EXTI)

对于互联型产品(105、107系列),外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成 ,对于其它

型号,则有19个能产生事件/中断请求的边沿检测器。

每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求

简而言之:EXTI是一个检测器,检测到符合条件的边沿,即向NVIC发送中断请求 (此处仅讨论中断)

外部中断/事件控制器框图:

嵌套向量中断控制器(NVIC)

NVIC英文全称是Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于M3内核的一个外设,控制着芯片的中断相关功能。由于ARM给NVIC预留了非常多的功能,但对于使用M3内核设计芯片的公司可能就不需要这么多功能,于是就需要在NVIC上裁剪。ST公司的STM32F103芯片内部中断数量就是NVIC裁剪后的结果。中断控制相关寄存器在固件库core_cm3.h文件NVIC结构体内。可打开任意库函数工程即可查看到。NVIC和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理晚到的中断。

STM32F103芯片支持60个可屏蔽中断通道,并且每个中断通道都具有自己的中断优先级控制字节。这些中断优先级控制字节由8位组成,但在STM32F103芯片中,只使用其中的高4位,即4位优先级。

在STM32F103芯片中,中断优先级分为抢占式优先级和响应优先级(亚优先级或副优先级)两部分。抢占式优先级用于决定中断事件是否能够打断当前正在执行的主程序或中断程序,而响应优先级用于确定同一抢占式优先级下,中断的相对优先级。

当两个中断的抢占式优先级相同时,高响应优先级的中断会先被响应和处理。也就是说,如果两个中断同时到达,具有更高响应优先级的中断将先被处理。

当两个中断的抢占式优先级不同时,具有较高抢占式优先级的中断可以打断正在执行的较低抢占式优先级中断。这种情况下,中断嵌套发生,高抢占式优先级的中断会打断当前正在执行的较低抢占式优先级中断,并开始执行自己的中断服务程序。

当两个中断的抢占式优先级相同时,如果一个中断正在处理,而另一个中断到达,后到达的中断需要等待前一个中断处理完毕后才能被处理。如果两个中断同时到达,中断控制器会根据它们的响应优先级来决定先处理哪个中断。如果它们的抢占式优先级和响应优先级都相等,则根据它们在中断表中的排位顺序决定先处理哪个。

简而言之:NVIC的功能是管理和控制中断的优先级和中断服务程序的执行。

当然这都是形而上的解释,最通俗易懂的说,NVIC应该是"厕所管理员",它用于控制中断优先缓急以及嵌套中断和打扫"厕所"。

说起来很复杂,但是在实际操作中,复杂操作都被封装好了,我们只需要几行代码就能完成设置。

就比如上篇中配置NVIC的代码:

点击《STM32 HAL库》中断相关函数详尽解析------外部中断服务函数 - 古月居可查看全文

相关推荐
你疯了抱抱我8 小时前
【STM32】使用 STM32CubeMX 生成项目,LED测试;上位机:STM32F411CEU6
stm32·单片机·嵌入式硬件
今天的你比昨天进步了?10 小时前
单片机程序,keil可以正常编译,VScode编译报错处理
vscode·单片机·嵌入式硬件
linbaiwan66611 小时前
42V/50V/60V高耐压OVP保护芯片的应用——PW1600实测70V耐压
嵌入式硬件
嵌入式小站11 小时前
STM32 零基础可移植教程 24:SPI Flash 读数据,先从指定地址读几个字节
chrome·stm32·嵌入式硬件
崇山峻岭之间12 小时前
单片机汉字显示实验
单片机·嵌入式硬件
guygg8812 小时前
基于C# + Halcon的通用ROI绘制工具
stm32·单片机·c#
yugi98783812 小时前
基于 RFID 的智能公交刷卡系统
stm32·嵌入式硬件
点灯小铭12 小时前
基于单片机的雨量检测智能汽车雨刮器模拟系统设计与实现
单片机·嵌入式硬件·汽车·毕业设计·课程设计·期末大作业
三佛科技-1341638421213 小时前
腕式血压计方案开发设计,腕式血压计MCU控制芯片选择
单片机·嵌入式硬件·物联网·智能家居