STM32 CubeMX(二)—— 外部中断


前言

中断

通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。

这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。

同步中断

当指令执行时,由控制单元产生的。

之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。

异步中断。

由其他硬件设备依照 CPU 时钟信号随机产生的。

通常我们所说的中断指的是异步中断,我们将同步中断称为异常。异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的。

作用

通过中断可以使处理器转而去优先运行正常控制流之外的代码。

优先级

中断与IRQ

每个能够发出中断请求的硬件设备控制器都有一条名为IRQ(lnterrupt ReQuest) 的输出线。

STM32中断

爱特梅尔公司发布的全新ARM® ARM D20微控制器,采用的是全球微控制器标准。
提供中断控制器,用于总体管理异常,称之为“内嵌向量中断控制器:Nested Vectored Interrupt Controller (NVIC)”。

中断优先级

NVIC中有一个8位中断优先级寄存器NVIC_IPR,理论上可以配置0~255共256级中断。

STM32只使用了其中的高4位,并分成抢占优先级和子优先级两组。

中断嵌套

    多个中断同时提出中断申请时:先比较抢占优先级,抢占优先级高的中断先执行。如果抢占优先级相同,则比较子优先级。 二者都相同时,比较中断编号。编号越小,优先级越高。

中断编号位于芯片头文件中。

优先级分组

HAL库初始化函数HAL_Init将优先级分组设置为第4组,即有0~15,共16级抢占优先级,没有子优先级。编号越小的优先级越高。

外部中断

EXTI

External interrupt/event controller,外部中断/事件控制器,管理了控制器的 20个中断/事件线。

每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线单独配置为中断或者事件,以及触发事件的属性。

GPIO引脚的外部中断触发方式

    上升沿触发 下降沿触发 双边沿触发

引脚分组

配置外部中断

  1. 开启IO口时钟,初始化IO口为输入。
  2. 开启IO口复用时钟。
  3. 设置IO口与中断线的映射关系。
  4. 初始化线上中断,设置触发条件等。
  5. 配置中断分组(NVIC),并使能中断。
  6. 编写中断服务函数。
  7. 清除中断标志位。
经验分享 程序员 微信小程序 职场和发展