STM32 的优先级NVIC配置

发布者:RadiantEnergy最新更新时间:2019-04-22 来源: eefocus关键字:STM32  优先级  NVIC配置 手机看文章 扫描二维码
随时随地手机看文章

1、NVIC优先级介绍

 这里写图片描述 
这里写图片描述

2、NVIC优先级比较

提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):*强调内容***NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4


前提条件2:“组”优先级别>“抢”占优先级别>“副”优先级别 

前提条件3:同一组优先级别中,不同的抢占级别之间,其中一抢占级别正在做事,另外抢占级别不能打断他;(即”同一组优先级下的中断源间,没有中断嵌套“) 

前提条件4:不同组优先级别间,依据优先级强弱,优先级别高的组的中断源可以打断优先级别低的组的正在做的事情;(即:不同组优先级间,可以中断嵌套) 

下面:我们给一段优先级配置的代码进行详尽分析,方便上面的理解: 

关以”前提条件一”的实例: 

前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱): 

NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4


/**************************************************************************************************  

**  

** NVIC_Config()  

**  

**  

**  功能描述:中断向量配置。  

**  

**  参  数  :无  

**  

**  返回值  :无  

**  

***************************************************************************************************  

*/  

void NVIC_Config(void)  

{  

    NVIC_InitTypeDef NVIC_InitStructure;  


    /* Configure one bit for preemption priority -------------------------------- */  

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  



        /* EXTI0 -------------------------------------------------------------------- */  

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;  

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 9; // 指定抢占式优先级别4,可取0-15  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

    NVIC_Init(&NVIC_InitStructure);  



        /* Configure one bit for preemption priority -------------------------------- */  

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);  

    /* SPI1-------------------------------------------------------------------- */  

    NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;  

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

    NVIC_Init(&NVIC_InitStructure);  



}  



解析:1.按照NVIC_PriorityGroup_4这么分,就分为了16个抢占(优先)级,每个抢占(优先)级下只有1个副优先级:0; 

按照NVIC_PriorityGroup_3这么分,就分为了8个抢占(优先)级,每个抢占(优先)级下只有2个副优先级:0-1;


2.(优先级强弱:) EXTI0_IRQChannel 是0级组> SPI的3级组高优先级组的人,可以打断低阶级的正在做事的人(嵌套),所以当SPI正在工作时, EXTI0可以打断他进入 EXTI0中断;


关于“前提条件3”的实例: 

前提条件3:同一组优先级别中,不同的抢占级别之间,其中一抢占级别正在做事,另外抢占级别不能打断他;(即”同一组优先级下的中断源间,没有中断嵌套“)


  /*  

    ***************************************************************************************************  

    **  

    **                                         NVIC_Config()  

    **  

    **  

    **  功能描述:中断向量配置。  

    **  

    **  参  数  :无  

    **  

    **  返回值  :无  

    **  

    ***************************************************************************************************  

    */  

    void NVIC_Config(void)  

    {  

        NVIC_InitTypeDef NVIC_InitStructure;  


        /* Configure one bit for preemption priority -------------------------------- */  

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  



        /* UART1 -------------------------------------------------------------------- */  

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

        NVIC_Init(&NVIC_InitStructure);  


        /* UART2 -------------------------------------------------------------------- */  

        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;  

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

        NVIC_Init(&NVIC_InitStructure);  



    }  



解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 0组级别下,只有1个抢占优先级; 这1个抢占优先级下,有16个副优先级,所以分别让串口1的副优先级别为1, 串口2的副优先级别为0 ; 虽然串口2 的0优先级别>串口1的1优先级别 ,但是由于他们属于同一组下,所以他们之间,当有一个串口在通讯时,另外一个串口是不能打断正在通讯的串口的; 

引申:当有三个串口选择不要求同时工作时,(或者有多个设备要求不在同一时间工作,但是优先响应时,可以把他们放在0组级,0抢占级下的,16个副优先级中)

关键字:STM32  优先级  NVIC配置 引用地址:STM32 的优先级NVIC配置

上一篇:STM32学习笔记--NVIC中断
下一篇: STM32F103 中断优先级理解

推荐阅读最新更新时间:2024-11-17 00:36

