EXTI外部中断

? 难点:中断向量表、看门狗、NVIC的优先级位?EXTI框图?

------------------------

中断系统

中断:在主程序运行过程中,出现了特定的中断触发条件(中断源--->例如:对于外部中断,引脚发生电平跳变; 对定时器来说,定时时间到了 ;对串口通信来说,接收到了数据

使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

中断优先级(自己设置):当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

中断执行流程

EXTI外部中断_第1张图片

STM32中断

68个可屏蔽中断通道(中断源),包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设

使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级

EXTI外部中断_第2张图片

      灰色的是内核中断,了解即可

WWDG 窗口看门狗,用来监测程序运行状态的中断。比如程序卡死了,没有及时喂狗,就会申请中断

PVD电源电压监测:如果供电电压不足,申请中断

EXTI外部中断_第3张图片

补充: 中断向量表(中断地址的列表)

 程序中的中断函数,地址是由编译器来分配的,是不固定的。

 但是中断跳转,由于硬件限制,只能跳转到固定的地址执行程序。

 所以为了让硬件跳转到不固定的中断函数里,就要在内存中定义一个地址的列表。

 这个列表地址是固定的,中断发生后,就跳到这个固定位置,然后在这个固定位置,由编译器,再加上一条跳转到中断函数的代码,这样中断跳转就可以跳到任意位置了

EXTI外部中断_第4张图片EXTI外部中断_第5张图片

本次课程使用 EXT10-EXT-14   EXTI9-5   EXTI15-10

NVIC(嵌套中断向量控制器)基本结构

EXTI外部中断_第6张图片

NVIC是一个内核外设,CPU小助手,处理中断先后顺序

NVIC中断优先级分组(医生看病)

NVIC的中断优先级(16个)由优先级寄存器的4位二进制(0~15 值越小,优先级越高)决定,这4位可以进行切分,分为高n位(2^n)的抢占优先级和低4-n位(2^4-n)的响应优先级

抢占优先级高的可以中断嵌套(打断现在的中断,不让现在的病人看完,直接看病,先给自己看),响应优先级高的可以优先排队(不打断现在的中断,只是插队看病,等这个病人看完自己再看),抢占优先级和响应优先级均相同的按中断号(数值小优先响应)排队

EXTI外部中断_第7张图片

stm32的中断不存在先来后到的排队方式,任何时候都是优先级高的先相应

EXTI简介

*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)属于外设之间联合工作)

EXTI基本结构

EXTI外部中断_第8张图片

外部中断配置流程

1.配置RCC

2.GPIO配置输入模式

3.AFIO 选择需要用的GPIO

4.EXTI 选择边沿触发方式、触发响应方式

5.NVIC优先级配置

AFIO复用IO口

AFIO主要用于引脚复用功能的选择和重定义

在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择

EXTI外部中断_第9张图片EXTI外部中断_第10张图片

EXTI框图

EXTI外部中断_第11张图片

你可能感兴趣的:(STM32,单片机,嵌入式硬件)