STM32中断机制详解及其运用介绍

文章目录

  • 1. 什么是中断
  • 1.1 中断的作用和意义
  • 1.2 STM32 GPIO外部中断简图
  • 2. NVIC
  • 2.1 NVIC基本概念
  • 2.2 NVIC相关寄存器介绍
  • 2.3 NVIC工作原理
  • 2.4 STM32中断优先级基本概念
  • 2.5 STM32中断优先级分组
  • 2.6 STM32 NVIC的使用
  • 3.EXTI
  • 3.1 EXTI基本概念
  • 3.2 EXTI主要特性
  • 3.3 EXTI工作原理(F1/F4/F7)
  • 3.4 EXIT相关寄存器
  • 3.4.1 上升沿触发选择寄存器(EXTI_RTSR)
  • 3.4.2 上升沿触发选择寄存器(EXTI_RTSR)
  • 3.4.3 挂起寄存器(EXTI_PR)
  • 3.4.4 中断屏蔽寄存器(EXTI_IMR)
  • 4.EXTI和IO映射关系
  • 4.1 AFIO简介(F1)
  • 4.2 SYSCFG简介(F4/F7/H7)
  • 4.3 EXTI与IO对应关系
  • 5.如何使用中断
  • 5.1 中断的使用步骤
  • 5.1 中断的使用步骤
  • 6.通过外设驱动模型(四步法)
  • 7.HAL库中断回调处理机制介绍
  • 1. 什么是中断

    打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断

    1.1 中断的作用和意义

    实时控制:在确定时间内对相应事件作出响应,如:温度监控
    故障处理:检测到故障,需要第一时间处理,如:电梯门夹人了
    数据传输:不确定数据何时会来,如:串口数据接收

    中断的意义:高效处理紧急程序,不会一直占用CPU资源

    1.2 STM32 GPIO外部中断简图

    2. NVIC

    2.1 NVIC基本概念

     NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller,属于内核(M3/4/7)。作用是对STM32中的中断进行管理,因为内核中的中断数量很多,当同时出现多个中断时,应该优先处理哪个中断,哪里后处理,都要靠NVIC 进行控制。M3 内核都是支持 256 个中断,其中包含了 16 个系统中断240 个外部中断,并且具有 256 级的可编程中断设置

     NVIC支持:256个中断(16个内核+240个外部);支持256个优先级。

     ST公司用不到M3内核中的所有中断以及中断优先级,进而对其进行了一定的裁剪。STM32中共有10个内核中断,60个外部中断,16个中断优先级;

    什么是中断向量表?
     定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址。中断向量表定义在启动文件 .s里面,当发生中断,CPU会自动执行对应的中断服务函数

    具体可参考:STM32F103的中文参考手册,9.1.2中断和异常向量

    2.2 NVIC相关寄存器介绍

    NVIC相关的寄存器有很多,但是重要的有以下几个,也是需要进行掌握的:

    1、ISER与ICER寄存器共有32*8=256,用于控制240个中断的打开与关闭;
    2、AIRCR寄存器,位10、9、8三位用于控制优先级的分组,三位共2的3次方=8种,取其中的5组作为中断优先级的分组情况;
    3、IPR寄存器,用于控制中断的优先级,包括抢占优先级与响应优先级,高4位控制,至于哪几位控制抢占,哪几位控制响应,由AIRCR寄存器说了算;
    4、NVIC还有:中断挂起,解挂,激活标志等非常用功能

    2.3 NVIC工作原理

    工作原理:
     当外部被出发时,首先进入ICER、ISER寄存器,用于控制是否开对应的中断,打开的中断进入IPR寄存器进行中断优先级的判断IPR寄存器受AIRCR寄存器控制,最后按照中断优先级依次进入CPU被执行
     内核中断由SHPR寄存器控制,SHPR与IPR寄存器属于同一级别;

    2.4 STM32中断优先级基本概念

    1. 抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断
    2. 响应优先级(sub):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断
    3. 抢占和响应都相同的情况下,自然优先级越高的,先执行
    4. 自然优先级:中断向量表的优先级
    5. 数值越小,表示优先级越高

    2.5 STM32中断优先级分组

     在前面我们说过AIRCR寄存器,位10、9、8三位用于控制优先级的分组,但是只取其中的五组优先级分组;IPR寄存器,用于控制中断的优先级,包括抢占优先级与响应优先级,高4位控制,如下表所示:

    在一个工程中,一般只设置一次中断优先级分组(AIRCR寄存器);

    2.6 STM32 NVIC的使用

    1、设置中断分组:AIRCR寄存器[10:8];  HAL_NVIC_SetPriorityGrouping();
    2、设置中断优先级:IPR寄存器[7:4];   HAL_NVIC_SetPriority();
    3、使能中断:ISER寄存器;        HAL_NVIC_EnableIRQ();

    3.EXTI

    3.1 EXTI基本概念

     全称:外部(扩展)中断事件控,External(Extended) interrupt/event Controller;包含20个产生事件/中断请求的边沿检测器,即20条EXIT线

    EXIT线说明:
    0-15:对应GPIO_PIN 0-15中断;
    16:PVD输出;
    17:RTC闹钟事件;
    18:USB唤醒事件;
    19:连接到以太网唤醒事件(只适用于互联型产品)

    中断和事件的理解 :
    中断:要进入NVIC,有相应的中断服务函数,需要CPU处理;
    事件:不进入NVIC,仅用内部硬件自动控制,TIM,DMA,ADC等

    3.2 EXTI主要特性

    F1/F4/F7系列:
     每条EXTI线都可以单独配置:选择类型(中断或者事件)、触发方式(上升沿,下降沿或者双边沿触发)、支持软件触发、开启/屏蔽、有挂起状态位。
    H7系列:
     由其它外设对 EXTI 产生的事件分为可配置事件和直接事件。
     可配置事件:简单概括,基本和F1/F4/F7系列类似
     直接事件:固定上升沿触发、不支持软件触发、无挂起状态位(由其它外设提供)

    3.3 EXTI工作原理(F1/F4/F7)

    具体请看正点原子:https://www.bilibili.com/video/BV1bv4y1R7dp?p=58&vd_source=cb8a23293b3fea6c0995c109c4c109fc

    3.4 EXIT相关寄存器

     对于外部中断来说,我们只需要掌握其中四个寄存器:上升沿触发选择寄存器(EXTI_RTSR)、下降沿触发选择寄存器(EXTI_FTSR)、挂起寄存器(EXTI_PR)与中断屏蔽寄存器(EXTI_IMR)。

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

     该寄存器主要用于控制输入线进来的输入信号,上升沿时是否在边沿检测电路被检测出,20位共控制20条EXIT线;

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

     该寄存器主要用于控制输入线进来的输入信号,下升沿时是否在边沿检测电路被检测出,20位共控制20条EXIT线;

    3.4.3 挂起寄存器(EXTI_PR)

    该寄存器的作用主要有两个:
     1.检测外部中断线上是否发生了选择的边沿事件,如果发生了,该位置1,并将信号传递给 与门电路,进而进入NVIC中;
     2.在该位手动(软件)写入1,可以清除之前中断信号的1,主要作用是进入中断后,清除中断位,防止多次进入中断;

    3.4.4 中断屏蔽寄存器(EXTI_IMR)

     该寄存器的主要作用只有一个,就是是否允许来自中断线上的中断信号进入NVIC中断控制器。

    4.EXTI和IO映射关系

    4.1 AFIO简介(F1)

     Alternate Function IO,即复用功能IO,主要用于重映射和外部中断映射配置

    eg:SYSCFG_EXTICR1~4,配置EXTI中断线0-15对应具体哪个IO口

    4.2 SYSCFG简介(F4/F7/H7)

     System configuration controller,即系统配置控制器,用于外部中断映射配置。

    4.3 EXTI与IO对应关系

    EXTI 线 0~15:对应外部 IO 口的输入中断,中断线每次只能连接到 1 个 IO 口上, 这样就需要通过配置决定对应的中断线配置到哪个 GPIO 上了。

    GPIO 和中断线映射关系是在寄存器 AFIO_EXTICR1 ~ AFIO_EXTICR4 中配置的

    5.如何使用中断

    5.1 中断的使用步骤

     上述中断步骤共有两条线路,一条为GPIO外部中断的工作流程,即EXIT线(0-15)的工作流程,另外一条为其他外设中断的工作流程,即EXIT线(16-19)的工作流程。

    5.1 中断的使用步骤


    中断线 0-4,每个中断线对应一个中断函数,中断线 5-9 共用中断函数EXTI9_5_IRQHandler, 中断线 10-15共用中断函数 EXTI15_10_IRQHandler。

    6.通过外设驱动模型(四步法)

    7.HAL库中断回调处理机制介绍

    作者:XxxMyGoddess

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32中断机制详解及其运用介绍

    发表回复