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):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断
  • 抢占和响应都相同的情况下,自然优先级越高的,先执行
  • 自然优先级:中断向量表的优先级
  • 上方的所有优先级都满足数值越小,优先级越高

中断分组

  • 中断分组决定了抢占优先级和响应优先级在优先级值中的位宽分配
  • 一般一个工程只中断分组一次,否则可能出现混乱
  • 每个中断,你可以设置每个中断,你可以设置抢占优先级为 0~7,响应优先级为 1 或 0

image-20250306233859234

中断优先级判断

  • 抢占优先级小则一定优先,然后比较响应,自然优先级
  • 也可以通过计算优先级值来判断
  • <<n是左移n位,即2n

注意n是响应优先级比例

image-20250307000554097

案例,分组2,比例2:2。

  • 优先级分别是9,12,8,12
  • 但是自然优先级6<13
  • 最终顺序2,4,1,3

image-20250306234452581

案例分组3,抢占和响应权重为3:1

中断号抢占优先级响应优先级优先级值(十进制)IPR寄存器值(十六进制)
RTC21(2 << 1)+15
EXTI031(3 << 1)+17
EXTI120(2 << 1)+04
Systick30(3 << 1)+06

NVIC使用

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