【STM32】中断和中断优先级理解
在嵌入式系统开发过程中,不可避免的会和“中断”打交道。很多初学者对中断的理解不深,往往是看到中断绕着走。其实不然,费点时间搞懂中断能解决不少问题。
中断英文“Interrupt”,字面很好理解,就是打断的意思。在程序中“Interrupt”打断的自然也是程序。举个例子,有一个遥控的自动避障小车,小车在向前跑的过程中程序一直监测周围环境,实现避障功能,这个时候你想遥控小车停个三分钟,就要用到中断了,也就是打断原有的“监测环境——避障”程序流程。打断的目的就是执行“别跑啦,停下来歇歇”这个程序,我们称中断之后执行的程序为“ 中断服务函数”。一般情况下,中断服务函数执行完后(小车休息三分钟,或者干其他的事情完事后),会清理一下 中断标志位,即告诉主程序中断完事儿了,你该干嘛干嘛。清理了中断标志位后,此时小车又开始呼呼的跑了……
简而言之,中断就是由某个事件触发,打断原有的执行程序,去执行中断服务函数,执行完后再返回被打断的地方继续执行。就像你正在写作业,突然老妈喊你吃饭,你去吃完饭回来继续写作业。“吃饭”就是一个中断,打断了你写作业嘛。
使用中断时必不可少的会牵扯到中断优先级。优先级有什么作用呢?主要是用在好多好多中断到来的时候,我该怎么处理这些中断,先处理哪些后处理哪些,有了中断优先级,程序就按照优先级顺序依次执行这些中断。
中断优先级包括两部分: 抢占优先级和 响应优先级,可以分别理解为牛逼优先级和不是很牛逼的优先级,两者都有很多级别,比如抢占优先级0,1,2,3……响应优先级0,1,2,3……。有什么作用呢?前面内容我们提到中断会打断主程序,抢占优先级高的中断还可以打断抢占优先级低的中断服务函数。例如:
设定事件1中断的抢占优先级2,响应优先级3;
设定事件2中断的抢占优先级3,响应优先级2;
设定事件3中断的抢占优先级2,响应优先级0.
假设三个事件的中断同时到来,那么程序的执行顺序为:主程序——中断3——中断1——中断2——主程序.
假设事件2中断先到,紧接着事件1中断到来,事件3中断未触发,程序执行顺序:主程序——中断2——中断1——中断2——主程序。也即高抢占优先级的中断会打破第抢占优先级的中断。
假设事件1中断先到,紧接着事件3中断到来,事件2中断未触发,程序执行顺序:主程序——中断1——中断3——主程序。虽然中断3的响应优先级高于事件1的响应优先级,但是它不能打破后者,原因就是因为响应优先级不是很牛逼。但是当中断1和中断3同时触发时,程序是先执行中断3的,这就是响应优先级的作用。
在STM32中,还有一个中断优先级组的概念。我们知道中断优先级有个16位的寄存器,寄存器的bit[7:4]这四位是分配给中断优先级的(包括抢占优先级和响应优先级),中断优先级组的作用是分配这四位前几位给抢占优先级用,后几位给响应优先级用。例如STM32F4分为0,1,2,3,4,5这五个组,见下表:
组
bit[7:4] 分配情况
结果
备注
0
4位全给响应优先级用
响应优先级0,1,2,……15.
共16个级别
1
前1位给抢占优先级用,后3位给响应优先级用
抢占优先级0,1;响应优先级0,1,2,……7.
共2*8=16个级别
2
前2位给抢占优先级用,后2位给响应优先级用
抢占优先级0,1,2,3;响应优先级0,1,2,3.
共4*4=16个级别
3
前3位给抢占优先级用,后1位给响应优先级用
抢占优先级0,1,2,……7;响应优先级0,1.
共8*2=16个级别
4
4位全给抢占优先级用
抢占优先级0,1,2,……15.
共16个级别
有时候我们可能需要多一点抢占优先级,或者多一点响应优先级,这个时候只需要指定中断优先级组就可以了。但是需要说明的是:1,程序只能指定一次中断优先级组,也就是说,指定了中断优先级组别之后就不能更改了,指定组别之后,抢占优先级的个数和响应优先级的个数也就确定了。2,对于STM32F4,中断优先级最多只有16(2的4次方)个不同的级别,不同的中断可以设定为相同的优先级别(抢占优先级和响应优先级都相同),相同优先级别的中断按照触发时间顺序依次执行,同时触发时具体执行顺序看程序心情。
【STM32】中断和中断优先级理解相关推荐
- stm32入门——定时器中断和中断优先级简介
stm32入门--定时器中断 产生定时中断是定时器的用法之一,与定时器用来进行PWM输出和输入捕获相比,定时器中断更容易理解.掌握. 原理简介 使用通用定时器进行中断的原理,其实和开发板Systick ...
- STM32中断控制LED灯亮灭
目录 一.中断介绍 1.中断分类 硬件中断(Hardware Interrupt) 软件中断(Software Interrupt) 2.中断优先级 3.中断源种类 4.中断响应原则 二.新建项目 1 ...
- STM32中断与DMA通信编程
文章目录 一.中断与DMA通信原理 1.中断 2.DMA通信原理 二.中断控制LED灯点亮熄灭 1.新建工程 2.配置外部中断 3.配置中断优先级 4.完成创建 5.编写中断函数 6.程序烧录 7.运 ...
- 第十一章 STM32中断应用
目录 11.1 中断概述 11.1.1 中断的基本概念和原理 11.1.2 STM32中断系统结构和工作原理 11.1.3 中断向量表及存储位置 11.2 中断控制器 11.2.1 NVIC的功能和特 ...
- STM32中断:NVIC与EXTI
STM32中断非常强大,每个外设都可以产生中断.异常就是中断,中断就是异常,请不要刻意钻牛角尖较劲. 1.异常类型 F103在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断.其中系 ...
- STM32中断应用总结
STM32中断应用总结 STM32中断很强大,STM32中断可以嵌套,任何外设都可以产生中断,其中中断和异常是等价的. 中断执行流程: 主程序执行过程可以产生中断去执行中断的内容(保护现场),然后在返 ...
- STM32中断中调用OLED显示出现OLED花屏
STM32中断中调用OLED显示出现OLED花屏 在TIM5中断处理函数中,我写了OLED显示,经过DEBUG发现程序执行到OLED显示语句的时候,OLED就会花屏. //中断服务处理函数 void ...
- STM32——中断、EXTI、按键中断实验
STM32中断--总结及实操 一.中断是什么? 1.1 中断的含义 1.2 中断的作用(了解即可) 1.3 中断的流程 二.中断资源 2.1 NVIC中断控制器 2.2 NVIC寄存器 三.优先级的概 ...
- STM32中断回调函数定时器-STM32电控学习笔记06
STM32中断&定时器-STM32电控学习笔记06 day6:2022/9/24 [中断概述] 在 STM32 中,对信号的处理可以分为轮询方式和中断方式,轮询方式就是不断去访问一个信号的端口 ...
最新文章
- MyBatis-Spring(四)--MapperFactoryBean实现增删改查
- 商淘多b2b2c商城系统怎么在个人电脑上安装_B2B2c商城系统怎么选?开源和定制哪个好?...
- 公司电脑用域账号访问团队文件夹
- mysql数据库集群技术_使用MySQL-Cluster搭建MySQL数据库集群
- 使用CSS属性处理前端开发中长文本造成的内容显示重叠问题
- Websocket实现前后台通信,demo小测试
- 简易新闻客户端android
- Adminlte数据分页设置
- 使用原始武器的现代战争
- vue页面无操作30分钟退出登录
- Contour Processing
- 计算机三级嵌入式上传学习资源介绍
- LA 4394 刷字符串(区间dp)
- 滴滴亮相第15届“开源中国开源世界”高峰论坛,并获重要奖项
- 轻断食原理:胰岛素水平
- 用HTML创作一个简单的电子时钟
- MPHY协议解读三:8b10b编码
- 桌面背单词,单词图片做背景
- mfc编程 孙鑫_MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)
- Bootstrap中的col-lg-*,col-md- *和col-sm- *有什么区别?