STM32 中断优先级(Cortex-M3)

发布者:未来画家最新更新时间:2018-12-01 来源: eefocus关键字:STM32  中断优先级  Cortex-M3 手机看文章 扫描二维码
随时随地手机看文章

一、概述 


STM32(Cortex-M3)中有两个优先级的概念——抢占优先级和响应优先级,其属性编号越小,则优先级别越高。有人把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 


具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 


当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。


二、优先级分组 


Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位(AIRCR高四位),这4个寄存器位的分组方式如下: 


第0组: ————————————— 所有4位用于指定响应优先级 

第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级 

第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级 

第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级 

第4组:所有4位用于指定抢占式优先级


可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种: 


NVIC_PriorityGroup_0 => 选择第0组 

NVIC_PriorityGroup_1 => 选择第1组 

NVIC_PriorityGroup_2 => 选择第2组 

NVIC_PriorityGroup_3 => 选择第3组 

NVIC_PriorityGroup_4 => 选择第4组


中断优先级分组是为了给抢占式优先级和响应优先级在中断优先级寄丛器的高四位分配各个优先级数字所占的位数。在一个程序中只能设定一次


三、中断源的优先级 


接下来就是指定中断源的优先级,中断源优先级是在中断优先级寄存器中设置的,只能设置及高四位,必须根据中断优先级分组中设置好的位数来在该寄存器中设置相应的数值。假如你选择中断优先级分组的第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级,那么抢占式优先级就有000-111共八种数据选择,也就是有八个中断嵌套,而响应优先级中有0和1两种,总共有8*2=16种优先级。 


中断源优先级具体的设置了该中断源的优先级别 


在一个程序中可以设定多个(最多16个)优先级,每个中断源只能设定的一个。 


每写一个关于中断优先级的程序必须包含下列两个函数: 


1)void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)中断分组设置 

2)void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct)中断优先级设置


注意:NVIC能配置的是16种中断向量,而不是16个,当工程中有超过16个中断向量时,必然有两个以上的中断向量是使用相同的中断种类,而具有相同中断种类的中断向量不能互相嵌套。


四、启动所需GPIOn_Pin及AFIO的RCC时钟 


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,RCC_APB2Periph_AFIO,ENABLE);


注意:千万别忘记启动RCC_APB2Periph_AFIO!否则管脚只能做普通高低电平来用。当把GPIO用作EXTI外部中断或使用重映射功能的时候,必须开启AFIO时钟,而在使用默认复用功能的时候,就不必开启AFIO时钟了。



关键字:STM32  中断优先级  Cortex-M3 引用地址:STM32 中断优先级(Cortex-M3)

上一篇:STM32 RTC时钟配置
下一篇:STM32 关于外部中断线、中断源和中断服务函数的问题

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

