在嵌入式系统开发过程中,不可避免的会和“中断”打交道。很多初学者对中断的理解不深,往往是看到中断绕着走。其实不然,费点时间搞懂中断能解决不少问题。
  中断英文“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】中断和中断优先级理解相关推荐

  1. stm32入门——定时器中断和中断优先级简介

    stm32入门--定时器中断 产生定时中断是定时器的用法之一,与定时器用来进行PWM输出和输入捕获相比,定时器中断更容易理解.掌握. 原理简介 使用通用定时器进行中断的原理,其实和开发板Systick ...

  2. STM32中断控制LED灯亮灭

    目录 一.中断介绍 1.中断分类 硬件中断(Hardware Interrupt) 软件中断(Software Interrupt) 2.中断优先级 3.中断源种类 4.中断响应原则 二.新建项目 1 ...

  3. STM32中断与DMA通信编程

    文章目录 一.中断与DMA通信原理 1.中断 2.DMA通信原理 二.中断控制LED灯点亮熄灭 1.新建工程 2.配置外部中断 3.配置中断优先级 4.完成创建 5.编写中断函数 6.程序烧录 7.运 ...

  4. 第十一章 STM32中断应用

    目录 11.1 中断概述 11.1.1 中断的基本概念和原理 11.1.2 STM32中断系统结构和工作原理 11.1.3 中断向量表及存储位置 11.2 中断控制器 11.2.1 NVIC的功能和特 ...

  5. STM32中断:NVIC与EXTI

    STM32中断非常强大,每个外设都可以产生中断.异常就是中断,中断就是异常,请不要刻意钻牛角尖较劲. 1.异常类型 F103在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断.其中系 ...

  6. STM32中断应用总结

    STM32中断应用总结 STM32中断很强大,STM32中断可以嵌套,任何外设都可以产生中断,其中中断和异常是等价的. 中断执行流程: 主程序执行过程可以产生中断去执行中断的内容(保护现场),然后在返 ...

  7. STM32中断中调用OLED显示出现OLED花屏

    STM32中断中调用OLED显示出现OLED花屏 在TIM5中断处理函数中,我写了OLED显示,经过DEBUG发现程序执行到OLED显示语句的时候,OLED就会花屏. //中断服务处理函数 void ...

  8. STM32——中断、EXTI、按键中断实验

    STM32中断--总结及实操 一.中断是什么? 1.1 中断的含义 1.2 中断的作用(了解即可) 1.3 中断的流程 二.中断资源 2.1 NVIC中断控制器 2.2 NVIC寄存器 三.优先级的概 ...

  9. STM32中断回调函数定时器-STM32电控学习笔记06

    STM32中断&定时器-STM32电控学习笔记06 day6:2022/9/24 [中断概述] 在 STM32 中,对信号的处理可以分为轮询方式和中断方式,轮询方式就是不断去访问一个信号的端口 ...

最新文章

  1. MyBatis-Spring(四)--MapperFactoryBean实现增删改查
  2. 商淘多b2b2c商城系统怎么在个人电脑上安装_B2B2c商城系统怎么选?开源和定制哪个好?...
  3. 公司电脑用域账号访问团队文件夹
  4. mysql数据库集群技术_使用MySQL-Cluster搭建MySQL数据库集群
  5. 使用CSS属性处理前端开发中长文本造成的内容显示重叠问题
  6. Websocket实现前后台通信,demo小测试
  7. 简易新闻客户端android
  8. Adminlte数据分页设置
  9. 使用原始武器的现代战争
  10. vue页面无操作30分钟退出登录
  11. Contour Processing
  12. 计算机三级嵌入式上传学习资源介绍
  13. LA 4394 刷字符串(区间dp)
  14. 滴滴亮相第15届“开源中国开源世界”高峰论坛,并获重要奖项
  15. 轻断食原理:胰岛素水平
  16. 用HTML创作一个简单的电子时钟
  17. MPHY协议解读三:8b10b编码
  18. 桌面背单词,单词图片做背景
  19. mfc编程 孙鑫_MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)
  20. Bootstrap中的col-lg-*,col-md- *和col-sm- *有什么区别?

热门文章

  1. Xyz贴图ZWrap操作
  2. 使用layui 查询列表分页不能重置问题
  3. Fitting ellipse
  4. 上确界和下确界的存在
  5. 0428-项目再开发2.0
  6. springboot使用Cassandra组合查询数据
  7. 目标检测---以制作yolov5的数据集为例,利用labelimg制作自己的深度学习目标检测数据集(正确方法)
  8. Centos7安装Promethus(普罗米修斯)监控系统完整版
  9. 使用MTS加快mysql奔溃后binlog恢复
  10. Nginx的超时keeplive_timeout配置详解