历史上的今天
返回首页

历史上的今天

今天是:2024年09月28日(星期六)

2019年09月28日 | STM32F2系列的EXTI使用

2019-09-28 来源:eefocus

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);


  }


}

推荐阅读

史海拾趣

DBM REFLEX公司的发展小趣事

在全球环保意识日益增强的今天,DBM REFLEX积极响应可持续发展的号召。公司不仅在生产过程中注重环保和节能,还积极推广绿色产品和技术。同时,DBM REFLEX还积极参与社会公益事业,通过捐款捐物等方式回馈社会。这种对环保和社会责任的关注,使DBM REFLEX在电子行业树立了良好的企业形象。

Arctic Silicon Devices公司的发展小趣事

在电子行业的发展过程中,创新合作是推动产业进步的重要动力。Arctic Silicon Devices积极与高校、科研机构等合作,共同开展技术研发和人才培养。通过共享资源、互通有无,公司不仅获得了更多的创新灵感和技术支持,还推动了整个电子行业的技术进步和产业升级。

DMEL Inc公司的发展小趣事

为了提升产品质量和用户体验,DMEL Inc不断加大对生产过程的管控力度。公司引进了先进的生产设备和管理系统,建立了严格的质量检测体系。同时,DMEL Inc还加强了与供应商的合作,确保原材料的质量和供应的稳定性。这些措施的实施,使得DMEL Inc的产品质量得到了显著提升,赢得了消费者的信赖和好评。

Exel Microelectronics Inc公司的发展小趣事

随着全球对环保问题的日益关注,Exel Microsystems Inc公司也积极响应,履行环保责任。公司在XXXX年开始实施绿色生产战略,通过采用环保材料、优化生产流程等措施,降低了生产过程中的能耗和废弃物排放。此外,Exel还积极参与环保公益活动,推动行业和社会的可持续发展。这些举措不仅彰显了公司的社会责任感,也为公司赢得了良好的社会声誉。

奇力新(chilisin)公司的发展小趣事

奇力新公司自创立之初,就专注于电感器的研发与生产。创始人凭借对电感技术的深入理解和市场需求的敏锐洞察,确定了公司的发展方向。在创业初期,奇力新积极引进先进的生产设备和技术人才,建立了一套完整的技术研发和生产体系。通过不断的技术积累和创新,奇力新逐渐在电感器领域取得了领先地位。

台湾第一电阻(Firstohm)公司的发展小趣事
电冰箱发出异常声音可能是由多种原因引起的,如压缩机工作声音、制冷剂流动声音、风扇转动声音等。如果声音过大或异常,可能是部件松动、磨损或故障等原因引起的。此时应停止使用电冰箱,并请专业人员进行检查和维修。

问答坊 | AI 解惑

【EEWORLD模块整理】+LCD12864

本帖最后由 paulhyde 于 2014-9-15 03:37 编辑 好东西应该分享,现将带字库液晶FYD12864显示模块分享,如下  …

查看全部问答>

怎么管理两个AP,动态地让其中一个在前台,一个在后台这样动态切换?

怎么管理两个AP,动态地让其中一个在前台,一个在后台这样动态切换?…

查看全部问答>

请问下串口通信,怎样能实现自适波特率通信

请问下串口通信,怎样能实现自适波特率通信。 即在一端用软件接收通过串口发送过来的数据,但是波特率是不定的。 请问怎样实现自适波特率通信?…

查看全部问答>

请教PCB自动布线问题

快疯了,高手来指点一下吧!谢谢了! 画完原理图后生成网络表并自动布局一次后修改了原理图,之后不管怎么改生成的网络表都是最初的原理图的网络表,这是怎么回事啊????有没有谁遇到过这种情况啊????????…

查看全部问答>

在usb过滤驱动中使用3des加密算法的问题

在usb过滤驱动中使用3des加密,但是解密出来的字符不正确。 同样的算法代码在windows应用程序中使用时是没有问题的,不知道问题出在哪里?为什么3des在驱动里面会出错呢?…

查看全部问答>

如何简单的方法判断所播出的电话对方接听了

我用单片机和电话拨号芯片,拨号后怎么知道对方是否忙音?是否接听?一般回铃声和彩铃有不同吗?…

查看全部问答>

WinCE 5.0 流驱动的访问问题

大家好: 现在有这样的一个疑问: 写了一个流驱动: 在其AAA_Read()中有WaitforSingleObject(); 那么在应用程序的一个单独线程A通过文件系统函数ReadFile调用时,会访问AAA_Read()从而发生阻塞。这时,在WaitforSingleObject()没有返回,就是R ...…

查看全部问答>

三极管大全 蛮实用的

本帖最后由 paulhyde 于 2014-9-15 09:40 编辑 三极管大全 蛮实用的,允许我赚点小钱啊,多多包涵  …

查看全部问答>

ATMEGA16与NRF24L01

这阵子搞了NRF24L01与ATmega16之间的通信,不知道程序有没有问题,只有上电那刻接收模块两个LED才会亮,把发送模块电源关掉,LED还是会亮,还有复位了接收模块后,接收模块的LED都不亮,模块都是自己焊的,没有PCB,不知道是硬件还是软件出问题了, ...…

查看全部问答>