STM32的中断优先级设定

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

在STM32的手册里没有提到关于设置中断优先级的情况,只列给出了中断向量表。根据该向量表可以创建一个中断编号的枚举数据,方便设置优先级及使能等的使用。


先说一下如何设置优先级。


优先级的设置在Cortex-CM3中:异常  -> 优先级定义  中有描述;针对优先级的寄存器描述需要查看Cortex-M3编程手册。


可在此处下载手册:http://download.csdn.net/detail/gao_xyz/9780686


1、优先级组的设置


在权威指南 优先级定义中有描述,其优先级由:抢占优先级 和 子优先级组成。


此处需注意:抢占优先级,顾名思义,可以抢占CPU的,当有更高的抢占优先级时,可打断低抢占优先级的中断;同一抢占优先级,当更高的子优先级来临,是不能打断的;当抢占优先级及子优先级都相同时,且中断同时到来,则先执行中断编号小的中断。


(在ucos中就是把PendSV中断和Systick中断设置为抢占及子优先级一致,因此,当在Systick中延时减到零,把其任务放入就绪,并引发调度,而没有立即进入PendSv中断服务函数的原因)


当然既然有抢占优先级和子优先级,那就要看是如何分配的,具体描述可见其编程手册,在权威指南中 优先级定义 部分的中断复位和控制寄存器中也可看书,有个PRIGROUP的位段(8-10,共3位。从0数起),用于设置优先级分组,其分组就对应的抢占优先级及子有限级对应情况如下:



但是并不是所有位都用上的。不同的芯片可能支持的中断级数不一样,有8级,16级,32级等。这个在芯片生产的时候就定好了使用那几位的。如只支持8级中断编程的,只使用3位设置抢占优先级和子优先级。目前使用的是高位,低位不用,如图:



为何使用高位(MSB)对齐呢?具体解释如下:



注:对于设置优先级组寄存,需要先写入访问键值(相当于说对该寄存器的保护作用),之后再写入需要设置的分组数据。


2、各优先级的设置


各中断的优先级的设置只要把设置的数据写入该中断对应的寄存器即可。


具体说一下程序中的设计:


从STM32的手册中断向量部分可以知,各中断向量表的位置是顺序排放的(4字节为单位),看M3编程手册可知,优先级的对应关系与其向量变的排列顺序是一致的,且每8位设置1个优先级。


在上面提到的,根据向量表枚举出各中断的中断编号,需要设置优先级时,通过中断编号来处理就可以了。


注:在设置优先级中,不要随意更改优先级组,不然其他设置的优先级会发生改变,结果不可意料。


关键字:STM32  中断优先级 引用地址:STM32的中断优先级设定

上一篇:ARM Cortex-M3中断跳转过程
下一篇:STM32F103做从机SPI通信SPI3中断异常

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

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