返回

用直观方式理解STM32的中断设置

闲谈

前言

在嵌入式系统开发中,中断是一个非常重要的概念,对于STM32来说也不例外。STM32的内部器件非常丰富,这些器件都可以产生中断,从而提示CPU执行特定的操作。中断的合理使用可以大大提高系统的实时性和效率。

目录

  • 中断简介
    • 什么是中断?
    • 中断的种类
    • 中断的处理流程
  • 中断理解
    • 中断向量表
    • 中断优先级
    • 中断嵌套
  • STM32中的中断设置
    • NVIC概述
    • 中断配置寄存器
    • 中断使能寄存器
  • NVIC
    • NVIC的结构
    • NVIC的中断控制
    • NVIC的中断处理流程
  • STM32中断
    • STM32中断的种类
    • STM32中断的配置
    • STM32中断的处理

中断简介

什么是中断?

中断是一种硬件机制,当某个事件发生时,CPU会暂停当前正在执行的程序,转而去执行与该事件相关联的中断服务程序(ISR)。中断事件可以是由硬件设备产生的,也可以是由软件程序触发的。

中断的种类

中断可以分为两大类:外部中断和内部中断。外部中断是由外部硬件设备产生的,而内部中断是由CPU内部产生的。

中断的处理流程

当发生中断时,CPU会按照以下步骤处理:

  1. 保存当前正在执行的程序的上下文,包括程序计数器(PC)、程序状态字(PSW)和通用寄存器的内容。
  2. 跳转到中断向量表中与该中断事件相关联的中断服务程序(ISR)的入口地址。
  3. 执行ISR。
  4. ISR执行完毕后,CPU恢复之前保存的上下文,继续执行中断发生前正在执行的程序。

中断理解

中断向量表

中断向量表是一个特殊内存区域,其中存储着所有中断事件的中断服务程序(ISR)的入口地址。当发生中断时,CPU会根据中断事件的类型跳转到中断向量表中与该中断事件相关联的ISR的入口地址。

中断优先级

每个中断事件都有一个优先级,优先级高的中断事件会先于优先级低的中断事件得到处理。当多个中断事件同时发生时,CPU会按照中断优先级的顺序依次处理这些中断事件。

中断嵌套

中断嵌套是指在ISR执行期间又发生了另一个中断事件。当发生中断嵌套时,CPU会先保存当前正在执行的ISR的上下文,然后跳转到新发生的ISR的入口地址。新发生的ISR执行完毕后,CPU恢复之前保存的上下文,继续执行中断发生前正在执行的ISR。

STM32中的中断设置

NVIC概述

NVIC是STM32中的中断控制器,它负责管理STM32的所有中断事件。NVIC可以配置每个中断事件的优先级,并决定是否使能该中断事件。

中断配置寄存器

中断配置寄存器用于配置每个中断事件的优先级。中断配置寄存器是一个32位的寄存器,其中每一位对应一个中断事件。如果某一位的值为0,则表示该中断事件的优先级为最低;如果某一位的值为1,则表示该中断事件的优先级为最高。

中断使能寄存器

中断使能寄存器用于使能或禁止每个中断事件。中断使能寄存器也是一个32位的寄存器,其中每一位对应一个中断事件。如果某一位的值为0,则表示该中断事件被禁止;如果某一位的值为1,则表示该中断事件被使能。

NVIC

NVIC的结构

NVIC由以下几个部分组成:

  • 中断控制器:负责管理STM32的所有中断事件。
  • 中断向量表:存储着所有中断事件的中断服务程序(ISR)的入口地址。
  • 中断嵌套控制器:负责管理中断嵌套。

NVIC的中断控制

NVIC可以配置每个中断事件的优先级,并决定是否使能该中断事件。NVIC还负责管理中断嵌套。

NVIC的中断处理流程

当发生中断时,NVIC会按照以下步骤处理中断:

  1. 保存当前正在执行的程序的上下文,包括程序计数器(PC)、程序状态字(PSW)和通用寄存器的内容。
  2. 根据中断事件的类型跳转到中断向量表中与该中断事件相关联的中断服务程序(ISR)的入口地址。
  3. 执行ISR。
  4. ISR执行完毕后,NVIC恢复之前保存的上下文,继续执行中断发生前正在执行的程序。

STM32中断

STM32中断的种类

STM32的中断分为两大类:外部中断和内部中断。外部中断是由外部硬件设备产生的,而内部中断是由CPU内部产生的。

STM32中断的配置

STM32中断的配置包括以下几个步骤:

  1. 配置中断向量表。
  2. 配置中断优先级。
  3. 使能中断事件。

STM32中断的处理

STM32的中断处理包括以下几个步骤:

  1. 保存当前正在执行的程序的上下文,包括程序计数器(PC)、程序状态字(PSW)和通用寄存器的内容。
  2. 根据中断事件的类型跳转到中断向量表中与该中断事件相关联的中断服务程序(ISR)的入口地址。
  3. 执行ISR。
  4. ISR执行完毕后,STM32恢复之前保存的上下文,继续执行中断发生前正在执行的程序。