#一、EXTI外部中断
#二、NVIC中断
##1)中断流程
##2)STM32中断
##3)中断NVIC与EXTI基本结构
##4)中断优先级分组
##5)AFIO复用IO口
##6)EXTI功能框图
#三、EXTI外部中断结构
#四、EXTI中断函数配置
#五、程序代码
一、EXTI外部中断
-
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
-
EXTI可以检测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。
-
支持触发方式:上升沿/下降沿/双边沿/软件触发
-
支持GPIO口:所有的GPIO口,但相同的Pin不能同时触发中断(如,PA1、PB1、PC1则不能同时触发中断,经AFIO_EXTICR1寄存器分配,任选其一产生中断)
-
通道数:16个GPIO_Pin,外加PVD输出(注1)、RTC闹钟(注2)、USB唤醒、以太网唤醒
-
在程序中应用中断可以代替While(1)以减少单片机在程序运行过程中等待的时间,进一步提高了单片机的利用率及其工作效率,今天程序应用到的是外部中断EXTI。
-
注:
1)PVD = Programmable Votage Detector 可编程电压监测器
它的作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。
2)RTC是Real Time Clock的简称,定时开机闹钟,它在硬件电路上单独供电,当系统关机时,CPU和其他外部硬件设备全部掉电,但是RTC仍然继续工作。硬件如上个项目一致
二、NVIC中断
1)中断流程
- 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行
- 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
- 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

2)STM32中断
向量表:
- 68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设(灰色部分为芯片内部中断)




3)中断NVIC与EXTI基本结构


- EXTI中断结构图分析:
- GPIOA、GPIOB、GPIOC等各有16个Pin口(0~15),相同Pin口由AFIO中断引脚选择寄存器选择GPIOx为通道之一,如, GPIOA_Pin1,GPIOB_Pin1,GPIOC_Pin1,AFIO中断引脚选择寄存器选择GPIOA_Pin1为中断通道,则GPIOA_Pin1为EXTI1通道,其他两个Pin口产生的中断不会得到响应。
- 通道数:AFIO中断引脚选择器选择出16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒,一共20个通道通往EXTI边沿检测及控制寄存器
- 由EXTI边沿检测及控制寄存器检测中断信号,产生相应的中断请求信号沿通道送往NVIC中断
- NVIC中断结构图分析:
- NVIC中断收集各个外设的中断请求,分配优先级组,将中断事件依次送入CPU处理。
4)中断优先级分组
-
使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置
-
NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
-
抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队

5)AFIO复用IO口
- AFIO主要用于引脚复用功能的选择和定义
- 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
如图为中断引脚选择功能

6)EXTI功能框图

具体介绍:EXTI中断运行分析
四、EXTI中断函数配置
外部中断软件设计
a) 软件设计思想
i. 初始化中断
ii. EXTI(外部中断)
- 所有使用到的外设时钟使能
- 初始化GPIO口
- 外部中断线配置
a) AFIO外部中断寄存器选择哪个端口 - EXTI相关寄存器
- NVIC配置
iii. 中断服务函数
- 中断服务函数的编写
a) 判断是哪一个中断(共用中断服务函数)
b) 清对应中断挂起标志位
c) 中断服务函数
五、程序代码
1、Exti.c
#include "stm32f10x.h"
#include "exti.h"
void Exti_Init(void)
{
//1.配置GPIO
GPIO_InitTypeDef shake_init;
EXTI_InitTypeDef exti_init;
NVIC_InitTypeDef nvic_init;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分组配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);//配置GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//配置EXTI中断时钟,又输出又中断
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2);
shake_init.GPIO_Mode

本文深入解析STM32的EXTI外部中断和NVIC中断控制器的工作原理,包括中断流程、中断优先级、EXTI结构、中断配置以及程序实例。重点介绍了EXTI中断的配置,如GPIO初始化、中断通道选择、NVIC中断通道配置等,并给出了EXTI中断服务函数的编写。此外,还涵盖了AFIO复用IO口和中断优先级分组的细节,强调了中断在提高单片机效率中的作用。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