STM32中断与嵌套NVIC快速入门
简介:STM32 中断与嵌套NVIC 快速入门 //==================================================== // STM32 中断与嵌套NVIC 快速入门 // netjob 2008-8-1 //==================================================== STM32中断与嵌套NVIC快速入门 我也是靠看这本书才弄懂的: Cortex-M3 权威指南 Joseph Yiu 著 宋岩 译 其实很简单。 //CM3 有 最多240个中断(通常外部中断写作IRQs),就是 软件上说的 IRQ CHA
[单片机]
STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
历程详解 详解包括: 中断原理讲解 例程流程详解 库函数分析详解 对应寄存器介绍 对应函数介绍 对应注释详解 本篇文章提供两种方法: 一种是 :IDLE 接收空闲中断+DMA 一种是: IDLE 接收空闲中断+RXNE接收数据中断 都可完成串口数据的收发 知识点介绍: STM32 IDLE 接收空闲中断 功能: 在使用串口接受字符串时,可以使用空闲中断(IDLEIE置1,即可使能空闲中断),这样在接收完一个字符串,进入空闲状态时(IDLE置1)便会激发一个空闲中断。在中断处理函数,我们可以解析这个字符串。 接受完一帧数据,触发中断 STM32的IDLE的中断产生条件: 在串口无数据接收的情况下,不会产生,
[单片机]
<font color='red'>STM32</font> HAL CubeMX 串口IDLE接收空闲中断+DMA
stm32的按键控制
1 /* 2 ::按键控制 3 PA8接LED,PE2接按键 4 */ 5 #include stm32f10x.h 6 void RCC_Configuration(void); 7 void GPIO_Config(void); 8 void Delay(__IO uint32_t nCount); 9 10 int main() 11 { 12 RCC_Configuration(); //系统时钟配置|使能GPIO口 13 GPIO_Config(); //LED控制配置 14 while (1) 15 { 16 if(!GPIO_ReadInpu
[单片机]
stm32笔记:按键输入(精简版)
C代码 //GPIOA8是 LED0 //GPIOA13是 KEY0 仅包含启动代码 STM32F10x.s #define GPIOA_CRL (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x00)) #define GPIOA_CRH (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x04)) #define GPIOA_IDR (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x08))
[单片机]
<font color='red'>stm32</font>笔记:按键输入(精简版)
基于STM32从零写操作系统系列---熟悉纯windows交叉编译环境
目的: 熟悉在纯windows下的交叉编译环境,了解如何下载BIN格式的程序文件到单片机。 实验2: 一个简单的交叉编译与程序下载过程 环境搭建(以我的平台为例): 安装win7 32位,具体教程可百度 安装make和gcc-arm-none-eabi交叉编译工具,具体教程可百度 安装ST-Link Utility软件 在windows系统上安装编辑器,如notepad++ make,gcc-arm-none-eabi,ST-Link Utility软件已在百度云分享: 链接:https://pan.baidu.com/s/1DlzYMo8oZsnF9ammJuuZoQ 提取码:dc5h 具体实验过程: 1.在w
[单片机]
基于<font color='red'>STM32</font>从零写操作系统系列---熟悉纯windows交叉编译环境
STM32之库函数开发总结
1、使用ST库对外设进行初始化,一般有以下步骤: ①定义一个xxx_InitTypeDef类型的初始化结构体; ②根据使用需求,向这些初始化结构体的成员写入特定的控制参数; ③填充好结构体之后,把这个结构体作为输入参数调用相应的外设库函数xxx_Init();从而实现向寄存器写入控制参数,并配置好外设。 2、标志位的检查与清除 对标志位进行检查的库函数,一般命名为xxx_GetFlagStatus()或xxx_GetITStatus(),功能分别为获取事件标志状态和中断标志位状态。 对标志位进行清除的ST库函数,一般命名为xxx_ClearFlag()或xxx_ClearITPendingBit()函数,功
[单片机]
STM32的中断体系结构
STM32的中断体系结构 内部产生的叫异常,外部产生的叫中断,处理方式都是一样的。下面这个图里也说了中断和异常的区别。 这个图我觉得好的地方在于摆出了NVIC 和EXTI的位置。EXTI是专门管GPIO的中断的。NVIC是管所有中断的,NVIC是中断的总管家。
[单片机]
<font color='red'>STM32</font>的中断体系结构
ST最新开发工具为了解基于STM32 ARM Cortex-M3 MCU开方便之门
完整的低成本的评估开发工具通过图形界面探索微控制器的性能和功能 中国,2007年11月6日 — 意法半导体(纽约证券交易所:STM)今天公布了一个价格非常低廉的微控制器开发套件STM32 PerformanceStick,这套开发工具是近日推出的基于ARM Cortex-M3内核的STM32系列微控制器的配套产品。ST设计这套紧凑的开发工具是为了便于用户了解新微控制器的功能和性能,特别值得一提的是,用户可以通过一个图形界面查看微控制器在不同条件下的性能特性。为了鼓励和帮助设计工程师修改和重新编写应用程序源代码,工具包还含有示例应用软件和一套完整的Hitex软件工具。 STM32 PerformanceStick是一套功能完整
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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