STM32笔记 (七)中断系统与NVIC嵌套向量中断控制器
简介
STM32拥有一个强大的中断系统,几乎所有外设都能产生中断,对于F103系列的单片机,ARM公司在Cortex‐M3 的内核水平上搭载了一个异常响应系统(异常就是中断), 支持为数众多的系统异常和外部中断。对于每一种中断都有一个编号,其中,编号为 1-15 的对应系统异常,大于等于 16 的则全是外部中断
Cortex-M3系统异常清单:
Cortex-M3外部中断清单:
Cortex-M3提供了两百多种异常类型,但在STM32中并没有这么多,STM32的中断系统是被阉割裁剪过的,只有六十多个,但相比于51单片机也已经是十分强大了
NVIC嵌套向量中断控制器
NVIC嵌套向量中断控制器,控制着整个芯片中断相关的功能,相当于中断系统的大脑,是内核里面的一个外设,但由于ST官方在设计芯片的时候对Cortex-M3的中断系统进行了裁剪,把不需要用到的部分给去掉。
NVIC的寄存器
寄存器的结构体定义位于core_cm3.h中
typedef struct
{__IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */uint32_t RESERVED0[24]; __IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */uint32_t RSERVED1[24]; __IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */uint32_t RESERVED2[24]; __IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */uint32_t RESERVED3[24]; __IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */uint32_t RESERVED4[56]; __IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */uint32_t RESERVED5[644]; __O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */
} NVIC_Type;
其中
ISER是中断使能寄存器,ICER是中断清除寄存器,IP是八位8bit中断优先级寄存器,我们在配置中断的时候一般只会用到这三个寄存器。
中断优先级
前面的寄存器中有出现IP八位中断优先级寄存器,但在STM32中实际只用了4个bit用于优先级的设置
用于表达的优先级还分为
- 抢占优先级(pre-emotion priority)
- 子优先级(subpriority)
在比较优先级的时候会先比较抢占优先级,之后再比较子优先级,抢占优先级相同时比较子优先级,子优先级和抢占优先级都相同时比较中断编号
优先级分组
由于优先级中有抢占优先级和子优先级之分,因此需要对这四个位进行分组,分出对应的bit用于两种优先级的表达
控制优先级分组的是内核外设SCB中的AIRCR寄存器,有五种分配选择
中断的初始化编程
中断初始化函数为:void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
NVIC_InitTypeDef初始化结构体:
typedef struct {uint8_t NVIC_IRQChannel; // 中断源uint8_t NVIC_IRQChannelPreemptionPriority; // 抢占优先级uint8_t NVIC_IRQChannelSubPriority; // 子优先级FunctionalState NVIC_IRQChannelCmd; // 中断使能或者失能} NVIC_InitTypeDef;
这里边就已经说明了中断编程的一些要点,由于STM32几乎每一个外设都能产生中断,因此使用哪一个外设的中断的时候
需要把对应外设的负责中断的寄存器给使能
配置中断源NVIC_IRQChannel
中断源可以在stm32f10x.h头文件中找到
配置抢占优先级与子优先级
NVIC_IRQChannelPreemptionPriority:抢占优先级
NVIC_IRQChannelSubPriority:子优先级
在这之前还需要设置优先级分组
用void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
函数配置,具体使用方法可以去msic.h和msic.c查询使能中断或失能中断
NVIC_IRQChannelCmd:中断使能( ENABLE)或者失能( DISABLE)编写中断服务函数
需要注意的是,STM32的中断服务函数名字不能随意取,51中用编号区分,STM32中就没有,需要严格按照头文件中所声明的名称编写,如果函数名称与头文件定义的不一样,在执行中断的时候会跳转到启动文件中的空函数,从而进入死循环
STM32笔记 (七)中断系统与NVIC嵌套向量中断控制器相关推荐
- NVIC嵌套向量中断控制器
首先区分一下中断和异常的关系,其实中断和异常时有差异也有关联的,我们常常所说的中断其实也包含了异常.中断是指系统停止当前正在运行的程序转而其他服务,可能是程序接收了比自身高优先级的请求,或者是人为设置 ...
- STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记四(3):嵌套向量中断控制器
这一部分描述了嵌套向量中断控制器和它使用到的寄存器.NVIC支持: 高达81个中断(根据STM32设备的型号,参照数据手册): 对每个中断可编程优先级级别0-15,一个高的优先级级别相应着较低的优先级 ...
- 嵌套向量中断控制器 (NVIC)
NVIC 是一种片上控制器,可为 ARM Cortex-M MCU 中的中断驱动事件提供快速和低延迟的响应.在本教程中,我们将解释嵌套向量中断控制器(NVIC) 在 ARM Cortex-M 微控制器 ...
- 【STM32学习笔记】(12)——NVIC(嵌套向量中断控制器)详解
NVIC(嵌套向量中断控制器)简介 在讲如何配置中断优先级之前,我们需要先了解下 NVIC.NVIC 是嵌套向量中断控制器,控制着整个STM32芯片中断相关的功能,它跟Cortex-M3 内核紧密联系 ...
- 深入浅出地理解STM32中的中断系统——从原理到简单工程示例——保姆级教程
深入浅出地理解STM32中的中断系统 一.什么是中断?什么是异常? 二.如何管理中断? 三.NVIC 1 NVIC 特点 2 中断优先级 (1) 优先级分组 3 中断向量表 4 中断服务函数 (1)中 ...
- 嵌套向量中断控制器NVIC和系统控制块SCB特性
嵌套向量中断控制器NVIC和系统控制块SCB特性 NVIC:Nested Vectored Interrupt Controller 嵌套向量中断控制器 SCB:System Control Bloc ...
- STM32笔记之 NVIC(嵌套向量中断控制器)
写在前面: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. 目录 一.NVIC简单解释 二.抢占优先级 ...
- STM32 (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
一.STM32 (Cortex-M3) 中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作"亚优先级"或" ...
- 【操作系统笔记】中断系统
程序中断: 执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂 时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现 行程序的断点处,继续执行原程 ...
最新文章
- 对接钉钉审批_低代码对接钉钉创建外部联系人
- ajax async
- jquery中如何实现一个li里面一排6张图片进行切换
- android缓存框架SimpleCache
- 关于struts2漏洞问题及解决办法
- 这才是程序员该有的桌面壁纸!
- 【2016年第4期】国务院批复建立促进大数据 发展部际联席会议制度
- 背景学习模型 —》codebook算法
- Strus2 Unti1
- 14年第五届蓝桥杯C/C++大学B组真题———史丰收算法
- 大数据智能下数据脱敏的思考
- Nyoj 954 N!
- 网页计算机谈音乐,如何用windows电脑录制网页上或电脑中自己的音乐
- C语言学习笔记第五天_项目训练
- cad怎么画立体图形教学_cad怎么绘立体图?
- 4.Vue指令(Directives)
- 【简单应用】STC8+OLED(4P)显示
- 艾永亮:疫情之下,名创优品的超级产品战略帮助企业逆势而上
- python多线程解决数据安全问题
- 山东工商学院 计算机 银行,山东工商学院与中国工商银行成为战略合作伙伴
热门文章
- Mac修改shell版本(类型)
- 浙大版《C语言程序设计(第3版)》题目集
- 给Web应用更换公众号步骤
- Android 读取csv格式数据文件
- windows下qemu的安装与设置环境变量
- 通信系统通信过程仿真(联合信源信道编码)
- css元素旋转原点,使用transform-origin属性改变元素变换原点
- 数仓架构实践3:苏宁售后体系四层模型架构
- python海量数据分析师职业技能_大数据分析师技能图谱详解与零基础自学内容大全...
- macosx10.13运行go报dyld: Symbol not found: _SecTrustEvaluateWithError错误的解决办法