STM32 NVIC中断优先级管理

本文详细介绍了STM32的NVIC中断优先级管理,包括中断分组、中断线、中断通道的关系,以及如何通过MDK中的寄存器进行中断使能和优先级设置。STM32拥有60个可屏蔽中断,分为5个优先级组,通过NVIC_PriorityGroupConfig设置中断分组,使用NVIC_Init进行中断初始化。中断线与IO口的对应关系需要在硬件设计时注意。
摘要由CSDN通过智能技术生成
STM32 NVIC中断优先级管理

后面用一个具体的例子说明了中断分组、中断线、中断通道的连接关系,先看基本概念:

CM3内核支持256个中断,包括16个内核中断和240个外部中断,并且具有256级的可编程中断设置。STM32只使用了一部分CM3内核的东西。STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。常用的就是这68个可屏蔽中断,但是在STM32F103系列上面只有60个(107系列有68个)。
在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:

typedef struct
{
    vu32 ISER[2];
    u32 RESERVED0[30];
    vu32 ICER[2];
    u32 RSERVED1[30];
    vu32 ISPR[2];
    u32 RSERVED2[30];
    vu32 ICPR[2];
    u32 RSERVED3[30];
    vu32 IABR[2];
    u32 RSERVED4[30];
    vu32 IPR[15];
}NVIC_TypeDef;

ISER[2]:ISER全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。103系列可屏蔽中断有60个,这里用了2个32位寄存器,总共可以表示64个中断,STM32F103只用了其中的前60位,ISER[0]的bit0~bit31分别对应中断0~31。ISER[1]的bit0~27对应中断32~59;这样,要使能某个中断,必须设置相应的ISER位为1,使该中断被使能(这里仅是使能,还要配合中断分组、屏蔽、IO口映射等设置才算一个完整的中断设置)。
ICER[2]:全称是Interrupt Clear-Enable Registers,是一个清除中断使能寄存器组,和ISER寄存器功能相反。这里专门设置一个ICER寄存器来清除中断位,而不是向ISER写0来擦除,是因为NVIC的这些寄存器都是写1有效的,写0是无效的。
ISPR[2]:全程是Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和ISER是一样的,通过置1,可将正在进行中的中断挂起,而执行同级或更高级别的中断,写0无效。
ICPR[2]:Interrupt Clear-Pending Registers,解除中断挂起。写1

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值