本节主要讲的是,中断系统和外部中断,依靠外部中断来学习中断系统
中断系统:管理和执行中断的逻辑结构
外部中断:诸多能产生中断的外设之一
- 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行
*中断触发条件:如对外部中断来说,是引脚发生了电平跳变;对于定时器来说,定时的时间到了;对于串口通信来说,可以是接收到了数据。这些都是比较紧急的事件,如果不及时处理,那么下一个跳变信号就会跟着过来、新的数据会去覆盖旧的数据,所以需要及时处理。
- 使用中断系统的必要性:极大的提高了程序运行效率,如果没有中断系统,为了防止外部中断被忽略或者串口数据被覆盖,那么主程序就需要不断地查询是否有这些事情发生,就不能执行其他事情了。比如,如果没有定时中断,那么主函数只能使用Delay函数来实行定时功能,但有了中断系统以后主程序就可以放心执行其他事情,有中断的时候再去处理
- 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
- 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回
*能否进行中断嵌套也是由中断优先级决定的

为了程序能在中断返回后继续原来的工作,在中断执行前,会对程序现场进行保护,中断执行后,会还原现场,这样保证了主程序即使被中断了,回来之后也能继续运行
用C语言编程,保护和还原现场的工作,编译器已经自动帮我们做好了

一般中断程序都在一个主函数里,这个程序不需要我们去调用当中断来临时,又硬件自动调用这个函数
STM32中断
- 68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设
*F1系列最多的中断数量,对于一个具体的型号,可能没有那么多中断,具体以对应型号的数据手册为准
- 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级