STM32——EXTI外部中断

本文详细介绍了STM32的EXTI外部中断配置过程,包括初始化GPIO、NVIC和EXTI结构体,设置中断线与IO口映射,以及中断服务函数的编写。STM32可支持20个中断事件,其中16~19线对应特定功能。通过步骤化的配置,读者可以了解如何实现STM32的外部中断功能。

STM32(学习记录)——EXTI外部中断

STM32的每个I/O口都可以作为外部中断输入。
STM32的中断控制器可以支持20个中断/事件请求
其中的线0~15对应外部I/O口的输入中断
线16对应PVD输出
线17对应RTC闹钟事件
线18对应USB唤醒事件
线19对应以太网唤醒事件
在这里插入图片描述图一 中断线与I/O口的对应关系

外部中断(标准库)一般配置过程:
①构建(GPIO口,NVIC嵌套中断控制器,外部中断)初始化结构体对象
GPIO_InitTypeDef GPIO_InitStruct
NVIC_InitTypeDef NVIC_InitStruct
EXTI_InitTypeDef EXTI_InitStruct
②开启IO时钟以及复用时钟(AFIO)(x=A~G)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCCAPB2Periph_GPIOx,ENABLE);

③初始化IO为输入(input)(x=A~G)
(1)编辑GPIO初始化结构体对象
配置IO口工作模式(input)
配置管脚(之后需要将其映射为外部中断输入端)
(2)调用GPIO_Init(GPIOx,&GPIO_InitStruct);

④编辑外部中断初始化结构体对象(y=0~15)
EXTI_InitStruct.EXTI_Line=EXTI_Liney; //配置对应的中断线
EXTI_InitStruct.EXTI_LineCmd=ENABLE; //使能中断线
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; //选择模式可为事件/中断,EXTI_Mode_Event/EXTI_Mode_Interrupt,这里选择后者–中断
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //设置中断触发条件,可选选项为 :EXTI_Trigger_Rising/EXTI_Trigger_Falling/EXTI_Trigger_Rising_Falling 分别对应上升沿触发/下降沿触发/边沿触发

⑤设置IO口与中断线的映射关系
void_GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcey);
//GPIOx的相应管脚编号应与GPIO_PinSourcey的相应中断线号相等

⑥初始化线上中断
EXTI_Init(&外部中断初始化结构体对象);

⑦定义NVIC中断分组(x=0~4)
NVIC_PriorityGroupConfig(x);

/*分组详情如下:
pre-emption priority-----------抢占优先级
subpriority-----------------------中断优先级
NVIC_PriorityGroup_0: 0 位 pre-emption priority(范围:0) 4 位 for subpriority(0~15)
NVIC_PriorityGroup_1: 1 位 for pre-emption priority(0~2) 3 位 for subpriority(0~7)
NVIC_PriorityGroup_2: 2 位 for pre-emption priority(0~3) 2 位 for subpriority(0~3)
NVIC_PriorityGroup_3: 3 位 for pre-emption priority(0~7) 1 位 for subpriority(0~2)
NVIC_PriorityGroup_4: 4 位 for pre-emption priority(0~15) 0 位 for subpriority(0)
*/

⑧编辑NVIC初始化结构体对象(z为外部中断编号)
NVIC_InitStruct.NVIC_IRQChannel= EXTIz_IRQn; //选择外部中断z的通道
NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE; //使能外部中断通道
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1; //配置中断抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1; //配置中断子优先级

⑨初始化NVIC嵌套中断控制器(类似于51单片机内的EA总中断)
NVIC_Init(&NVIC_InitStruct);

⑩编辑中断服务函数(x=0~4)
服务函数分别为:
(0~4)void EXTIx_IRQHandler();
(5~9)voidEXTI9_5_IRQHandler()
(10~15)voidEXTI15_10_IRQHandler()

11,清除中断标志位(x=0~15)为下次进入中断服务函数做好准备
EXTI_ClearITPendingBit(EXTI_Linex);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值