STM32 嵌套向量中断控制器NVIC学习

发布者:GoldenDream最新更新时间:2022-06-17 来源: eefocus关键字:STM32  嵌套向量  中断控制器  NVIC 手机看文章 扫描二维码
随时随地手机看文章

STM32中有两个优先级的概念:抢占式优先级和响应优先级(也叫副优先级)。

他们的特性是:


1:高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中:,即低抢占式优先级的中断可以被高抢占式优先级的中断打断;


2:当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。


3:如果两个具有相同抢占式优先级的中断同时到达,那么系统给先处理高响应优先级的中断;


3:如果两个中断的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。


总的来看,它们的级别关系是: 抢占式优先级 > 响应优先级 > 中断表中的排位顺序。只有在上一级优先级相同时下一级优先级才会起作用。




在stm32系统中使用 抢占式优先级(NVIC_IRQChannelPreemptionPriority)和响应优先级(NVIC_IRQChannelSubPriority) 共同构成了一个 中断优先级,每个中断优先级共有4bit数据来表示其使用的抢占优先级和响应优先级,而中断优先级又被分成了四组,每一组使用一种抢占优先级数据位和响应优先级数据位的组合方式。


#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority

                                                            4 bits for subpriority */

#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority

                                                            3 bits for subpriority */

#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority

                                                            2 bits for subpriority */

#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority

                                                            1 bits for subpriority */

#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority

                                                            0 bits for subpriority */

如上述代码,第0组 NVIC_PriorityGroup_0 使用0bits表示抢占式优先级------NVIC_IRQChannelPreemptionPriority无效,4bits表示响应优先级--NVIC_IRQChannelSubPriority值可为0~15。因此,在这一组中的中断没有抢占式优先级,只有响应优先级,它们互相不可打断。

第2组  NVIC_PriorityGroup_2 使用2bits表示抢占优先级------NVIC_IRQChannelPreemptionPriority值可为0~3,使用2bits表示响应优先级NVIC_IRQChannelSubPriority值可为0~3。


无论使用哪一组,其优先级总数(抢占优先级*响应优先级)都是16.


stm32使用NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)来设置使用的中断优先级组。



    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  //使用中断优先级组1 -- 1bit表示抢占优先级,3bits表示响应优先级

    // 设置先占优先级0~1,响应优先级0~7

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;           //选择中断线0

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //抢占优先级为 1

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         //响应优先级为 0

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //中断使能

    NVIC_Init(&NVIC_InitStructure);

关键字:STM32  嵌套向量  中断控制器  NVIC 引用地址:STM32 嵌套向量中断控制器NVIC学习

上一篇:STM32踩坑记录(1):编写代码时遇到STM32无法进入外部中断的原因及解决方法
下一篇:stm32的启动文件--startup_stm32f10x_hd.s

推荐阅读最新更新时间:2024-11-09 11:05

