STM32中断分配——抢占优先级与响应优先级

<原创声明:本文属博主原创,禁止一切形式的转载、抄袭>
在用单片机做数据采集或者控制的时候,有时候需要一个工程开好几个中断,去同时控制舵机、电机、串口数据收发等等,这时候就需要对这若干个中断进行等级划分。
1. STM32的抢占优先级和响应优先级:
中断优先级寄存器NVIC_IPRx,本寄存器宽度为8位,原则上每个外部中断可配置的优先级为0~255,实际上精简了,只用到了它的高4位。这4位,又被分成了抢占优先级和响应优先级两组:

(1)抢占属性:就是打断其它正在执行的中断,这时就出现了中断嵌套。抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。
(2)响应属性:如果两个中断的抢占优先级相同,并且他们同时申请中断,那么该怎么办呢?则响应属性较高的中断优先处理。响应属性由抢占属性由NVIC_IRQChannelSubPriority 的参数配置。
2.中断数量种类:
NVIC由四位二进制数字来表示。4位二进制表示抢占优先级和响应优先级,用Q表示抢占优先级,用X表示响应优先级,那么4位二进制进行中断配置有以下5种方式:
(1) XXXX: 4位全部用来配置响应优先级,16种中断向量都具有不同的响应优先级;
(2) QXXX:抢占优先级有两种,编号0或1,响应优先级有8种;
(3) QQXX;
(4) QQQX;
(5) QQQQ;
用NVIC_PriorityGroupConfig(NVIC_PriorityGroup_n)选择中断数量种类(n可取值0~4);
在这里插入图片描述
(注:编号越小,优先级别越高;
要想配置以上优先级,调用库函数NVIC_PriorityGroupConfig(),输入的参数可以是NVIC_PriorityGroup_0 ~ NVIC_PriorityGroup_4,分别对应以上介绍的5种分配组;
3.
当中断数量超过16时,那么至少有两个中断向量是使用相同的中断种类,具有相同中断种类的中断向量不能互相嵌套。抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。(硬件中断编号从中断向量表当中查看)
4.eg:

Int main(void){
......//省略若干
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //设置NVIC中断分组2:2,两位抢占优先级,两位响应优先级;有2^2=4种抢占优先级,4种响应优先级。
......
}
void uart_init(u32 bound){
......
//********************Usart1 NVIC串口配置*****************************
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;   //抢占优先级1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		 //响应优先级3;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      //IRQ通道使能;
	NVIC_Init(&NVIC_InitStructure);  	//根据指定的参数初始化NVIC寄存器;
......
}

<原创声明:本文属博主原创,禁止一切形式的转载、抄袭>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值