【STM32】NVIC嵌套中断向量控制器与外部中断
两种优先级
抢占优先级PreemptPriority:中断服务函数正在执行时,抢占优先级高的可以打断抢占优先级低的,实现中断的嵌套,相当于51的“高优先级”
响应优先级(子优先级)SubPriority:抢占优先级相同的情况下,当两个中断同时被触发时,为避免中断的阻塞,高响应优先级的中断源会被优先触发,但高响应优先级不能打断低相应优先级,相当于51的“自然优先级”
特性:数字越小优先级越高,其中Reset,Hard fault,NMI优先级为负数且不可变,高于普通的中断优先级
优先级组的配置
简述:每个可屏蔽中断都有对应的优先级寄存器IP,例如F429有91个可屏蔽中断,对应IP[0]~IP[90],对于M3/4/7的内核,IP有八位,可设置2^8 = 256级优先级,但ST只用了高四位[7:4],可以实现2^4 = 16级优先级,由于存在两类优先级,因此需要将这四位分给两个优先级用于配置优先级别,我们将不同的分分配方式成为优先级分组(NVIC_PriorityGroup),由寄存器SCB->AIRCR的10~8bit控制

API:HAL_NVIC_SetPriorityGrouping(NVIC_PriorityGroup_n)
以上函数出现在HAL_Init() 中,用于对优先级分组进行设定,n = 0~4
例如:HAL_NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2)//采用优先级分组2
优先级的设定
API:void HAL_NVIC_SetPriority(IRQn_Type IRQn,//中断号,此处由枚举IRQn_Type映射
uint32_t PreemptPriority,//抢占优先级
uint32_t SubPriority)//响应优先级(子优先级)
例如:HAL_NVIC_SetPriority(TIM3_IRQn,1,3);
void HAL_NVIC_EnableIRQ(IRQn_Tpye IRQn) //中断使能,同样由Disable,不赘述
例如:HAL_NVIC_EnableIRQ(TIM3_IRQn);
外部中断的实现(函数命明参考MX生成代码)
初始化:void MX_GPIO_Init(void)
进行GPIO的初始化配置,注意虽然是写外部中断,GPIO这一中断源的配置一样都不能少!区别与一般输出功能的GPIO,外部中断功能的Mode(为触发方式)有所不同,完成GPIO特性的配置后设置外部中断优先级并使能,至此初始化完成
触发时:void EXTI1_IRQHandler(void)
初始化完成之后,单片机开始运行main函数内容,同时等待中断的触发,一旦中断触发,程序将指向上述的中断服务函数,这一中断服务函数的作用主要时给总的外部中断Handler的GPIO_Pin赋值,以下为中断服务函数的内容,相当于将所有的外部中断都汇总到了这个HAL_GPIO_EXTI_IRQHandler(),不同的中断服务函数只负责传入不同的GPIO_Pin值
void EXTI3_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
}
回调:这个总的Handler的内容同样简单,首先清除对应GPIO_Pin的中断标志,接着执行公用的HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)中断回调函数,至此外部中断完成,而由于Callback函数是弱函数,即假设用户重新定义了该函数,编译器不会报Redefine,而是拿用户定义的内容把原先的覆盖掉,HAL大量采用这种写法,使得编写这些函数非常方便,只需要在main.c重新定义该函数的内容即可(实际上HAL库是只读的,对Callback的弱定义也是不可修改)由于Callback是公用的,因此需要在里面设置逻辑判断是什么中断源,done
参考:安富莱_STM32-V5开发板_用户手册,含BSP驱动包设计(V1.7).pdf
正点原子STM32F429开发指南-HAL库版本_V1.1.pdf
2021/7/20 18:35
LynnSX in HRB
【STM32】NVIC嵌套中断向量控制器与外部中断的更多相关文章
- STM32——NVIV:嵌套中断向量控制器
STM32有43个channel的settable的中断源:AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits.这4个b ...
- [STM32].NVIC嵌套中断向量的理解
转自:http://www.21ic.com/embed/jiaocheng/sheji/201209/5634.html 一.STM32 (Cortex-M3) 中的优先级概念 STM32(Cort ...
- STM32学习笔记(三)——外部中断的使用
开发板芯片:STM32F407ZGT6 硬件连接:PE3-KEY1 一.STM32F4的中断介绍 STM32F4的每个IO都可以作为外部中断输入,很强大的功能吧!以前学习的51只有两个外部中断. ST ...
- STM32本学习笔记EXTI(外部中断)
参考资料:STM32数据表.网络信息 =========================================切割线===================================== ...
- STM32学习笔记之EXTI(外部中断)
參考资料:STM32数据手冊.网络资料 =========================================切割线==================================== ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- STM32学习笔记:为什么使用外部中断要打开syscfg时钟?
AFIO时钟只是在STM32F1系列里被提及. 对于32F1系列,涉及到管脚的EXTI. REMAP.事件输出时就需要开启AFIO时钟. 比方上面提到的管脚REMAP,必须先开AFIO时钟.配置EXT ...
- STM32 外部中断详解(原理+配置代码)
本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断 文章目录 1 前言 2 STM32的外部中断 3 中断服务函数的映射关系 4 外部中断的配置 5 寄存器的 ...
- STM32学习笔记(九) 外部中断,待机模式和事件唤醒
学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...
- STM32外部中断初理解
PA0,PB0...PG0--->EXTI0 PA1,PB1...PG1--->EXTI1 ....... PA15,PB15...PG15--->EXTI15 以上为GPIO和中断 ...
随机推荐
- 7、Taylor公式(泰勒公式)通俗+本质详解
参考:https://zhuanlan.zhihu.com/p/392808684 1.比较通俗地讲解一下泰勒公式是什么. 泰勒公式,也称泰勒展开式.是用一个函数在某点的信息,描述其附近取值的公式.如 ...
- 25 String 对象中的属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- (0619) wavedrom 画时序图---链接
https://www.cnblogs.com/jackzhang001/p/15879207.html
- 调度器45—wake_affine
基于 Linux-5.10 一.wake_affine 简介 1. 背景 在进程唤醒选核路径中, wake_affine 倾向于将被唤醒进程(wakee)尽可能安排在 waker所在 CPU 上, 这 ...
- 【Java学习Day06】注释种类、符号及用法
注释种类 单行注释:只能注释一行文字 多行注释:可以注释一段文字 文档注释:用来生成说明文件 注释符号及用法 单行注释:// //后面写注释 多行注释:/**/ /* 我是注释 我是注释 我是注释 * ...
- [转载] MATLAB | RGB image representation
转载自https://www.geeksforgeeks.org/matlab-rgb-image-representation/ MATLAB | RGB image representation ...
- android系统源码编译报错问题分析处理--持续更新
一.build/make/core/base_rules.mk:232: error: packages/services/Car/service: LOCAL_BUILT_MODULE and LO ...
- QTcpSocket 设置接收数据延时等待时间
/* 客户端接入槽函数 */ void TcpServer::slotNewConnect(void) {/* 获取连接的客户端句柄 这里设置刷新数据时间 1ms */ QTcpSocket *pSo ...
- 把pyecharts动图导入到PPT中
如何把echarts 动图导入PPT 置顶 且听风来 2019-05-22 14:54:17 3347 收藏 6展开 首先看PPT是否开启插件,开启后 此处就有标志,然后就在你想插入的幻灯片处插入两个 ...
- clickHouse安装踩坑
1.查看版本 clickhouse-server --version 2.下载 linux机器上 wget下载,有两个安装包体积较大 wget https://packages.clickhouse ...