单片机
返回首页

STM32F4 EXTI外部中断(一)

2022-06-14 来源:eefocus

STM32中共有23根中断总线

image.png

image.png

外部中断配置步骤

1.使能IO时钟,初始化IO为输入

详见[https://blog.csdn.net/conjurer_yft/article/details/106963994]


2.开启SYSCFG时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟


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

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);

参数1:端口组 EXTI_PortSourceGPIOA,

EXTI_PortSourceGPIOB,

EXTI_PortSourceGPIOC ~~~

参数2:中断线:EXTI_PinSource0 ~ EXTI_PinSource15


4.初始化中断

1.定义中断结构体

EXTI_InitTypeDef EXTI_InitStructure;


2.配置中断线标号

EXTI_InitStructure.EXTI_Line=中断线号;

中断线号:取值范围为EXTI_Line0~EXTI_Line15 //外部中断线0~15


3.配置中断模式

EXTI_InitStructure.EXTI_Mode = 中断模式;

中断模式:

EXTI_Mode_Interrupt //设置EXIT为中断请求

EXTI_Mode_Event //设置EXIT为事件请求


4.配置触发方式

EXTI_InitStructure.EXTI_Trigger =触发方式;

触发方式:

EXTI_Trigger_Falling //下降沿触发

EXTI_Trigger_Rising //上升沿触发

EXTI_Trigger_Rising_ Falling //上升沿和下降沿触发


5.使能中断线

EXTI_InitStructure.EXTI_LineCmd = ENABLE;


6.中断初始化

EXTI_Init(&EXTI_InitStructure); //初始化外设EXTI寄存器


5.配置中断分组NVIC

配置优先级分组

|      优先级分组       |   主优先级(抢占优先级)     |  子优先级 (响应优先级) |      描述         |

--------------------------------------------------------------------------

| NVIC_PriorityGroup_0 |      0         |     0-15   |  主-0bit,子-4bit |

| NVIC_PriorityGroup_1 |      0-1       |     0-7    |  主-1bit,子-3bit |

| NVIC_PriorityGroup_2 |      0-3       |     0-3    |  主-2bit,子-2bit |

| NVIC_PriorityGroup_3 |      0-7       |     0-1    |  主-3bit,子-1bit |

| NVIC_PriorityGroup_4 |      0-15      |     0      |  主-4bit,子-0bit |

--------------------------------------------------------------------------*/


配置优先级分组

NVIC_PriorityGroupConfig(优先级分组);


1.定义NVIC结构体

NVIC_InitTypeDef NVIC_InitStructure;


2.配置中断通道

NVIC_InitStructure.NVIC_IRQChannel=中断通道;

中断通道:

EXTI0_IRQn

EXTI1_IRQn

EXTI2_IRQn

EXTI3_IRQn

EXTI9_5IRQn

EXTI5_10IRQn


3.设置抢占优先级

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 抢占优先级


4.设置响应优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 响应优先级


5.使能外部中断通道

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


6.初始化

NVIC_Init(&NVIC_InitStructure);


6.编写中断函数

STM32F4的IO口外部中断函数只有7个,分别为:

EXPORT EXTI0_IRQHandler

EXPORT EXTI1_IRQHandler

EXPORT EXTI2_IRQHandler

EXPORT EXTI3_IRQHandler

EXPORT EXTI4_IRQHandler

EXPORT EXTI9_5_IRQHandler

EXPORT EXTI15_10_IRQHandler

中断线0-4每个中断线对应一个中断函数,中断线5-9共用中断函数EXTI9_5_IRQHandler,中断线10-15共用中断函数EXTI15_10_IRQHandler


编写中断函数

void 外部中断函数(void)

{

}


1. 判断中断发生

EXTI_GetITStatus(中断线)!=RESET


2. 清除中断标志位

EXTI_ClearITPendingBit(中断线);


中断线号:取值范围为EXTI_Line0~EXTI_Line15 //外部中断线0~15


常用外部中断例程

void EXTI15_10_IRQHandler(void)

{

if (EXTI_GetITStatus(EXTI_Line13) != RESET)

{

EXTI_ClearITPendingBit(EXTI_Line13);

}

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 用数字电路CD4069制作的万能遥控轻触开关

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 带有短路保护系统的5V直流稳压电源电路图

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章