基于STM32设计的指针式电子钟与日历
1. 项目简介 这是基于STM32设计的一个指针式电子钟+万年历小项目,采用3.5寸的LCD屏显示时钟,日历、温度、天气,支持触摸屏调整设置时间,设置闹钟,查看日历等等。整体项目主要是技术点就是LCD屏的图形绘制。比如: 时钟的时针绘制、分针、秒针、表盘、日历绘制等等。 时钟的时间是直接采用STM32本身的RTC时钟,室内的室温数据采用DS18B20温度传感器获取,STM32芯片的具体型号是STM32F103ZET6,只要是STM32F1系列的开发板,代码都是可以通用的 LCD显示屏采用的正点原子的3.5寸TFT显示屏,支持8080时序,自带触摸屏功能,触摸屏是电阻屏,驱动芯片是XPT2046,SPI接口,通信非常方便。
[单片机]
基于<font color='red'>STM32</font>设计的指针式电子钟与日历
STM32驱动ADC0809详解
开发环境与工具 Keil 5主芯片为 STM32F103RET6下载工具为 JLINKXCOM V2.0 串口助手PC 为 Win10 准备工作 购买 ADC0809 芯片 习惯购买元器件多买一个,方便替换验证。 因为做过一次验证之后,这个板子就没有用了,所以购买 DIP-28 宽体底座,让底座焊板子上,芯片插底座上,方便芯片的二次使用,节约成本。 PCB 打板 下图这种模块: STM32 要想驱动 ADC0809 这个芯片需要很多个引脚(不考虑复用的话,需要 16 个引脚),如果这些引脚都用杜邦线连接的话会很乱,如果哪个杜邦线再接触不好,那么对于程序的调试很不方便,所以我就采用核心板+底板的形式来实现,避
[单片机]
如何开发与位置无关的 STM32 完整工程
1、前言 最近有客户询问,能否使用 STM32CubeIDE 在编译时通过设置某个编译选项,让STM32 应用与存储位置无关。这样的优势是能使同一个固件被烧在 STM32 Flash 里的不同位置, 而在系统 Bootloader 里只需要跳到相应的位置就可以正常执行固件代码。客户希望STM32 代码从 Flash 里执行,不复制到 RAM 里;客户希望是一个完整的映像,而不仅仅是其中某个函数做到了位置无关。 2、分析 在嵌入式场景下,不一定有操作系统。即使有操作系统,一般也是 RTOS。一般 RTOS没有一个通用的程序加载器。因此,存储位置无关的需求,在这时可以说无关紧要。但是,如果客户需要进行在线固件更新,例如 IoT 应
[单片机]
如何开发与位置无关的 <font color='red'>STM32</font> 完整工程
stm32和电机开发(直流有刷电机和步进电机)
很多的课程都喜欢把电机原理完完整整讲一遍。但是对于控制的同学,这部分内容是否真的需要值得商榷。做电机控制,大部分都是在学了stm32之类的mcu之后才开始进行的。这部分,不如按照个人认知习惯去学习或许效率更高。 1、直流有刷电机和步进电机 虽然直流无刷电机bldc、pmsm这两类电机似乎更有技术含量一点,但是从学习角度来说,直流有刷电机和步进电机是最合适的。说到直流有刷电机,大家可以把它想象成小时候玩具上的电机。上面会有一个正负极,分别连接在电源两侧。如果是正着接,那么电机就正转;如果反着接,就反转。 步进电机,看的比较多的是二相四线步进电机,可以简单看成两对正负线。如果要步进电机转起来,只需要定时给一定数量的方波即可。比
[单片机]
<font color='red'>stm32</font>和电机开发(直流有刷电机和步进电机)
STM32独立看门狗详解
本文将介绍STM32的看门狗中的独立看门狗,并通过实例来喂狗、体验喂狗与不喂狗的区别。 ①STM32看门狗介绍之独立看门狗 ②使用STM32CUBEMX来配置工程文件 ③代码实现,按键按下喂狗、按键不按下不喂狗程序复位 ①STM32看门狗介绍之独立看门狗 看门狗定时器本质上是一个计数器、给计数器一个数值,在程序 运行后计数器的值开始递减,当计数器的值减到0是会将程序复位,若在减到0之前给计数器更新一下值“喂狗”则从最新的值开始递减; 用途: 1、这样做的好处就是程序跑飞、死机时,通过复位的方式使得程序又正常运行; 2、用于将系统从休眠或者空闲模式唤醒。 看门狗的种类: 独立看门狗IWDG 特点:专用时钟LSI、低功耗模式仍
[单片机]
<font color='red'>STM32</font>独立看门狗详解
基于STM32的新型电力数据采集系统的设计与实现
引言 传统的电力数据采集系统受限于有限的存储空间和通信接口,存在精度不高、实时性差、采集信息量小等缺点,已无法满足实际的电力系统调度与管理需要,本文提出的基于STM32的新型电力数据采集器充分利用了STM32丰富的片上资源,大大节约了硬件投资,利用STM32具有快速采样的高性能ADC、先进的电源及时钟管理、双看门狗等功能,从而大大增强了系统的实时性与可靠性,精度显著提高,同时功耗大为降低。 1、总体设计方案 本系统由模拟量与开关量采集模块、通讯模块以及上位机人机交互模块组成,系统框图如图1所示。首先电压、电流等模拟信号经信号调理电路调理后,经模数转换器ADC转换为数字信号,再由STM32进行数据处理;开关量信号则通过I/O口输
[单片机]
基于<font color='red'>STM32</font>的新型电力数据采集系统的设计与实现
意法半导体TouchGFX Stock简化并加快在STM32 MCU上用户界面设计
2022 年 12 月 23 日, 中国—意法半导体TouchGFX软件包最新版本进一步简化在STM32 微控制器上开发美观的用户界面 (UI) 。4.21 版增加了TouchGFX Stock功能,在网址 4.21 版还增加了对 SVG 图像(可缩放矢量图形图像格式)的支持,这为开发酷炫的 UI 提供了更多自由空间。用户获取SVG图像需要用 TouchGFX Designer工具中新增的一个小部件,为确保高性能,SVG图像需用到意法半导体 STM32 MCU中的专用图形处理硬件,例如,NeoChrom GPU 处理器。 此外,4.21版的TouchGFX Designer工具在导航、一般用途等方面进行50 多项改进,
[单片机]
意法半导体TouchGFX Stock简化并加快在<font color='red'>STM32</font> MCU上用户界面设计
STM32 IIC实验讲解,从入门到放弃。
一、IIC IIC是什么? IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送, 高速 IIC 总线一般可达 400kbps 以上。这种总线类型是由飞利浦半导体公司(后被NXP收购)在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。多主多从的通讯协
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved