目录
- 1.中断的概念
- [2 中断控制器](#2 中断控制器)
- [3 外部中断/事件控制器框图](#3 外部中断/事件控制器框图)
- [4 EXTI简介](#4 EXTI简介)
- [5 中断事件线](#5 中断事件线)
- [6 中断优先级](#6 中断优先级)
- [7 标准库中断的应用](#7 标准库中断的应用)
1.中断的概念
中断(interrupt):在主程序运行过程中,出现了特定的打断条件(中断源),让CPU暂停当前正在运行的程序,去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。
2 中断控制器
嵌套向量中断控制器(NestedVectored InterruptController):简称NVIC。CM3内核支持256个中断,包括16个内核中断和250个外部中断,同时具有256级的可编程中断设置。而STM32只使用了一部分。STM32拥有84个中断,包括16个内核中断和68个可屏蔽中断(STM32F107系列才使用了68个可屏蔽中断),还拥有16级可编程的中断优先级。STM32F103系列只使用了60个可屏蔽中断。
3 外部中断/事件控制器框图

4 EXTI简介
EXTI(External interrupt/event controller)---外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性
5 中断事件线

前面EXTI0 - EXTI15分给每一个IO,另外7个用于处理特定的外设事件。这里PX0的X代表数据端口,也就是可以是PA0,PB0,PC0数据端口。意味着PA0,PB0,PC0它们都是共同占用EXT0这条线。
也就是说PA0,PB0,PC0都使用同一条中断事件线,但是我不知道是哪一个来的中断事件线,后面有一个区分它的。
6 中断优先级
| 优先级分组 | 抢占优先级 | 响应优先级 | 高四位描述 |
|---|---|---|---|
| 0 | 0极 | 0 ~ 15极 | 0bit用于抢占优先级 4bit用于响应优先级 |
| 1 | 0 ~ 1级 | 0 ~ 7级 | 1bit用于抢占优先级 3bit用于响应优先级 |
| 2 | 0 ~ 3级 | 0 ~ 3级 | 2bit用于抢占优先级 2bit用于响应优先级 |
| 3 | 0 ~ 7级 | 0 ~ 1级 | 3bit用于抢占优先级 1bit用于响应优先级 |
| 4 | 0 ~ 15级 | 0级 | 4bit用于抢占优先级 0bit用于响应优先级 |
响应优先级又称为子优先级。数值越小,优先级越高
0bit
只有一种状态 0极
1bit
2的1次方 - 1得到1,等级范围:0 ~ 1极
2bit
2的2次方 - 1得到3,等级范围:0 ~ 3极
3bit
2的3次方 - 1得到7,等级范围:0 ~ 7极
4bit
2的4次方 - 1得到15,等级范围:0 ~ 15极
抢占优先级:可以打断进行插队进去,比如我现在正在执行主任务,此时我有别的任务,别的任务的优先级高,就可以打断先执行。
响应优先级:大家都是同等级,大家都依次排队
优先级分组:0,1,2,3,4,取决于抢占优先级的数量,
0组,抢占优先级数量是0,
1组,抢占优先级数量是2,
2组,抢占优先级数量是4,
3组,抢占优先级数量是8,
4组,抢占优先级数量是16。
7 标准库中断的应用
标准库函数对每个外设都建立了一个初始化结构体,比如EXTIInitTypeDef,
结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如EXTIInitO
调用,这些设定参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。
I)EXTI Line:EXTI中断/事件线选择,可选EXTIO至EXTI19。
2)EXTI_Mode:EXTI模式选择,可选为产生中断或者产生事件。
3)EXTITrigger:EXTI边沿触发事件,可选上升沿触发、下降沿触发或者上升沿和下降沿都触发。
4)EXTILineCmd:控制是否使能EXTI线,可选使能或禁用。