stm32--EXTI—外部中断/事件控制器

这篇博客详细介绍了STM32的EXTI(External Interrupt/Event Controller)控制器,包括其20个中断/事件线的功能,如何配置中断或事件,以及如何通过EXTI初始化结构体来设置中断模式和触发事件。EXTI不仅能够产生中断,还能产生事件,适用于不同的硬件级和软件级需求。此外,文中还提到了EXTI线与GPIO的连接方式以及EXTI初始化的关键步骤,如NVIC配置和中断服务函数的编写。
摘要由CSDN通过智能技术生成

1、EXTI 简介

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性

EXTI 功能框图
在这里插入图片描述
EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不同。

产生中断线路目的是把输入信号输入到 NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。
而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级的。
另外,EXTI 是在 APB2 总线上的,在编程时候需要注意到这点。

2、中断/事件线

EXTI 有 20 个中断/事件线,每个 GPIO 都可以被设置为输入线,占用 EXTI0 至EXTI15,还有另外七根用于特定的外设事件
在这里插入图片描述
EXTI0 可以通过 AFIO 的外部中断配置寄存器 (AFIO_EXTICR1)的EXTI0[3:0]位选择配置为 PA0、PB0、PC0、PD0、PE0、PF0、PG0、PH0 或者 PI0
在这里插入图片描述

2、EXTI 初始化结构体详解

1 typedef struct {
   
2 uint32_t EXTI_Line; // 中断/事件线
3 EXTIMode_TypeDef EXTI_Mode; // EXTI 模式
4 EXTITrigger_TypeDef EXTI_Trigger; // 触发类型
5 FunctionalState EXTI_LineCmd; // EXTI 使能
6 } EXTI_InitTypeDef;
  1. EXTI_Line:EXTI 中断/事件线选择,可选 EXTI0 至 EXTI19,可参考表 18-1 选择。
  2. EXTI_Mode:EXTI 模式选择,可选为产生中断(EXTI_Mode_Interrupt)或者产生事件(EXTI_Mode_Event)。
  3. EXTI_Trigger:EXTI 边沿触发事件,可选上升沿触发(EXTI_Trigger_Rising)、下降沿触发 ( EXTI_Trigger_Falling) 或者上升沿和下降沿都触发( EXTI_Trigger_Rising_Falling)。
  4. EXTI_LineCmd:控制是否使能 EXTI 线,可选使能 EXTI 线(ENABLE)或禁用(DISABLE)。

1. 编程要点

  1. 初始化用来产生中断的 GPIO;
  2. 初始化 EXTI;
  3. 配置 NVIC;
  4. 编写中断服务函数;

按键和 EXTI 宏定义

1 //引脚定义
2 #define KEY1_INT_GPIO_PORT GPIOA
3 #define KEY1_INT_GPIO_CLK (RCC_APB2Periph_GPIOA\
4 |RCC_APB2Periph_AFIO)
5 #define KEY1_INT_GPIO_PIN GPIO_Pin_0
6 #define KEY1_INT_EXTI_PORTSOURCE GPIO_PortSourceGPIOA
7 #define KEY1_INT_EXTI_PINSOURCE GPIO_PinSource0
8 #define KEY1_INT_EXTI_LINE EXTI_Line0
9 #define KEY1_INT_EXTI_IRQ EXTI0_IRQn
10 
11 #define KEY1_IRQHandler EXTI0_IRQHandler
12 
13 
14 #define KEY2_INT_GPIO_PORT GPIOC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值