笔记5:STM32F4中断简介

一.中断简介
1.嵌套向量中断控制器NVIC:属于内核部分
在这里插入图片描述
在这里插入图片描述
2.中断结构体

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;

悬起:同时来的中断,优先级低的中断被悬起,不被处理
3.中断优先级
优先级:每组的优先级有效值0-255,数字越低,逻辑优先级越高。
在这里插入图片描述
在这里插入图片描述
优先级设定时,低四位未使用,设定优先级分组时,NVIC_Priority_Group0中0表示主优先级为0,子优先级有四位表示,为0-15,bit7,bit6,bit5,bit4用来表示子优先级。NVIC_Priority_Group1中1表示主优先级为1,子优先级为0-7,用bit6,bit5,bit4表示。在比较中断优先级时,先比较主优先级,再比较子优先级,若主,子优先级相同,则比较向量表中的硬件编号(越小优先级越高)。
二.中断编程
1.中断编程顺序
在这里插入图片描述
使能中断请求:

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}
中断初始化:
NVIC_InitTypeDef
typedef struct
{
  uint8_t NVIC_IRQChannel;             //中断源
  uint8_t NVIC_IRQChannelPreemptionPriority; //抢占优先级
  uint8_t NVIC_IRQChannelSubPriority;      //子优先级
  FunctionalState NVIC_IRQChannelCmd;        //使能或者失能
} NVIC_InitTypeDef;

中断函数名必须和中断向量表中已经初始化的函数名相同,写错了只会执行已经定义好的初始化函数名,但是中断基本没起作用。
本文是参考野火视频学习总结文章

猜你喜欢

转载自blog.csdn.net/weixin_46468790/article/details/107145695