STM32学习笔记6 --------- NVIC中断优先级管理

CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但是STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。在STM32F103系列上,只有60个(在107系列才有68个)。

在这里插入图片描述

抢占优先级的级别高于响应优先级,而数值越小所代表的优先级就越高。

注意:第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;

第二,高抢占优先级是可以打断正在进行的低抢占优先级中断。而抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断

NVIC中断管理函数主要在misc.c文件里面

中断优先级分组函数NVIC_PriorityGroupGonfig

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

//eg:分组范围为0~4,假设设置整个系统的中断优先级分组值为2
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//这样就确定了一共为"2位抢占优先级, 2位响应优先级"。

这个函数在系统中只能被调用一次,一旦分组确定就最好不要更改。

对每个中断我们如何确定它的抢占优先级和响应优先级呢?
中断初始化函数NVIC_Init
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

NVIC_InitTypeDef的成员变量:

typedef struct
{
	uint8_t NVIC_IRQChannel;          //初始化哪个中断
	uint8_t NVIC_IRQChannelPreemptionPriority;    //定义这个中断抢占优先级
	uint8_t NVIC_IRQChannelSubPriority;    //定义子优先级
	FunctionalState NVIC_IRQChannelCmd;   //中断是否使能
}NVIC_InitTypeDef;

以上是中断分组分概念以及设定优先级值的方法,每种优先级还有一些关于清除中断,查看中断状态等。

中断优先级设置的步骤:

  • 系统运行开始的时候设置中断分组。确定组号,也就是确定抢占优先级和子优先级的分配位数。调用函数为NVIC_PriorityGroupConfig();
  • 设置所用到的中断的中断优先级别。对每个中断调用函数为NVIC_Init();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值