STM32按键控制灯
/*---------------------------------------------------------------------------------- 文件名称:控制LED2,LED3闪烁 硬件平台:STM32F103 开发板 作者 :求是 固件库 :V3.5 -----------------------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/ #include st
[单片机]
STM32开发 -- IAP详解
现在只是简单的预研知道有这个功能,怎么实现我真的没做过。。。 先照着手册熟悉一遍,拿着正点原子的开发板实现以下。嗯,只能这样了。 一、STM32编程方式 1、在线编程(ICP,In-Circuit Programming) 通过JTAG/SWD协议或者系统加载程序(Bootloader)下载用户应用程序到微控制器中。 2、在程序中编程(IAP,In Application Programming) 通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程序或者应用数据到存储器中。也就是说,STM32允许用户在应用程序中重新烧写闪存存储器中的内容。然而,IAP需要至少有一部分程序已经使用ICP方式
[单片机]
<font color='red'>STM32</font>开发 -- IAP详解
STM32-通用定时器基本定时功能
1. STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 定时器 计数器分辨率 计数器类型 预分频系数 产生DMA请求 捕获/比较通道 互补输出 TIM1 TIM8 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 有 TIM2 TIM3 TIM4 TIM5 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 没有 TIM6
[单片机]
STM32的各种时钟系统的应用解析
时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32。 重要的时钟: PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之间的关系要弄清楚; 1、HSI:高速内部时钟信号 STM32单片机内带的时钟 (8M频率) 精度较差 2、HSE:高速外部时钟信号 精度高 来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟 3、LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源 一般作为RTC时钟使用 在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②
[单片机]
【开发者案例】智能晾衣杆控制系统设计
本案例以Android手机为人机交互终端,以STM32F103为核心控制终端,基于机智云物联网平台,设计了一套用户通过互联网就能有效地对家中晾衣架进行操作的嵌入式智能控制系统,避免人不在家时,衣物被淋湿的问题。 本系统具备手动和自动两种控制模式实现对晾衣架的合理控制,并且一旦控制端与服务器失去连接,将自动切换至自动模式工作。控制端采用FreeRTOS实时操作系统,在实时性方面表现良好,同时具有高稳定性能稳定地与机智云服务器进行通信。 引言晾晒衣物是日常生活的一部分,目前,市面上有多种多样的晾衣架,包括手动和电动等。但大部分的电动“智能”晾衣,还依然需要用户站在旁边,按下按钮进行操作,对用户而言仅仅只是省力。因此,如何通过I
[单片机]
【开发者案例】智能晾衣杆控制系统设计
STM32+ULN2003驱动步进电机
选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下: 四相八拍:A- AB- B - BC - C - CD - D - DA 其A、B、C、D指的是uln2003芯片驱动板的1N1、1N2、1N3、1N4,波形在上表示有输入信号。 此外至少需要4根杜邦线,还需提供一个5V的直流电源,接线方式如下: PE0接IN1 PE1接IN2 PE2接IN3 PE3接IN4 5V电源(一个是地,一个是正)。 /*******************************************************
[单片机]
STM32的瘦肉精含量快速检测系统
引言 本设计在传统的免疫法基础上进行改良,采用了激光诱导荧光技术和荧光免疫分析法,实现了对瘦肉精的快速、定量、精确检测,具有高分辨率、快速响应、高灵敏度、抗干扰能力强等优点。 1 检测系统的工作原理与组成 1.1 光学检测原理 本设计选用的半导体激光器的光功率最大是5 mW,最大工作电流是40 mA,正常工作电流35 mA,正常工作电压是2.2 V,最大反向工作电压是2 V,波长范围是630~640 nm,中心波长为638 nm。激发出来的荧光波长为680 nm,所选用的光敏二极管S5106能够感应的波长范围是320~1 100 nm,接收灵敏度最高的是960 nm的光,接收荧光的灵敏度约为0.45。 半导体激光器打出
[单片机]
<font color='red'>STM32</font>的瘦肉精含量快速检测系统
STM32-嵌入式学习笔记02-中断应用概述
STM32中断非常强大,每个外设都能产生中断 中断的优先级数值越小,说明他的中断优先级越高 配置中断需要了解NVIC寄存器: NVIC是嵌套向量中断控制寄存器,控制中断的相关功能;它与内核紧密结合,是内核里的一个外设。管理着包括内核和片上的所有外设的中断相关功能。 因此配置中断需要参考下面两个头文件:core_cm3.h 和 misc.h 在配置中断的时候我们一般只配置ISER和ICER IP这3个寄存器: 1)ISER使能中断 2)ICER清除中断 3)设置中断的优先级 给出官方手册寄存器的资料 编程要领: 1)使能中断请求(外设中某个中断) 2)配置优先级分组 3)配置
[单片机]
STM32-嵌入式学习笔记02-中断应用概述
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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