STM32--中断优先级分组

本文详细解释了中断优先级的组成,抢占优先级和响应优先级的区别,以及NVIC中断分组的设置方法。特别关注了NVIC_PriorityGroupConfig函数和中断初始化过程,提醒读者中断优先级分组应一次性设定并保持不变以避免混淆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

中断优先级判断:

抢占优先级和响应优先级区别:

NVIC中断分组:

NVIC中断优先级分组配置:

分组配置函数:

中断初始化函数:

中断优先级:

中断优先级由两部分组成:抢占优先级(Preemption Priority)和响应优先级(Response priority)。


抢占优先级和响应优先级区别:

1.高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。

2.抢占优先级相同,高响应优先级的中断不能打断低响应优先级的中断。

3.若当两个中断同时发生时,则判断中断响应优先级,高响应优先级的中断先执行,若两个中断的抢占优先级和响应优先级都相同,按照中断产生的顺序执行。


NVIC中断分组:

中断分组配置由SCB->IRCR寄存器(bit 10 ~ 8)决定的,确定IP寄存器的bit 7 ~ 4 的分配情况。

分组SCB->IRCR(bit 10 ~ 8)设置为IP寄存器的(bit 7 ~ 4)的分配情况
01110位抢占优先级,4位响应优先级
11101位抢占优先级,3位响应优先级
21012位抢占优先级,2位响应优先级
31003位抢占优先级,1位响应优先级
40114位抢占优先级,0位响应优先级

若SCB->IRCR寄存器(bit 10 ~ 8)设置为:110

则IP寄存器的(bit 7 ~ 4)的分配情况:1位抢占优先级,3位响应优先级

抢占优先级分配1个位,故可设置为:0、1   (十进制:0、1 )

抢占优先级分配3个位,故可设置为:000、001、010、011......(0、1、2、3.....)

例子:

中断抢占优先级响应优先级
中断112
中断213
中断322
中断423

注意:数值越低,优先级越高(抢占优先级和响应优先级的数值越低,则优先级越高)

所以中断1、2可以打断中断3、4,因为中断1、2的抢占优先级高于中断3、4。

中断1、2同时产生,先执行中断1,因为中断1的响应优先级高于中断2。

执行顺序:中断1 > 中断2 > 中断3 > 中断4


NVIC中断优先级分组配置:

分组配置函数:


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

/*NVIC_PriorityGroupConfig()函数入口参数
NVIC_PriorityGroup_0 ||  设置系统中断优先级分组0
NVIC_PriorityGroup_1 ||  设置系统中断优先级分组1
NVIC_PriorityGroup_2 ||  设置系统中断优先级分组2
NVIC_PriorityGroup_3 ||  设置系统中断优先级分组3
NVIC_PriorityGroup_4 ||  设置系统中断优先级分组4
*/

中断初始化函数:

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

typedef struct
{
  uint8_t NVIC_IRQChannel; //设置中断通道
  uint8_t NVIC_IRQChannelPreemptionPriority;//设置抢占优先级
  uint8_t NVIC_IRQChannelSubPriority; //设置响应优先级
  FunctionalState NVIC_IRQChannelCmd; //使能/使能
} NVIC_InitTypeDef;

//实例

usart1_NVIC(){

NVIC_InitTypeDef NVIC_InitStructure;//创建结构体
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;		//子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器、

}

中断优先级分组注意要点:

中断优先级分组最好只设置一次,确定好分组后不要再做修改。

 例如:2位抢占,2为响应

中断1设置为:11   01  和  中断2设置为:  11   10        抢占优先级相同

若改变分组:3为抢占,1为响应   

中断1设置为:110   1  和  中断2设置为:  111   0         抢占优先级不同

分组改变,导致抢占优先级改变。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值