STM32F4 EXTI外部中断(二)

一. 外部中断结构体

1. EXTI_InitTypeDef 结构体

字段描述
EXTI_Line中断线标号
EXTI_Mode中断模式
EXTI_Trigger触发方式
EXTI_LineCmd中断线使能

2. 中断线标号

中断线标号解释
EXTI_Line0 ~~ EXTI_Line22中断线0~~中断线22
中断/事件线输入源
EXTI0PX0(X可为A、B、C、D、E、F~~)
EXIT1PX1(X可为A、B、C、D、E、F~~)
EXTI2PX2(X可为A、B、C、D、E、F~~)
EXIT3PX3(X可为A、B、C、D、E、F~~)
EXTI4PX4(X可为A、B、C、D、E、F~~)
EXIT5PX5(X可为A、B、C、D、E、F~~)
EXTI6PX6(X可为A、B、C、D、E、F~~)
EXIT7PX7(X可为A、B、C、D、E、F~~)
EXTI8PX8(X可为A、B、C、D、E、F~~)
EXIT9PX9(X可为A、B、C、D、E、F~~)
EXTI10PX10(X可为A、B、C、D、E、F~~)
EXIT11PX11(X可为A、B、C、D、E、F~~)
EXTI12PX12(X可为A、B、C、D、E、F~~)
EXIT13PX13(X可为A、B、C、D、E、F~~)
EXTI14PX14(X可为A、B、C、D、E、F~~)
EXIT15PX15(X可为A、B、C、D、E、F~~)
EXTI16PVD输出
EXIT17RTC闹钟事件
EXTI18USB OTG FS唤醒事件
EXIT19太网唤醒事件
EXTI20USB OTG HS(在FS中配置)唤醒事件
EXIT21连接到RTC入侵和时间戳事件
EXTI22连接到RTC唤醒事件

3. 中断模式

字段解释
EXTI_Mode_Interrupt中断请求
EXTI_Mode_Event事件请求

4. 触发方式

字段解释
EXTI_Trigger_Falling下降沿触发
EXTI_Trigger_Rising上升沿触发
EXTI_Trigger_Rising_Falling上升沿与下降沿触发

5. 中断服务函数名

字段解释
EXTI0_IRQHandler中断线0服务函数
EXTI1_IRQHandler中断线1服务函数
EXTI2_IRQHandler中断线2服务函数
EXTI3_IRQHandler中断线3服务函数
EXTI4_IRQHandler中断线4服务函数
EXTI9_5_IRQHandler中断线5 ~ 9服务函数
EXTI15_10_IRQHandler中断线10 ~ 15服务函数

二. 外部中断配置

1. 配置时钟与建立引脚与中断线联系

操作调用函数/结构体
开启SYSCFG时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
设置IO与中断线映射关系SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOx,EXTI_PinSource0)

2.配置GPIO为输入

详解GPIO笔记

3.配置EXTI_InitTypeDef结构体

操作调用函数/结构体
定义外部中断配置结构体EXTI_InitTypeDef
配置中断线标号EXTI_Line
配置中断模式EXTI_Mode
配置触发方式EXTI_Trigger
使能中断线EXTI_LineCmd
初始化外部中断配置EXTI_Init(&EXTI_InitStructure);

4. 配置NVIC中断结构体

详解NVIC笔记

5. 编写中断服务函数

操作函数
判断外部中断发生EXTI_GetITStatus(中断线标号)
清除中断标志位EXTI_ClearITPendingBit(中断线标号);

2. 例

配置PB14为外部中断

void exti_init(void)
{
    //配置GPIOB_14引脚为输入
    //使能GPIO时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
    //定义GPIO_InitTypeDef 结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    //选择引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    //配置工作模式为输入模式
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 
    //配置工作频率
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    //配置上拉模式
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    //初始化IO参数
    GPIO_Init(GPIOF,&GPIO_InitStructure);
    
    //使能时钟
    //使能SYSCFG时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
    //建立中断线14与PB14连接
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource14);
    
    //配置EXTI外部中断结构体
    //定义结构体
    EXTI_InitTypeDef EXTI_InitStructure;
    //配置外部中断线14
    EXTI_InitStructure.EXTI_Line = EXTI_Line14;
    //配置模式为中断请求
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    //配置触发方式为下降沿触发
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    //使能外部中断
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    //配置外部中断
    EXTI_Init(&EXTI_InitStructure);
    
    //配置NVIC结构体
    //定义结构体
    NVIC_InitTypeDef NVIC_InitStructure;
    //配置中断源为外部中断15~10
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10IRQn;
    //配置抢占优先级
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    //配置响应优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    //使能中断通道
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    //配置中断参数
    NVIC_Init(&NVIC_InitStructure);
    
}

//中断服务函数
void EXTI15_10_IRQHandler(void{
    //判断外部中断14是否发生
    if(EXTI_GetITStatus(EXTI_Line14) != RESET)
	{
        //清除中断标志位
		 EXTI_ClearITPendingBit(EXTI_Line13);
	 }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值