中断
打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行.
作用
- 实时控制:如定时器中断采集温度
- 故障处理:中断及时处理问题,而不是等待程序执行到问题处理(如if)
- 数据传输:中断接收串口数据处理,而不是等待程序执行(可能已经发生完毕或者接收残缺)
外部中断
每个GPIO都可以中断。
- 可以上升沿触发(信号低变高)
- 可以下降沿触发(信号高变低)
- 可以上升沿下降沿都触发
配置中断的同时也可以配置模式,如上拉电阻
NVIC
Nestedvectored interrupt controller
,嵌套向量中断控制器,属于内核。
- 包含16个内核中断,240个外部中断支持256个优先级,允许裁剪。
F103
包含10个内核中断,60个外部中断,16个中断优先级
中断向量表
- 一块固定的内存,4字节对齐,存放各个中断函数的首地址
- 中断向量表定义在启动文件中,发生中断,CPU执行相应的中断函数(main函数优先级最低)
NVIC工作原理
嵌套向量中断控制主要用于管理中断的优先级和嵌套关系。其核心功能包括:
- 中断使能/失能:通过ISER和ICER寄存器控制中断的开启和关闭,每个中断对应1位。
- 优先级管理:通过IPR(外部中断)和SHPR(内核中断)设置中断优先级。优先级分为抢占优先级和子优先级,抢占优先级决定嵌套关系,子优先级决定同级中断的响应顺序。
- 优先级分组:通过AIRCR寄存器设置优先级分组,支持多种抢占优先级和子优先级的分配方式。
- 中断嵌套:高抢占优先级的中断可以打断低优先级的中断,实现嵌套处理。
- 中断屏蔽:通过PRIMASK和BASEPRI寄存器实现全局或优先级屏蔽。
总结:NVIC通过灵活的优先级管理和嵌套机制,保证了STM32中断的高效处理和实时性。
中断优先级
- 抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断
- 响应优先级(sub):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断
- 抢占和响应都相同的情况下,自然优先级越高的,先执行
- 自然优先级:中断向量表的优先级
- 上方的所有优先级都满足数值越小,优先级越高
中断分组和选择
- 分组结果这里:以3组为例,说明抢占优先级可以配置数字
,响应优先级可以配置数字 - 如何选择分组
- 中断简单,不需要嵌套。可以选择抢占优先级少的,即012,一般选择分组2
- 中断嵌套,中断复杂,响应实时。应该选择抢占优先级数字可分配较多的,即3或4,一般选择分组3
NVIC使用
- 设置中断分组
- 设置中断优先级
- 使能中断