一、抢占优先级和响应优先级
STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号
越小,表明它的优先级别越高。
抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断
服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数
A),抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。
而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,
如果两个中断同时到达, 则先处理响应优先级高的中断, 响应属性由
NVIC_IRQChannelSubPriority 参数配置。例如,现在有三个中断向量,如下表。
若内核正在执行C 的中断服务函数,则它能被抢占优先级更高的中断A 打断,由于B
和C 的抢占优先级相同,所以C 不能被B 打断。但如果B 和C 中断是同时到达的,内核
就会首先响应响应优先级别更高的B 中断。
二、NVIC 的优先级组
在配置优先级的时候,还要注意一个很重要的问题,即中断种类的数量。NVIC 只可
以配置16 种中断向量的优先级,也就是说,抢占优先级和响应优先级的数量由一个4 位的
数字来决定,把这个4 位数字的位数分配成抢占优先级部分和响应优先级部分。有5 组分
配方式:
第0 组: 所有4 位用来配置响应优先级。即16 种中断向量具有都不相同的响应优先
级。
第1 组:最高1 位用来配置抢占优先级,低3 位用来配置响应优先级。表示有2 种
级别的抢占优先级(0 级,1 级),有8 种响应优先级,即在16 种中断向量之中,有
8 种中断,其抢占优先级都为0 级,而它们的响应优先级分别为0~7,其余8 种中断向
量的抢占优先级则都为1 级,响应优先级别分别为0~7。
第2 组:2 位用来配置抢占优先级,2 位用来配置响应优先级。即4 种抢占优先
级,4 种响应优先级。
第3 组:高3 位用来配置抢占优先级,最低1 位用来配置响应优先级。即有8 种抢占
优先级,2 种响应2 优先级。
第4组:所有4 位用来配置抢占优先级,即NVIC 配置的16 种中断向量都是只有
抢占属性,没有响应属性。
要配置这些优先级组,可以采用库函数NVIC_PriorityGroupConfi g(),可输入的参数为NVIC_PriorityGroup_0 ~ NVIC_PriorityGroup_4,分别为以上介绍的5 种分配组。
于是,有读者觉得疑惑了,如此强大的STM32,所有GPIO都能够配置成外部中断,USART、ADC 等外设也有中断,而NVIC 只能配置16 种中断向量,那么在某个工程中使用超过16 个中断怎么办呢?注意NVIC 能配置的是16 种中断向量,而不是16 个,当工程中有超过16 个中断向量时,必然有两个以上的中断向量是使用相同的中断种类,而具有相同中断种类的中断向量不能互相嵌套。
关键字:STM32 抢占优先级 响应优先级
引用地址:
STM32的抢占优先级和响应优先级
推荐阅读最新更新时间:2024-03-16 16:03
STM32开发笔记54:STM32F4+DP83848以太网通信指南系列(八)
本章为系列指南的第八章,讲述如何使用STM32F407芯片配合DP83848进行以太网数据的收包流程,将监听到的网络包数据通过UART传给PC,同时辅以WireShark监听对比验证。 关于UART,也就是串口通信的使用,这里不做赘述,我们这里预设两个函数分别为UART6Init()和UART6Send(),实现的功能是串口6的初始化和发送。 以太网中断 在《STM32F4+DP83848以太网通信指南第五章:MAC+DMA配置》中,我们已经添加了以太网中断,其思路就是想让每次以太网上有收到包都能触发中断,我们可以在中断中将DMA中的数据包取出来进行分析,然后复位,让芯片下一次继续响应中断。 配置中断的代码非常简单,跟其他任何中
[单片机]
STM32 ADC自我学习总结
记录一下STM32的ADC编程方法! 前面已经学习了DMA,知道如何使用DMA去减小CPU的负担,这里的ADC转换也来使用DMA---这个也是STM32的ADC转换最常见的方式。 ---第一步是---了解STM32的ADC对应的GPIO口----如下图---不用记住,可以查询,我是将它剪下来粘贴到书本的相应章节----! ---第二步是---配置相应ADC转换的GPIO口----这里使用PC0--PC1 static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHB
[单片机]
stm32: 固件库文件说明
关于固件库文件说明 固件库文件夹STM32F10x_StdPeriph_Lib_V3.5.0下文件说明: 一、Libraries文件夹主要文件有: 1、core_cm3.c , core_cm3.h :CMSIS核心文件,通过进入Cortex_M3内核的接口 2、startup文件夹下是系统启动文件,根据不同的芯片选用启动文件,103系列芯片选用startup_stm32f10x_hd.s 3、system_stm32f10x.c , system_stm32f10x.h :设置系统及总线时钟,其中SystemInit函数在系统启动时,设置时钟系统。 4、stm32f10x.h :系统寄存器定义、声明、内存操作。 二、P
[单片机]
STM32时钟与GPIO分析 基于STM32的LED灯开发
一、 STM32时钟分析 寄存器 :寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成 在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和 控制寄存器 。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。 控制寄存器 :相当一排可通过0/1进行设置外设功能的开关,程序中通过地址查找到对应的寄存器,所以说控制寄存器的地址是唯一。 芯片时钟:芯片工作时,是需要脉冲,脉冲相当于给芯片起振,可保证芯片的正常工作,类似于人,心脏正常跳动,人体生命特征才能正常。 1HZ:一秒产生1个脉冲 频率换算单位:
[单片机]
STM32学习之:IAR中确认某段代码的执行时间
1.接出来一个I/O口,然后设置反转,用示波器查看反转周期。 2.软件仿真时计算两断点CYCLECOUNTER(在CPU registers中)的差值,乘以指令周期(MCLK)便是执行时间。
[单片机]
STM32学习笔记——TFT2.4彩屏显示字符和汉字
利用彩屏显示汉字、字符和字符串,需要先完成彩屏的驱动程序,然后在驱动程序的基础上再编写应用程序。 彩屏的驱动程序如果写好的话,就可以一直使用了,精力主要集中在应用程序的编写就可以了,但是移植的话,要移植驱动程序。其实移植也只是改变那些很底层的靠近处理器的那部分代码。 代码如下,注释比较详细,看懂了基本就可以了。 驱动程序的头文件LCD_driver.h如下: #define uchar unsigned char #define uint unsigned int #define Bus_16 //16位数据模式,如果使用8位模式,请注释此语句,如果使用16位模式,请打开此句
[单片机]
STM32的基本概念及中断应用
1、基本概念 ARMCoetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,
[单片机]
意法STM32系列获ARM RealView微控制器开发工具包支持
ARM公司日前宣布RealView微控制器开发工具包将支持意法半导体基于ARM Cortex-M3处理器的全新STM32F1xx系列器件。 STM32F101(接入行)和STM32F103(性能行)将是意法半导体首个基于ARM Cortex-M3处理器的器件系列,兼具卓越的高性能和低功耗。该系列器件拥有高达72MHz的CPU时钟速度、128Kbyte片上闪存ROM及20Kbyte片上RAM,还包括A/D、CAN、USB、SPI、I2C等众多外设及多达80个GPIO。 RealView微控制器开发工具包3.1可为新器件提供支持。这一最新版本保留了Keil Vision 3集成开发环境(IDE)易于使用的特性,并增加了针对STM3
[焦点新闻]