中断
- 中断
- 1.1 NVIC中断优先级分组
- 1.2 外部中断
- <1> 映射中断线
- <2> 设置中断触发方式
- <3> 编写中断服务函数
- 外部中断常用的库函数:
- 中断函数初始化
- 外部中断的一般配置步骤:
- 部分示例:
中断
1.1 NVIC中断优先级分组
《stm32中文参考手册》的9.1.2节有详细介绍
NVIC中断优先级分组
60个中断的管理就需要用到NVIC,管理的方法:
对stm32的中断进行分组,分为0~4组。对每个中断设置抢占优先级和响应优先级。优先级高的中断先执行,先比较抢占优先级,再比较响应优先级。
- <1>抢占优先级相同时,如果响应优先级低的中断在执行,这时响应优先级高的中断不能打断响应优先级低的中断。
- <2>那响应优先级不能用于打断中断的话,他有什么作用呢?
用于抢占优先级相同的中断同时发生时的比较,这时响应优先级高的中断先执行。 - <3>抢占优先级和响应优先级都相同的中断,先发生的中断先执行。
一般在程序中只设置一次中断优先级分组,如果随意改变会造成中断管理混乱。
分组的配置在SCB->AIRCR中配置:
中断优先级分组函数:
使用时,如设置为中断分组2:
使用库函数配置时,在需要配置中断的子函数中进行配置:
在主函数中调用库函数设置中断分组:
1.2 外部中断
<1> 映射中断线
有16个中断线,但是同一时间只有一个I/O映射到对应的中断线
<2> 设置中断触发方式
<3> 编写中断服务函数
16条外部中断线,并不是有16个中断服务函数,系统分配了7个中断服务函数。
EXTI0 --------EXTI线0中断
外部中断线9 ~ 5分配了一个中断向量,共用一个中断服务函数;外部中断线15~ 10分配了一个中断向量,共用一个中断服务函数,加上0~4中断线服务函数,总共7个。
外部中断常用的库函数:
中断函数初始化
创建结构体、初始化参数、初始化结构体
EXTI_InitTypeDef EXTI_InitStruct;