目录
1.中断简介:
中断:在主程序运行过程当中,接到特定的中断触发条件(中断源),就会使CPU停止当前的工作,转而先去中断服务程序,在做完后返回主程序继续执行 。
中断优先级:如果同时有多个中断触发,为了防止混乱,会根据中断优先级一步一步去完成所有中断服务程序。优先级包括响应优先级和抢占优先级,响应优先级决定谁先进入中断,而抢占优先级决定当前中断是否能被另一个同时挂起的中断抢占。
中断嵌套:当一个中断正在进行时,如果触发了一个中断优先级高于此中断的中断,会将此中断挂起,去执行更高等级的中断。
中断的进行过程:
1.中断当前程序并保护断点
2.转入中断服务入口
3.保护现场
4.执行中断服务程序
5.恢复现场
6.中断返回
2.嵌套向量中断控制器(NVIC):
前面说到过,中断是由优先级的,NVIC就是用于为中断分组,从而分配抢占优先级和响应优先级的。
在STM32中,中断优先级控制字节(PRI_n)中有八位,但只有高四位有效,同时这四位要分别分配给响应优先级和抢占优先级,所以可以把这四位按照需要分配给响应优先级和抢占优先级。
优先级组别 | 响应优先级 | 抢占优先级 |
NVIC_PriorityGroup_0 | 4位/0~15级 | 0位/0级 |
NVIC_PriorityGroup_1 | 3位/0~7级 | 1位/0~1级 |
NVIC_PriorityGroup_2 | 2位/0~3级 | 2位/0~3级 |
NVIC_PriorityGroup_3 | 1位/0~1级 | 3位/0~7级 |
NVIC_PriorityGroup_4 | 4位/0~15级 | 0位/0级 |
通过设置嵌套中断向量,完成对中断的优先级控制
3. 复用IO端口(AFIO):
AFIO用来实现引脚的复用,在STM32中,供IO口使用的中断只有16个,但IO口的总数远远大于16,这时候就用AFIO把引脚标号相同的引脚的中断复用到一个中断线上
也就是说相同标号的引脚不能使用独立的中断,例如不可以同时使用PB0和PA0的中断
4.外部中断(EXTI):
EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO 口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
通过边沿检测电路来检验IO口的电平信号
触发方式:上升沿/下降沿/上升下降沿/软件触发
GPIO口:所有的IO口,但相同的Pin不能同时触发中断
触发响应方式:中断响应/事件响应
中断服务函数:在触发中断后,会进入对应的中断服务函数执行中断内容
通过在stm32的启动文件中可以看到,一共有7个中断服务函数,其中Pin5~9和Pin10~15的中断都被集成在一个中断函数里
5.总结:
在stm32中使用外部中断我们要依次配置GPIO->AFIO->EXTI->NVIC,将这四步配置完以后就可以顺利的使用外部中断啦,下一小节会详细说明这四步的配置方法。