当前位置: 首页 > news >正文

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

        

相关文章:

  • OpenGL相关库下载并解决三个入门问题
  • kettle从入门到精通 第六十四课 ETL之kettle kettle中执行SQL脚本步骤,使用需当心
  • 路由器重启真的好吗?多久重启一次更好?
  • 计算机网络 4.1双绞线
  • python-windows10普通笔记本跑bert mrpc数据样例0.1.001
  • 《深入浅出C语言:从基础到指针的全面指南》
  • C++中的if constexpr
  • 探索HTML5 Geolocation:精准定位网页的新纪元
  • 一个训练好的神经网络的模型文件的内容主要是什么信息呢?请用大白话举例说明( 百度 API 回答 )
  • Flutter与iOS原生混合开发 iOS项目集成Flutter
  • (杂交版)植物大战僵尸
  • 流批一体计算引擎-10-[Flink]中的常用算子和DataStream转换
  • OpenCV的核心数据结构
  • codereview时通常需要关注哪些
  • Mongodb---java篇
  • 《深入 React 技术栈》
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • gitlab-ci配置详解(一)
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Python连接Oracle
  • Rancher如何对接Ceph-RBD块存储
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 设计模式 开闭原则
  • 我看到的前端
  • 异常机制详解
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #VERDI# 关于如何查看FSM状态机的方法
  • #每天一道面试题# 什么是MySQL的回表查询
  • #图像处理
  • #在 README.md 中生成项目目录结构
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (02)Hive SQL编译成MapReduce任务的过程
  • (4)logging(日志模块)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (七)c52学习之旅-中断
  • (十) 初识 Docker file
  • (原創) 物件導向與老子思想 (OO)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .aanva
  • .gitignore不生效的解决方案
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .Net IOC框架入门之一 Unity
  • .netcore 获取appsettings
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作