STM32——中断概览(中断优先级)

中断是指计算机运行过程中,出现某些意外情况需要主机干预时,机器能够自动停止正在运行的程序并转入处理新情况的程序,处理完毕后有返回原来被暂停的程序继续运行

STM32的中断和异常

(1)对于异常和外部中断的功能,对于STM32单片机而言,是由芯片内的Cortex-M内核提供支持,这部分功能时有ST公司在Cortex-M内核上拓展或修改而来的

(2)异常和中断概念相近,异常可以说是内核活动产生(比如执行指令出错),中断一般是指,有连接到内核的外部器件(外设)产生(比如外设产生中断,提示数据传输完成),它们的触发或者说处理机制相同,使用中并不严格区分二者

STM32异常和中断一览表

 可以看到,异常都是由编号表示的,并且中断类型也很多,中断存在优先级

中断优先级

(1)中断优先级分为两种,可编程和不可编程,可编程的表示可以自己修改中断优先级,不可编程的就不能修改

(2)对于STM32中断优先级,决定着内核优先响应谁的中断请求

(3)小值优先原则,中断优先级数值越小,中断就会被优先相应

(4)中断优先级按照优先级分组配置

中断优先级分组

以F103为例,STM32上只使用M3内核支持的8bit优先级中的高4位bit,也就是STM32支持2^4个优先级

bit7bit6bit5bit4bit3bit2bit1bit0
用于表达优先级未使用,读回为0

在F103上,使用这4个bit,组织成5组优先级分组,每组分为1个抢占组,1个子优先级组

优先级分组抢占优先级子优先级描述
NVIC_PriorityGroup_000-15主-0bit,子-4bit
NVIC_PriorityGroup_10-10-7主-1bit,子-3bit
NVIC_PriorityGroup_20-30-3主-2bit,子-2bit
NVIC_PriorityGroup_30-70-1主-3bit,子-1bit
NVIC_PriorityGroup_40-150主-4bit,子-0bit

对于组0,抢占优先级为0,表示他没有抢占优先级,4个bit全部用来表示子优先级。对于组1,抢占优先级为0-1,用1个bit表示抢占优先级,其余3个bit表示子优先级...

(1)通过优先级分组,可以管理中断的响应顺序

(2)只有抢占优先级才由抢占中断权限,发生中断嵌套,打断就发生中断嵌套,没有能力打断,那就被挂起

假如事件A抢占优先级为0,B的抢占优先级为10,在B执行过程中,A发出中断请求,则会抢过B中断的使用权,等A执行完毕再继续执行B(ps:如果A并不能打断事件B,A就会被挂起)

(3)如果中断抢占优先级相同,不发生抢占

(4)如果多个挂起的中断具有相同的抢占优先级,则子优先级高的先行,如果子优先级相同,则IRQ(通常指外部中断请求)编号小的先行(IRQ来源例如:stm32f103xe.h)

抢占优先级>子优先级>IRQ编号

 (5)可编程的优先级,通过嵌套向量中断控制器(NVIC)实现

NVIC库函数描述
void NVIC_EnableIRQ(IRQn_Type IRQn)使能中断
void NVIC_DisableIRQ(IRQn_Type IRQn)失能中断
void NVIC_SetPendingIRQ(IRQn_Type IRQn)设置中断悬起位(发起中断请求,硬件触发)
void NVIC_ClearPendingIRQ(IRQn_Type IRQn)清除中断悬起位
uint_32t NVIC_GetPendingIRQ(IRQn_Type IRQn)获取中断悬起编号
void NVIC_SetPriorityIRQ(IRQn_Type IRQn,uint32_t priorty)设置中断优先级
uint_32t NVIC_GetPriorityIRQ(IRQn_Type IRQn)获取中断优先级
void NVIC_SystemReset(void)系统复位

  • 10
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值