0%
Skip to content

中断

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

image-20250306231117826

作用

  • 实时控制:如定时器中断采集温度
  • 故障处理:中断及时处理问题,而不是等待程序执行到问题处理(如if)
  • 数据传输:中断接收串口数据处理,而不是等待程序执行(可能已经发生完毕或者接收残缺)

外部中断

每个GPIO都可以中断。

  • 可以上升沿触发(信号低变高)
  • 可以下降沿触发(信号高变低)
  • 可以上升沿下降沿都触发

配置中断的同时也可以配置模式,如上拉电阻

image-20250306231713719

NVIC

Nestedvectored interrupt controller,嵌套向量中断控制器,属于内核。

  • 包含16个内核中断,240个外部中断支持256个优先级,允许裁剪。

F103包含10个内核中断,60个外部中断,16个中断优先级

中断向量表

  • 一块固定的内存,4字节对齐,存放各个中断函数的首地址
  • 中断向量表定义在启动文件中,发生中断,CPU执行相应的中断函数(main函数优先级最低)

image-20250306232324176

NVIC工作原理

嵌套向量中断控制主要用于管理中断的优先级和嵌套关系。其核心功能包括:

  1. 中断使能/失能:通过ISER和ICER寄存器控制中断的开启和关闭,每个中断对应1位。
  2. 优先级管理:通过IPR(外部中断)和SHPR(内核中断)设置中断优先级。优先级分为抢占优先级和子优先级,抢占优先级决定嵌套关系,子优先级决定同级中断的响应顺序。
  3. 优先级分组:通过AIRCR寄存器设置优先级分组,支持多种抢占优先级和子优先级的分配方式。
  4. 中断嵌套:高抢占优先级的中断可以打断低优先级的中断,实现嵌套处理。
  5. 中断屏蔽:通过PRIMASK和BASEPRI寄存器实现全局或优先级屏蔽。

总结:NVIC通过灵活的优先级管理和嵌套机制,保证了STM32中断的高效处理和实时性。

image-20250306232840171

中断优先级

  • 抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断
  • 响应优先级(sub):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断
  • 抢占和响应都相同的情况下,自然优先级越高的,先执行
  • 自然优先级:中断向量表的优先级
  • 上方的所有优先级都满足数值越小,优先级越高

中断分组和选择

  • 分组结果这里:以3组为例,说明抢占优先级可以配置数字023,响应优先级可以配置数字021
  • 如何选择分组
    • 中断简单,不需要嵌套。可以选择抢占优先级少的,即012,一般选择分组2
    • 中断嵌套,中断复杂,响应实时。应该选择抢占优先级数字可分配较多的,即3或4,一般选择分组3

image-20250306233859234

image-20250306234452581

NVIC使用

  • 设置中断分组
  • 设置中断优先级
  • 使能中断