中断介绍
中断概念
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
NVIC介绍
NVIC的英文全称是Nested vectored interrupt controller,中文意思就是嵌套向量中断控制器,它属于M3内核的一个外设,控制着芯片的相关中断功能。
1.CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
2.STM32进行了裁剪,STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。
3.STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个)
常用寄存器
typedef struct
{
__IO uint32_t ISER[8]; //中断使能寄存器
uint32_t RESERVED0[24];
__IO uint32_t ICER[8]; //中断失能寄存器
uint32_t RSERVED1[24];
__IO uint32_t ISPR[8]; //中断挂起寄存器
uint32_t RESERVED2[24];
__IO uint32_t ICPR[8]; //中断解挂寄存器
uint32_t RESERVED3[24];
__IO uint32_t IABR[8]; //中断激活标志位寄存器
uint32_t RESERVED4[56];
__IO uint8_t IP[240]; //中断优先级控制寄存器
uint32_t RESERVED5[644];
__O uint32_t STIR; //中断软触发中断寄存器
} NVIC_Type;
中断优先级
STM32的优先级分为抢占式优先级和响应优先级,优先级数值越小,优先级别越高。
判断方法:1.先看抢占式优先级,它起着决定性的作用,当抢占式优先级比较高时,优先级最高
2.当抢占式优先级相同时,再看响应优先级,响应优先级高的优先级高
3.当抢占式优先级和响应优先级都相同时,则看哪个中断先发生就先执行
4.当一个中断正在执行时要产生嵌套,那么只看抢占式优先级,不看响应优先级

可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式
NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组
中断配置
1.使能外设中断
2.设置中断优先级分组,初始化NVIC_InitTypeDef 结构体
typedef struct
{
uint8_t NVIC_IRQChannel; //中断通道
uint8_t NVIC_IRQChannelPreemptionPriority;//抢占式优先级
uint8_t NVIC_IRQChannelSubPriority; //响应优先级
FunctionalState NVIC_IRQChannelCmd; //中断使能
}NVIC_InitTypeDef;
3.编写中断服务函数

本文详细介绍了中断的概念,重点讲解了STM32中的NVIC(Nested Vectored Interrupt Controller),包括其功能和STM32对NVIC的裁剪情况。文章还阐述了中断的优先级设置,分为抢占式和响应优先级,并提供了配置中断的步骤。通过NVIC的寄存器如ISER、ICER等进行中断的启用、禁用和管理。最后,提到了中断优先级分组以及如何通过NVIC_PriorityGroupConfig()函数进行配置。
1607





