stm32的NVIC中断

NVIC中断优先级分组

CM3内核支持256个中断,其中包含了16个内核中断以及240个外部中断,并且具有256级的可编程中断设置。

STM32没有用到CM3的全部东西,用了其中的一部分。STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。

STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有的68个)。

在中文参考手册上可以找到其60个可屏蔽中断。

中断管理方法:

首先对STM32中断进行分析,组为0~4.同时,对每个中断设置一个抢占优先级和一个响应优先级。

在系统初始化进行其配置分组,分组配置是在寄存器SCB->AIRCR种配置。

stm32的NVIC中断_第1张图片

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

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

抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。

抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。

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

 

中断优先级分组函数(确定中断优先级的分组)

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
//使用方法如
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

对于每个中断,设置其中断优先级

通过中断初始化函数

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

而NVIC_InitTypeDef 结构体中有三个成员变量,其作用分别为:

NVIC_IRQChannel:定义初始化的是哪个中断,可以在stm32f10x.h中找到每个中断对应的名字。

NVIC_IRQChannelPreemptionPriority: 定义这个中断的抢占优先级别

NVIC_IRQChannelSubPriority:定义这个中断的子优先级(响应优先级)

NVIC_IRQChannelCmd:该中断是否使能。

 

 

本文根据正点原子stm32系列教程编写

你可能感兴趣的:(单片机及嵌入式)