stm32外部中断的操作步骤

本文详细介绍了STM32外部中断的配置步骤,包括GPIO初始化、中断线映射、中断服务程序设置和NVIC配置。还讨论了中断线的共享中断向量以及如何判断中断源和清除中断标志。最后,列举了使用GPIO中断的一般流程,并提及了复用功能和引脚重映射的概念。
摘要由CSDN通过智能技术生成

简述

本文简单介绍stm32外部中断的一般操作步骤,后续会补充外部中断的相关内容。

stm32的中断控制器支持19个外部中断/事件请求:

  • line0~line15:这16条line分别对应不同GPIO口的输入中断,比如:
    line0对应GPIOA的pin0、GPIOB的pin0、GPIOC的pin0、GPIOD的pin0、GPIOE的pin0;
    line1对应GPIOA的pin1、GPIOB的pin1、GPIOC的pin1、GPIOD的pin1、GPIOE的pin1;
    依此类推
  • line16:连接到PVD的输出
  • line17:连接到RTC闹钟事件
  • line18:连接到USB唤醒事件

需要注意的是,line0到line15,每条line同一时刻只能选择一个GPIO口作为中断源。

中断服务函数列表如下:

EXTIO_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler

一个中断向量对应到一个中断服务程序。在stm32中,外部中断线只分配到了7个中断向量,而外部中断线有19根;所以有些中断线是共用同一个中断向量的。从上面的列表可以看出:

  • line0到line4分别对应一个中断向量
  • line5到line9共用一个中断向量
  • line10到line15也是共用一个中断向量
  • line16到line18分别对应一个中断向量

所以一般情况下,系统响应外部gpio中断时都需要判断是哪一条中断线产生了中断,这时可以使用以下接口来判断:

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生

并且在中断服务函数里面还需要清除中断标志,这时可以使用以下接口来清除:

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位

gpio中断工作流程

使用gpio中断功能,一般有以下几个步骤:

1、初始化GPIO口,配置IO口为输入

GPIO_Init()

2、开启IO口的复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

3、设置IO口与中断线的映射关系

void GPIO_EXTILineConfig();

4、初始化线上中断,设置触发条件等

EXTI_Init();

5、配置NVIC IRQ通道,并使能中断

NVIC_Init();

6、编写中断服务函数

 EXTIx_IRQHandler();

7、清除中断标志位

EXTI_ClearITPendingBit();

补充

1、STM32上有很多I/O口,也有很多的内置外设I2C,ADC,ISP,USART ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。
2、为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其它引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。
3、只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟。

总结

后续本人有时间再继续补充外部中断相关内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值