STM32F2系列的EXTI使用

发布者:笑脸猫最新更新时间:2019-09-28 来源: eefocus关键字:STM32F2系列  EXTI使用 手机看文章 扫描二维码
随时随地手机看文章

1.外部中断事件线的映射


140个GPIO连接到了16个外部中断/事件线,如下图所示:

GPIO与外部中断/事件线关联图


另外7个外部中断/事件线分别连接:


EXTI Line 16:PVD输出;


EXTI Line 17:RTC报警事件;


EXTI Line 18:USB OTG FS唤醒事件;


EXTI Line 19:以太网唤醒事件;


EXTI Line 20:USB OTG HS唤醒事件;


EXTI Line 21:RTC Tamper and TimeStamp事件


EXTI Line 22:RTC唤醒事件。


2.EXTI与SYSCFG(System configurationcontroller)关系


SYSCFG主要用于重新定位存储器在代码空间的位置,用于选择以太网的PHY和管理外部中断线与GPIO的联系。


如下图所示,用于配置外部中断并连接到EXTI外部中断。

3.EXTI初始化


voidKEY_EXTI_Initialize(void)


{


       EXTI_InitTypeDef EXTI_InitStructure;


       GPIO_InitTypeDef GPIO_InitStructure;


       NVIC_InitTypeDef NVIC_InitStructure;


 


    /* Enable GPIOC clock */


      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);


      /* Enable SYSCFG clock */


      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);


 


       /* Configure PC2 pin as input floating */


      GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN;


      GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_NOPULL;


      GPIO_InitStructure.GPIO_Pin= GPIO_Pin_2;


      GPIO_Init(GPIOC,&GPIO_InitStructure);


 


       /* Connect EXTI Line2 to PC2 pin */


      SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource2);


 


       /* Configure EXTI Line2 */


      EXTI_InitStructure.EXTI_Line= EXTI_Line2;


       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;


      EXTI_InitStructure.EXTI_Trigger= EXTI_Trigger_Falling; 


      EXTI_InitStructure.EXTI_LineCmd= ENABLE;


      EXTI_Init(&EXTI_InitStructure);


 


     /*Enable and set EXTI Line2 Interrupt to the lowest priority */


       NVIC_InitStructure.NVIC_IRQChannel =EXTI2_IRQn;


      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0x0F;


      NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x0F;


      NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;


      NVIC_Init(&NVIC_InitStructure);


}


3.1.使能作为外部中断的引脚的GPIO端口时钟


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);


3.2.使能SYSCFG时钟


RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);


3.3.初始化GPIO引脚


GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;


      GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_NOPULL;


      GPIO_InitStructure.GPIO_Pin= GPIO_Pin_2;


      GPIO_Init(GPIOC,&GPIO_InitStructure);


3.4.连接引脚到外部中断线


SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource2);


说明:每个引脚对应相应的线,如GPIO1则对应EXTI_PinSource1,查看1中的图。


3.5.配置外部中断线


EXTI_InitStructure.EXTI_Line =EXTI_Line2;


       EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;


      EXTI_InitStructure.EXTI_Trigger= EXTI_Trigger_Falling; 


      EXTI_InitStructure.EXTI_LineCmd= ENABLE;


      EXTI_Init(&EXTI_InitStructure);


3.6.使能中断


NVIC_InitStructure.NVIC_IRQChannel= EXTI2_IRQn;


      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0x0F;


      NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x0F;


      NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;


      NVIC_Init(&NVIC_InitStructure);


记得对IRQChannelPreemptionPriority和IRQChannelSubPriority赋值均为0x0F。


4.      EXTI中断函数


voidEXTI2_IRQHandler(void)


{


  if(EXTI_GetITStatus(EXTI_Line2) != RESET)


  {


    /* LED1闪烁标识符 */


    LED1_flag = 1;


 


    /* LED1闪烁次数 */


       LED1_Twinkle_Num = 2*Twinkle_Num;


 


       g_OD.Position_Offset =g_OD.current_angle;


   


    /* Clear the EXTI line 0 pending bit */


    EXTI_ClearITPendingBit(EXTI_Line2);


  }


}

关键字:STM32F2系列  EXTI使用 引用地址:STM32F2系列的EXTI使用

上一篇:关于STM32库函数中,u8_u16_等的定义
下一篇:STM32开发环境(MDK)搭建及第一个项目工程

推荐阅读最新更新时间:2024-11-13 17:49

stm32学习笔记——外部中断使用
基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能再使用了。在此情况下,我们只能使用类似于PB1,PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0-EXTI4这5个外部中断有着自己单独的中断响应函数,EXIT5-EXIT9共用一个中断响应函数,EXIT10-EXIT15共用一个中断响应函数。 对于中断的控制,stm32有一个专用的管理机构:NVIC。对于NVIC的详细解释,可以参考《AR
[单片机]
嵌入式开发之STM32开发之EXTI中断使用及踩坑
关键点 中断配置,中断触发 中断配置 中断必然要绑定一个触发中断的外部I/O口,这里我选PA0,对应EXIT0,因为PA0正好对应我板子上的K3键,我需要K3键去触发这个中断 GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* config the extiline(PB0) clock and AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);//GPIOA根据你自己板子设定
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved