描述 #
该文件包含外部中断(EXTI)固件库的所有函数原型与数据类型定义,用于配置和管理微控制器的外部中断与事件线。EXTI 模块允许将 GPIO 引脚或其他片上事件(如 PVD 输出、电源唤醒)映射为独立的中断或事件通道,支持边沿触发(上升沿、下降沿或双边沿)和中断/事件模式分离,实现低功耗下的高效事件响应。所有配置通过结构体初始化和寄存器位操作完成,符合标准外设库设计范式。
常量 #
EXTI_LINENONE
#
无中断选择
用于结构体初始化时的默认值,表示未启用任何中断线。在 EXTI_StructInit() 中被用作初始值,确保未显式配置的线路处于禁用状态,避免意外触发。
| 名称 | 值 | 简述 |
|---|---|---|
EXTI_LINENONE |
0x00000 |
表示无任何外部中断线被选中 |
以上所有值都强制转换为
uint32_t。
EXTI_Lines
#
外部中断线定义
每个宏代表一个可独立配置的外部中断/事件通道,支持位掩码组合,允许同时启用多个线路。部分线路与片上外设(如PVD、电源唤醒)绑定,实现系统级事件联动。
| 名称 | 值 | 简述 |
|---|---|---|
EXTI_Line0 |
0x00001 |
外部中断线 0 |
EXTI_Line1 |
0x00002 |
外部中断线 1 |
EXTI_Line2 |
0x00004 |
外部中断线 2 |
EXTI_Line3 |
0x00008 |
外部中断线 3 |
EXTI_Line4 |
0x00010 |
外部中断线 4 |
EXTI_Line5 |
0x00020 |
外部中断线 5 |
EXTI_Line6 |
0x00040 |
外部中断线 6 |
EXTI_Line7 |
0x00080 |
外部中断线 7 |
EXTI_Line8 |
0x00100 |
外部中断线 8,连接到PVD输出 |
EXTI_Line9 |
0x00200 |
外部中断线 9,连接到电源自动唤醒事件 |
以上所有值都强制转换为
uint32_t。
枚举 #
EXTIMode_TypeDef
#
外部中断模式选择
定义中断线的工作模式:中断模式(触发CPU中断)或事件模式(仅触发脉冲,不触发中断,常用于唤醒或触发DMA)。两者互斥,需根据应用需求选择。
| 名称 | 值 | 简述 |
|---|---|---|
EXTI_Mode_Interrupt |
0x00 |
配置为中断模式,触发时产生CPU中断 |
EXTI_Mode_Event |
0x04 |
配置为事件模式,仅生成脉冲信号,不中断CPU |
EXTITrigger_TypeDef
#
触发边沿类型选择
定义中断或事件的触发条件,支持单边沿或双边沿触发。双边沿触发适用于按键抖动消除或双向信号检测等场景。
| 名称 | 值 | 简述 |
|---|---|---|
EXTI_Trigger_Rising |
0x08 |
上升沿触发 |
EXTI_Trigger_Falling |
0x0C |
下降沿触发 |
EXTI_Trigger_Rising_Falling |
0x10 |
上升沿和下降沿均触发(双边沿) |
结构体 #
EXTI_InitTypeDef
#
EXTI 初始化结构体定义
用于集中配置一条或多条外部中断线的参数,通过 EXTI_Init() 函数写入硬件寄存器。结构体字段支持组合配置,允许灵活控制中断行为。
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_Line |
uint32_t |
指定要配置的EXTI线路,可为多个 EXTI_LineX 的位或组合(如 `EXTI_Line0 |
EXTI_Mode |
EXTIMode_TypeDef |
选择中断或事件模式,决定是否触发CPU中断 |
EXTI_Trigger |
EXTITrigger_TypeDef |
设置触发边沿类型,支持上升、下降或双边沿 |
EXTI_LineCmd |
FunctionalState |
启用或禁用指定线路,ENABLE 开启,DISABLE 关闭 |
FunctionalState为标准库类型,定义为ENABLE(1)和DISABLE(0)。
函数 #
EXTI_DeInit
#
void EXTI_DeInit(void)
将所有EXTI寄存器恢复为复位默认值,禁用所有中断和事件线路,清除挂起标志。此函数用于系统初始化或错误恢复时彻底重置EXTI模块,避免遗留配置干扰。
参数:
无
返回值:
无
EXTI_Init
#
void EXTI_Init(EXTI_InitTypeDef *EXTI_InitStruct)
根据传入的初始化结构体配置EXTI外设。支持动态启用/禁用线路、设置触发模式和边沿类型。内部通过地址偏移计算访问对应的中断使能、事件使能、上升沿/下降沿触发寄存器,实现高效位操作。若 EXTI_LineCmd 为 DISABLE,则仅禁用线路而不修改触发配置。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_InitStruct |
EXTI_InitTypeDef * |
指向包含配置参数的结构体指针 |
返回值:
无
EXTI_StructInit
#
void EXTI_StructInit(EXTI_InitTypeDef *EXTI_InitStruct)
将EXTI初始化结构体的所有成员设置为默认复位值:禁用所有线路、使用下降沿触发、中断模式。用于在调用 EXTI_Init() 前清空结构体,避免未初始化变量导致的不可预测行为。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_InitStruct |
EXTI_InitTypeDef * |
指向待初始化的结构体指针 |
返回值:
无
EXTI_GenerateSWInterrupt
#
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line)
软件生成指定EXTI线路的中断请求,模拟硬件触发。常用于测试中断服务例程(ISR)或在无外部信号时触发事件。写入 SWIEVR 寄存器即可触发,无需硬件引脚变化。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_Line |
uint32_t |
要触发的EXTI线路掩码(如 EXTI_Line0) |
返回值:
无
EXTI_GetFlagStatus
#
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)
读取指定EXTI线路的挂起标志状态,用于轮询方式判断是否发生中断事件。返回值为 SET(已挂起)或 RESET(未挂起),仅反映硬件标志位,不检查中断是否使能。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_Line |
uint32_t |
要查询的EXTI线路掩码 |
返回值:
FlagStatus 类型,表示线路是否挂起(SET 或 RESET)
EXTI_ClearFlag
#
void EXTI_ClearFlag(uint32_t EXTI_Line)
清除指定EXTI线路的挂起标志。必须在中断服务函数中调用此函数,否则中断会持续触发。写入 INTFR 寄存器的对应位可自动清除标志,为写1清零机制。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_Line |
uint32_t |
要清除的EXTI线路掩码 |
返回值:
无
EXTI_GetITStatus
#
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)
综合判断指定EXTI线路是否被触发并使能。需同时满足两个条件:1)挂起标志为 SET;2)中断使能位(INTENR)为 1。适用于中断服务入口前的条件判断,避免误判事件模式触发。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_Line |
uint32_t |
要检查的EXTI线路掩码 |
返回值:
ITStatus 类型,表示中断是否有效触发(SET 或 RESET)
EXTI_ClearITPendingBit
#
void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
清除指定EXTI线路的中断挂起位,与 EXTI_ClearFlag() 功能完全相同。此函数为语义化命名,专用于中断服务中清除中断标志,提高代码可读性。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
EXTI_Line |
uint32_t |
要清除的EXTI线路掩码 |
返回值:
无