浅谈STM32中断模块


前言,本文基于STM32F407VET6.(多图警告)

中断

    • 一、概要
    • 二、中断概念
      • 1.什么是中断?
        • 1.1 中断概念
        • 1.2 中断的作用
        • 1.3 中断执行流程
        • 1.4 中断和异常
        • 1.5 中断资源
      • 2.中断向量和中断向量表
      • 4.中断的优先级
        • 4.1 中断优先级响应原则
        • 4.2 中断优先级分组
    • 三、NVIC嵌套向量中断控制器
    • 四、外部中断
      • 1.系统结构
      • 2.外部中断向量表
      • 3.外部中断原理
        • 3.1 外部中断结构图
        • 3.2外部中断信号图
      • 4.中断源和中断通道
        • 5.1 外部中断控制器结构图
        • 5.2 外部中断控制寄存器
          • 5.21中断屏蔽寄存器 (EXTI_IMR)
          • 5.22事件屏蔽寄存器 (EXTI_EMR)
          • 5.23上升沿触发选择寄存器 (EXTI_RTSR)
          • 5.24下降沿触发选择寄存器 (EXTI_FTSR)
          • 5.25软件中断事件寄存器 (EXTI_SWIER)
          • 5.56挂起寄存器 (EXTI_PR)
          • 5.57EXTI 寄存器映射

一、概要

在这里插入图片描述

二、中断概念

1.什么是中断?

1.1 中断概念

??中断指处理机处理程序运行中出现的紧急事件的整个过程.程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,处理机立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序中断;
在这里插入图片描述

1.2 中断的作用

1.速度匹配,提高机器系统效率。 系统中处理机的工作速度远高于外围设备的工作速度。通过中断可以协调它们之间的工作。当外围设备需要与处理机交换信息时,由外围设备向处理机发出中断请求,处理机及时响应并作相应处理。不交换信息时,处理机和外围设备处于各自独立的并行工作状态。
2. 分时操作,维持系统可靠正常工作。现代计算机中,程序员不能直接干预和操纵机器,必须通过中断系统向操作系统发出请求,由操作系统来实现人为干预。主存储器中往往有多道程序和各自的存储空间。在程序运行过程中,如出现越界访问,有可能引起程序混乱或相互破坏信息。为避免这类事件的发生,由存储管理部件进行监测,一旦发生越界访问,向处理机发出中断请求,处理机立即采取保护措施。
3. 实时响应,满足实时处理要求。 在实时系统中,各种监测和控制装置随机地向处理机发出中断请求,处理机随时响应并进行处理。
4. 提供故障现场处理手段,可靠性高。 处理机中设有各种故障检测和错误诊断的部件,一旦发现故障或错误,立即发出中断请求,进行故障现场记录和隔离,为进一步处理提供必要的依据。

1.3 中断执行流程

在这里插入图片描述

  1. 中断源发生中断请求/内核参数异常信号;
  2. 判断是否允许中断和该中断源是否被屏蔽;
  3. 优先权排队;
  4. 保护现场,关闭中断,保护断点;
  5. 根据中断向量表找到相应中断服务入口地址;
  6. 执行中断服务函数;
  7. 恢复现场;
  8. 打开中断。

1.4 中断和异常

异常: 内核自己产生, 如执行指令或者访问寄存器错误, 与内核同步;
中断: 请求事件来自内核外部(如来自片上或外设), 与内核异步发生。

1.5 中断资源

CM4支持16个异常和240个中断(256个优先级),但是STM32并没有使用CM4的NVIC全部资源。
除了10个内核异常外,STM32F40x还包括82个可屏蔽中断(16个可编程的优先等级)。

2.中断向量和中断向量表

中断向量就是中断处理函数的入口地址,在stm32fxxx.s文件中已经定义好了,所有中断向量在一起就构成了中断向量表。
在这里插入图片描述

4.中断的优先级

4.1 中断优先级响应原则

中断优先级:为了及时响应并处理所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断分为若干个级别, 称为中断优先级。

  • 抢占优先级(主优先级)—— Preemption Priority
  • 响应优先级(子优先级)—— SubPriority

在这里插入图片描述

4.2 中断优先级分组

在这里插入图片描述
中断优先级有5组选择,其中

  • 第0组只有4位用来表示响应优先级,其余三位未使用,因为其只有响应优先级,不能构成中断嵌套。
  • 第4组只有4位用来表示抢占优先级,其余三位未使用,此选择为CubeMX库缺省选择。

三、NVIC嵌套向量中断控制器

有如此多的中断信号, CPU如何去控制它呢?
NVIC: Nested Vectored Interrupt Controller 即嵌套向量中断控制器,它与内核有很深的“私交”——与内核是紧耦合的,可以实现低延迟的中断处理和晚到中断的高效处理,它具有以下特征:

  • 支持嵌套和向量中断
  • 自动保存和恢复处理器状态
  • 动态改变优先级
  • 简化的和确定的中断时间
    在这里插入图片描述

四、外部中断

1.系统结构

在这里插入图片描述

  • 要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置 2 个触发寄存器,同时在
    中断屏蔽寄存器的相应位写“1”使能中断请求。当外部中断线上出现选定信号沿时,便会产
    生中断请求,对应的挂起位也会置 1。在挂起寄存器的对应位写“1”,将清除该中断请求。

  • 要产生事件,必须先配置好并使能事件线。根据需要的边沿检测设置 2 个触发寄存器,同时
    在事件屏蔽寄存器的相应位写“1”允许事件请求。当事件线上出现选定信号沿时,便会产
    生事件脉冲,对应的挂起位不会置 1。

  • 通过在软件中对软件中断/事件寄存器写“1”,也可以产生中断/事件请求。

中断和事件的区别:
事件: 某一信号出现,比如上升沿或者下降沿。
中断: 某一的事件发生,并产生中断,然后跳到相应的中断服务函数中进行相应的处理。

2.外部中断向量表

中断向量表是用由一系列中断向量构成的:
外部中断

3.外部中断原理

3.1 外部中断结构图

在这里插入图片描述

3.2外部中断信号图

在这里插入图片描述

4.中断源和中断通道

在这里插入图片描述

### 5.外部中断控制器
其中:
在这里插入图片描述

5.1 外部中断控制器结构图

在这里插入图片描述
中断/事件触发相应你寄存器,再检测相关中断是否被屏蔽,被挂起,然后判断触发类型,最后产生中断响应。

5.2 外部中断控制寄存器

在这里插入图片描述

5.21中断屏蔽寄存器 (EXTI_IMR)

在这里插入图片描述

5.22事件屏蔽寄存器 (EXTI_EMR)

在这里插入图片描述

5.23上升沿触发选择寄存器 (EXTI_RTSR)

在这里插入图片描述

5.24下降沿触发选择寄存器 (EXTI_FTSR)

在这里插入图片描述

5.25软件中断事件寄存器 (EXTI_SWIER)

在这里插入图片描述

5.56挂起寄存器 (EXTI_PR)

在这里插入图片描述

5.57EXTI 寄存器映射

在这里插入图片描述