重新学习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()只能在程序中配置一次,如果多次配置的话会使优先级紊乱,导致出现运行错误。

相关推荐
三伏52211 分钟前
Cortex-M3权威指南Cn第十章——笔记
笔记·单片机·嵌入式硬件·cortex-m3
独处东汉13 分钟前
freertos开发空气检测仪之按键输入事件管理系统设计与实现
人工智能·stm32·单片机·嵌入式硬件·unity
小灰灰搞电子13 分钟前
STM32/GD32 字节对齐详解
stm32·单片机·嵌入式硬件
来自晴朗的明天3 小时前
2、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
良许Linux4 小时前
DSP的选型和应用
后端·stm32·单片机·程序员·嵌入式
混分巨兽龙某某4 小时前
基于STM32的嵌入式操作系统RT-Thread移植教学(HAL库版本)
stm32·嵌入式硬件·rt-thread·rtos
清风6666665 小时前
基于单片机的多路温湿度采集与WIFI智能报警控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
爱吃番茄鼠骗5 小时前
回顾ESP32S3系列---基础篇(Bootloader)
单片机·嵌入式硬件
青椒*^_^*凤爪爪6 小时前
Vscode下调试STM32N6系列单片机的方法
vscode·单片机·stm32n6·stm32n647
余生皆假期-6 小时前
永磁同步电机下桥三电阻采样方式的电机电流重构方法
单片机·嵌入式硬件·嵌入式