中断概述
首先我们要理解什么是中断。
我们想象一个场景:你在家里看书学习的时候,突然来电话了,这时你需要先停止学习去接电话,电话接完后再重新回去学习;再比如,你玩游戏时,突然有人敲门,我们需要先去开门再继续玩游戏。中断意味着紧急打断现在正在做的事情,需要立即处理的事情。抽象到一个单片机系统,看书就是正在执行的主函数,如果没有外界影响,这个主函数将一直执行下去。而当外部有改变时(比如电话响),系统会暂停正在执行的主函数,立即跳转到紧急事件的处理中,系统处理的紧急任务就是中断处理函数。当紧急任务处理完毕之后,系统又会回到最初的任务中。如图所示:
NVIC
NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核和片上外设的中断相关功能。主要包括是否允许发生,中断抢占优先级,中断响应优先级等。
中断抢占优先级:当某一个中断函数正在运行时(中断),可能被另一个中断打断(中断2),此时系统会比较中断2和中断1的抢占优先级,如果中断2的抢占优先级较高,则中断2将打断中断1的执行,先执行完中断2后再回头执行中断1。如果中断1和中断2抢占优先级相同或中断2抢占优先级更低,则中断2无法打断中断1的执行,当中断1执行完后才会执行中断2。
中断响应优先级:当中断发生信号同时到来时,系统将优先执行抢占优先级高的任务,对于抢占优先级相同的任务,系统将优先执行响应优先级高的任务。
外部中断概述
STM32的每一个IO口都对应到外部中断
线0–15:IO输入中断
线16:连接到PVD输出
线17:连接到RTC闹钟事件
线18;连接到USB唤醒事件
每个外部中断线可以配置独立的触发方式(上升沿,下降沿或者双边沿)
外部中断连接方式:
中断服务函数:
从图中可以看出,外部中断5—9分配一个中断服务函数,外部中断10----15共用一个中断服务函数
外部中断配置步骤
使能端口硬件时钟
使能NVIC时钟(既SYSCFG时钟)
配置引脚为输入模式
将引脚连接到外部中断
选择中断触发方式:上升沿,下降沿,或者双边沿
运行外部中断引脚申请中断
配置中断服务函数