? 难点:中断向量表、看门狗、NVIC的优先级位?EXTI框图?
------------------------
中断:在主程序运行过程中,出现了特定的中断触发条件(中断源)--->例如:对于外部中断,引脚发生电平跳变; 对定时器来说,定时时间到了 ;对串口通信来说,接收到了数据
使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行
中断优先级(自己设置):当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回
68个可屏蔽中断通道(中断源),包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设
使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级
灰色的是内核中断,了解即可
WWDG 窗口看门狗,用来监测程序运行状态的中断。比如程序卡死了,没有及时喂狗,就会申请中断
PVD电源电压监测:如果供电电压不足,申请中断
补充: 中断向量表(中断地址的列表):
程序中的中断函数,地址是由编译器来分配的,是不固定的。
但是中断跳转,由于硬件限制,只能跳转到固定的地址执行程序。
所以为了让硬件跳转到不固定的中断函数里,就要在内存中定义一个地址的列表。
这个列表地址是固定的,中断发生后,就跳到这个固定位置,然后在这个固定位置,由编译器,再加上一条跳转到中断函数的代码,这样中断跳转就可以跳到任意位置了
本次课程使用 EXT10-EXT-14 EXTI9-5 EXTI15-10
NVIC的中断优先级(16个)由优先级寄存器的4位二进制(0~15 值越小,优先级越高)决定,这4位可以进行切分,分为高n位(2^n)的抢占优先级和低4-n位(2^4-n)的响应优先级
抢占优先级高的可以中断嵌套(打断现在的中断,不让现在的病人看完,直接看病,先给自己看),响应优先级高的可以优先排队(不打断现在的中断,只是插队看病,等这个病人看完自己再看),抢占优先级和响应优先级均相同的按中断号(数值小优先响应)排队
stm32的中断不存在先来后到的排队方式,任何时候都是优先级高的先相应
*EXTI(Extern Interrupt)外部中断
*EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
简单来说,引脚电平变化,申请中断
*支持的触发方式:上升沿/下降沿/双边沿/软件触发
*支持的GPIO口:所有GPIO口,但相同的Pin号不能同时触发中断(PA1和PB1不能同时用)
*通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
*触发响应方式:
中断响应(正常流程)
事件响应(当外部中断检测到引脚变化时,信号就不会通向CPU,而是通到其他外设,用来触发其他外设的操作(ADC,DMA)属于外设之间联合工作)
1.配置RCC
2.GPIO配置输入模式
3.AFIO 选择需要用的GPIO
4.EXTI 选择边沿触发方式、触发响应方式
5.NVIC优先级配置
AFIO主要用于引脚复用功能的选择和重定义
在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择