STM32(Cortex-M3)中断优先级介绍及使用方法

一、STM32(Cortex-M3)优先级分类:

       STM32分为抢占式优先级响应优先级,每个中断源都需要被指定这两种优先级。

二、 优先顺序如下:

      1、抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。(注意:优先级数字越小,优先级越高)

      2、抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注意:优先级数字越小,优先级越高)

      3、抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。(硬件中断编号从中断向量表当中查看)

三、优先级寄存器

        优先级使用寄存器使用四位,分别用于定义抢占优先级及相应优先级,定义分组如下:

优先级分组抢占优先级响应优先级描述bit4bit3bit2bit1
NVIC_PriorityGroup_000到15的取值高4位全部是响应优先级
无抢占优先级
响应响应响应响应
NVIC_PriorityGroup_10到1的取值0到7的取值抢占优先级为1位
响应优先级为3位
抢占响应响应响应
NVIC_PriorityGroup_20到3的取值0到3的取值抢占优先级为2位
响应优先级为2位
抢占抢占响应响应
NVIC_PriorityGroup_30到7的取值0到1的取值抢占优先级为3位
响应优先级为1位
抢占抢占抢占响应
NVIC_PriorityGroup_40到15的取值0高4位全部是抢占优先级
无响应优先级
抢占抢占抢占抢占

四、使用方法

         1、 选择优先级分组:

           通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,例如:NVIC_PriorityGroupConfig( NVIC_PriorityGroup_0 ); 表示选择为分组0,则全部为响应优先级。它在程序中只能调用一次

         2、定义中断源优先级别:

            通过 NVIC_Init(&NVIC_InitStructure); 函数具体设置为断优先级别,可以在中断源硬件初始化阶段完成定义。

        NVIC_InitTypeDef  NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;            // 次优先级为0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值