stm32_中断优先级详解

发布者:科技奇思最新更新时间:2017-10-26 来源: eefocus关键字:STM32  中断优先级 手机看文章 扫描二维码
随时随地手机看文章

我自己依据此图理解,应用思维导图画了一张方便理解:(如果看不清可通过ctrl+鼠标滑轮    放大看;)

前提条件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

  1.   

  2. void NVIC_Config(void)  

  3. {  

  4.     NVIC_InitTypeDef NVIC_InitStructure;  

  5.       

  6.       

  7.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  

  8.       

  9.   

  10.           

  11.     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;  

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

  13.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  14.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  15.     NVIC_Init(&NVIC_InitStructure);  

  16.           

  17.   

  18.           

  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);  

  20.       

  21.     NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;  

  22.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  23.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  24.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  25.     NVIC_Init(&NVIC_InitStructure);  

  26.   

  27.       

  28. }  

解析: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:同一组优先级别中,不同的抢占级别之间,其中一抢占级别正在做事,另外抢占级别不能打断他;(即”同一组优先级下的中断源间,没有中断嵌套“)


  1.   

  2. void NVIC_Config(void)  

  3. {  

  4.     NVIC_InitTypeDef NVIC_InitStructure;  

  5.       

  6.       

  7.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  

  8.       

  9.   

  10.       

  11.     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  

  12.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  13.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  

  14.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  15.     NVIC_Init(&NVIC_InitStructure);  

  16.   

  17.       

  18.     NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;  

  19.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  20.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  21.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  22.     NVIC_Init(&NVIC_InitStructure);  

  23.   

  24.       

  25. }  

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


关键字:STM32  中断优先级 引用地址:stm32_中断优先级详解

上一篇:STM32_外部中断线/事件线理解
下一篇:STM32电机控制同步电角度测试说明

推荐阅读最新更新时间:2024-03-16 15:41

STM32的官方库函数调用
例如添加 #include stm32f10x.h 添加stm32f10x_gpio.c、stm32f10x_usart.c 再在stm32f10x_conf.h 中去掉相应的头文件注释
[单片机]
<font color='red'>STM32</font>的官方库函数调用
关于STM32单片机GPIO口上拉与下拉输入
以前GPIO上接的电路都是低电平触发的那种,新画了个板子有一个按键设计的是高电平触发,结果IO口设置成上拉输入后,怎么读都不正确,按键电路如图1。无奈只能去调试一下,发现当设置为上拉输入后,其ODR(GPIO输出数据寄存器)相应的也置为1,百思不得其解。 图1 按键电路 于是去看一下GPIO的结构图: I/O引脚结构图 由图可以发现其实输出寄存器与输入寄存器之间在I/O引脚处是线与状态,在GPIO设置成上位输入时,其上拉电阻闭合,这时如果输出寄存器设置为0那么在IO口内部就会自己损耗电流,而这些电流的损耗是会增加功耗的。因此当GPIO设置成上拉输入时,相应的输出寄存器也设置为1. 将按键电路与I/O
[单片机]
关于<font color='red'>STM32</font>单片机GPIO口上拉与下拉输入
STM32中断NVIC部分知识总结
1.assert_param 实际上assert_param是一个宏定义,在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。当参数无效时,assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误。 2.NVIC_TypeDef结构体成员: (1)ISER (Interrupt Set Enable Register)中断使能,ISER 的bit0~bit31对应中断0~31,ISER 的bit0~bit27对应中断的32~59,置1对应中断被使能;(还要分组、屏蔽、IO映射) (2)ICER (Clear),置1有效; (3)ISPR (Set Pending)置1正在执行的对应中
[单片机]
<font color='red'>STM32</font>中断NVIC部分知识总结
stm32 SD卡
容量等级 SD容量有8MB、16MB、32MB、64MB、128MB、256MB、512MB、1GB、2GB SDHC容量有2GB 、4GB、8GB、16GB、32GB SDXC容量有32GB、48GB、64GB、128GB、256GB、512GB、1TB、2TB SD卡寄存器 命令格式 所有命令均遵守此格式,总共48位。一个起始位,一个方向位,6个命令位,32位参数(有些命令需要),CRC 7位校验,1个停止位 Command Classes 注: 命令详细解释见SD卡2.0协议 部分命令 应答 应答格式有多种,以R1举例 初始化流程 以SPI模式举例 典型初始化流程 1.使能SPI时钟 2.使能GPIO
[单片机]
<font color='red'>stm32</font> SD卡
STM32超声波测距
超声波测距模块是HC-SR04,C-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测 距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。 HC-SR04基本工作原理: (1)采用IO口TRIG触发测距,给最少10us的高电平信呈。 (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回, 通过IO口ECHO输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(340M/S))/2。 程序编写思路是:1、配置好使用到的GPIO以及定时器; 2、给模块TRIG端口发送大于10us的高电平信号,当收、收到ECHO回响信号是,打开定时
[单片机]
<font color='red'>STM32</font>超声波测距
STM32 外部中断 易出错总结
前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark。 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发; 二:外部中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。 STM32 分组和对应中断处理函数分配: 管脚 中断标志
[单片机]
STM32什么时候使用AFIO?
什么时候要开启AFIO呢?参考手册: 说的很明白,操作AFIO的三类寄存器时需要开启: AFIO_EVCR AFIO_MAPR AFIO_EXTICRx 这三类其实是AFIO的全部寄存器, AFIO_EVCR是事件相关的,AFIO_MAPR是与重映射相关的,AFIO_EXTICRx是与外部中断相关的。 因此管脚重映射、外部中断、事件时开启AFIO。
[单片机]
STM32输入捕获,实现红外解码,支持长按
初始化代码: static void RCC_Configuration( void ); static void GPIO_Configuration( void ); static void NVIC_Configuration( void ); void InputCaptureInit( void ) { TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; RCC_Configuration(); NVIC_Configuration(); GPIO_Conf
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved