STM32的中断处理

1.STM32的中断和异常

STM32最多有32个中断源,大体上可分为两类,外部中断源与内部中断源(引起ARM芯片执行指令/内部功能模块),其中断优先级别可分为FIQ(快速中断请求)、向量IRQ、非向量IRQ,其级别依次递减.
Cortex内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常和中断,并将其用一个表管理,编号为0-15的称为内核异常,而16以上的则称为外部中断,这个表即为中断向量表。
中断向量表
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述表可以从启动文件startup_stm32f10x_hd.s中查找,在启动文件中,已经有相应芯片可用的全部中断向量,而且在编写中断服务函数时,需要从启动文件中定义的中断向量表查找中断服务函数名。

2.NVIC中断控制器

因STM32有很多的中断,故配置起来并不容易,因此便需要一个强大而方便的中断控制器NVIC(Nested Veectored Interrupt Controller ),且其属于Cortex内核的器件。
嵌套向量中断控制器NVIC相关的中断管理工作主要有开放中断、关闭中断设置中断请求标志、读中断请求标志、清除中断请求标志和配置中断优先级等。

对于中断的配置,最重要即为配置其优先级,但STM32的同一个中断向量需要设置两个优先级,抢占优先级和响应优先级
抢占优先级和响应优先级
STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小表明其优先级别越高。
抢占,是指打断其它中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A的过程中被中断B打断,执行完中断服务函数B再继续执行中断服务A)。
响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时达到,则先处理响应优先级高的中断。
例如,现有三个中断向量
在这里插入图片描述
如内核正在执行C的中断服务函数,则它能被抢占优先级更高的中断A打断,由于B和C的抢占优先级相同,所以C不能被B打断。但如果B和C中断时同时到达的,内核就会首先响应 优先级别更高的B中断。
NVIC的优先级组
在配置优先级的时候,还要注意中断种类的数量。NVIC只可以配置16种中断向量的优先级,即为,抢占优先级和响应优先级的数量由一个4位的数字来决定,把这个4位数字的位数分配成抢占优先级部分和响应优先级部分,由5组分配方式。
在这里插入图片描述
注意:一个工程文件中NVIC的优先级组只需设置一次即可。
NVIC的优先级分组,只是为以后的中断程序设置了一个规则,例如,设置第1组,则表示,抢占优先级只能是0级或1级,响应优先级为0~7级。即,配置中断的优先级时,只能在这个范围中取值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值