1、中断系统
2、中断执行流程
3、stm32中断
68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设
使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级
上图为stm32中断资源
灰色为内核的中断,例如reset复位中断,当产生复位时,程序就会自动执行复位中断函数
白色为外设中断,例如WWDG中断,程序太卡,没有及时喂狗,看门狗就会申请中断,让程序调到窗口看门狗的中断程序,进行错误检查,看看出现什么问题
PVD电源电压检测,若电压供电不足,PVD电路就会申请中断,在中断就会知道供电不足。
中断地址、中断向量
表的最右边有中断的地址。
程序中的中断函数的地址是由编译器来分配,不固定,但由于硬件限制,中断跳转只能怪跳到固定的地址执行程序,故为了能让硬件跳转到一个不固定的中断函数中,需要在内存中定义一个地址的列表
列表地址固定,中断发生后,先跳转到固定位置,然后由编译器再跳转到中断函数的代码,这样中断跳转就可以跳转到任意位置了
中断地址的列表,叫中断向量表,相当于一个跳板
(在C语言编程中不考虑该问题)
4、NVIC基本结构
NVIC的名字叫做嵌套中断向量控制器
CPU可当作医生,NVIC的功能相当于叫号系统,中断相当于病人
5、响应优先级和抢占优先级
插队:响应优先级
不等上个病人进去就直接进去:抢占优先级
NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队
6、EXTI(Extern Interrupt)外部中断
EXTI可以监测指定 GPIO 口的电平信号,当其指定的 GPIO 口产生电平变化时, EXTI 将立即向 NVIC 发出中断申请,经过 NVIC 裁决后即可中断 CPU 主程序,使 CPU 执行 EXTI 对应的中断程序支持的触发方式:上升沿 / 下降沿 / 双边沿 / 软件触发支持的 GPIO 口:所有 GPIO 口,但相同的 Pin (例如 PA1 、 PB1 、 PC1 等 )不能 同时触发中断通道数: 16个GPIO_Pin ,外加 PVD 输出、 RTC 闹钟、 USB 唤醒、以太网 唤醒(一共 20 个)触发响应方式:中断响应 / 事件响应
外部中断有个功能:从低功耗模式的停止模式下唤醒stm32
例如PVD电源电压检测:当从电源从电压过低恢复时,需要PVD借助外部中断退出停止模式
RTC闹钟:RTC定一个闹钟之后,stm32进入停止模式,等闹钟响再唤醒,也需要外部中断
中断响应:申请中断,让CPU执行中断函数
事件响应:触发一个事件,则中断信号不会通向CPU,而是通向其他外设的操作,例如触发ADC转换、触发DMA等(stm32对外部中断增加的额外的功能)(也就是不会触发中断,而是触发外设操作)
外部中断的9~5、15~10会触发同一个中断函数,所以在编程的时候,要根据标志位区分是哪一个中断进来的
7、AFIO
AFIO主要用于引脚复用功能的选择和重定义
在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
8、与门/或门
或门 与门
侧面有选择控制端,根据控制端的数据,从输入选择一个接到输出
VIC基本结