重新学习STM32(2)NVIC

概念简介

NVIC,即嵌套向量中断控制器,控制着中断相关的功能,是内核里面的一个外设。

中断在单片机编程中的作用是使单片机能及时响应需要立即处理的事件,但是这些事件也分紧急和非紧急,因此需要优先级来区分。

优先级分为主优先级和子优先级,其中主优先级又叫抢占优先级(后面主优先级全部称为抢占优先级),当同时有多个时间产生中断时,比较抢占优先级,该优先级高的先响应,抢占优先级相同的比较子优先级。优先级分组如下图。

简单应用

在配置每个中断的时候一般需要注意如下问题:

  1. 使能外设某个中断,这个具体由每个外设的相关中断使能位控制。比如串口有发送完成中断,接收完成中断,这两个中断都由串口控制寄存器的相关中断使能位控制。

  2. 初始化 NVIC_InitTypeDef 结构体,配置中断优先级分组,设置抢占优先级和子优先级,使能中断请求。NVIC_InitTypeDef 结构体在固件库头文件 misc.h 中定义。

在实际使用时,需要定义以下两个函数。

复制代码
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  /* 嵌套向量中断控制器组选择 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
  /* 配置中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = xxx_IRQ;
  /* 抢断优先级*/
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* 初始化配置NVIC */
  NVIC_Init(&NVIC_InitStructure);
}

void xxx_IRQHandler(void)
{
   
}

上面两个函数,第一个是NVIC的配置函数,和GPIO的使用方法类似,也是给结构体成员进行定义,最后调用初始化函数;第二个是中断触发时运行的事件。通过这两个函数,就可以在达到触发中断条件的时候进行某样操作。

需要注意的是,优先级分组NVIC_PriorityGroupConfig()只能在程序中配置一次,如果多次配置的话会使优先级紊乱,导致出现运行错误。

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘5 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
zd8451015005 天前
RS485 总线详解
单片机·嵌入式硬件
牛根生同志5 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
goldenrolan5 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
✎ ﹏梦醒͜ღ҉繁华落℘5 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展5 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司5 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑5 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
CC城子5 天前
STM32H7_FDCAN 驱动笔记
stm32·can·canfd
意法半导体STM325 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发