一:外部中断基础知识
1.STM32外部中断框架
中断的概念:在主程序运行过程中,出现了特点的中断触发条件,使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行
1.通过AFIO_EXTICRx配置GPIO线上的外部中断/事件,必须先使能AFIO时钟。
• 有20条外部中断线
·2.有十六条是GPIO的中断线 (0-15),同一个引脚号对应同一个line
·3.第十九条line只在有ETH互联设备上才存在
·4.GPIO的中断线要启用必须先要配置AFIO的寄存器EXTICRX
2.STM32外部中断机制框架
1.边沿检测:上升沿,下降沿或者双边沿
2.软件配置中断或者事件寄存器
3.屏蔽中断寄存器或事件寄存器
4.请求挂起寄存器
5.中断发送给NVIC中断控制器
6.事件则产生一个脉冲响应
二: 复用功能
1.什么是复用功能?
处理器的引脚本身默认就是一个普通的GPIO,但是它还可以被复用成其他功能,我们称之为一个引脚的复用功能
三: 重映射
1.什么是重映射?
·重映射属于复用功能的另外一个功能,可以把具有特殊功能的引脚,分配到其他引脚上去
·如果某个功能被重映射了,那么这个功能将不再遵循其默认的默认分配。
四:中断嵌套控制器NVIC
1.中断向量表
Cortex-M3内核支持256个中断,其中包含了16个内核中断 (异常)和240个外部中断,并且具有256级的可编程中断设置。但是,STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有84个中断,包括16个内核中断(异常)和68个可屏蔽中断,具有16级可编程的中断优先级。而STM32F103系列上面,16个内核中断(异常)不变,而可屏蔽中断只有60个(在107系列才有68个)
优先级号越小,优先级越高。
2.中断优先级分组
这60个中断,怎么管理呢?这就涉及到STM32的中断分组。STM32可以将中断分成5个组,分别为组0-4;同时,对每个中断设置一个抢占优先级
和响应优先级。分组配置是由SCB--AIRCR寄存器的bit10-8来定义的。SCB->AIRCR是在哪里的呢?由于这是CM3内核定义的
CM3中定义了8个Bit用于设置中断源的优先级,而STM32只选用其中的4个Bit抢占优先级的级别高于响应优先级,而数值越小所代表的的优先级越高,介绍一下抢占优先级、响应优先级的区别:
·高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的;
。抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断,
。抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行;·如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;除此之外有两点需要注意:
·打断的情况只会与抢占优先级有关,和响应优先级无关!(中断嵌套)
·一般情况下,系统任码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中
断管理混乱,程序出现意想不到的执行结果
3.中断优先级控制函数结构体
。中断优先级控制函数
o NVIC SetPriorityGrouping()。
•中断优先级控制结构体参数
。 NVIC_IRQChannel:定义初始化的是哪一个中断,这个可以在stm32f10x.h文件中查到每个中断对应的名字,如USART1_IRQn;
o NVIC_IRQChannelPreemptionPriority:定义此中断的抢占优先级别;
• NVIC_IRQChannelSubPriority:定义此中断的响应优先级别;
。 NVIC_IRQChannelCmd:该中断是否使能。
· NVIC_Init()函数初始化NVIC寄存器
4.中断优先级设置步骠
1、系统运行后先设置中断优先级分组。调用函数。
2、针对每个中断,设置对应的抢占优先级和响应优先级。
3、如果需要挂起/解挂,查看中断当前激活状态,分别调用相关的数即可。