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

相关推荐
夜月yeyue2 小时前
ARM内核与寄存器
arm开发·stm32·单片机·嵌入式硬件·mcu·链表
云山工作室5 小时前
基于单片机的防火防盗报警系统设计(论文+源码)
单片机·嵌入式硬件
A-花开堪折7 小时前
Qemu-STM32(十三):STM32F103加入RCC控制器
stm32·单片机·嵌入式硬件
古希腊掌握嵌入式的神7 小时前
[硬件]单片机下载电路讲解-以ch340为例
单片机·嵌入式硬件
lzb7597 小时前
第16届蓝桥杯单片机模拟试题Ⅰ
单片机·蓝桥杯
XYN619 小时前
【嵌入式面试】
笔记·python·单片机·嵌入式硬件·学习
LongRunning9 小时前
【温酒笔记】电源管理-GPIO浮空输入
stm32·单片机
IDIOT___IDIOT11 小时前
为什么要给单片机植入操作系统
单片机·嵌入式硬件
Wythzhfrey15 小时前
51单片机Day03---让一个LED灯闪烁
c语言·单片机·嵌入式硬件·c#·51单片机
双叶83616 小时前
(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)
c语言·开发语言·c++·单片机·嵌入式硬件·microsoft·51单片机