历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2018年10月21日 | STM32学习之:外部中断

发布者:huanguu 来源: eefocus关键字:STM32  外部中断 手机看文章 扫描二维码
随时随地手机看文章

STM32 GPIO外部中断总结

一、STM32中断分组:


  STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32F103中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为:

线 0~15:对应外部 IO 口的输入中断。

GPIO引脚中断标志位中断处理函数
PA0~PG0EXTI0EXTI0_IRQHandler
PA1~PG1EXTI1EXTI1_IRQHandler
PA2~PG2EXTI2EXTI2_IRQHandler
PA3~PG3EXTI3EXTI3_IRQHandler
PA4~PG4EXTI4EXTI4_IRQHandler
PA5~PG5EXTI5EXTI9_5_IRQHandler
PA6~PG6EXTI6
PA7~PG7EXTI7
PA8~PG8EXTI8
PA9~PG9EXTI9
PA10~PG10EXTI10EXTI15_10_IRQHandler
PA11~PG11EXTI11
PA12~PG12EXTI12
PA13~PG13EXTI13
PA14~PG14EXTI14
PA15~PG15EXTI15

 

 

 

 

 

 

 

 

 

 

 

 

 

 



线 16:连接到 PVD 输出。


线 17:连接到 RTC 闹钟事件。


线 18:连接到 USB 唤醒事件。


 


二:外部中断的配置过程:


  1、配置触发源GPIO口:


  因为GPIO口作为触发源使用,所以将GPIO口配置成输入模式,触发模式有以下几种:


  a.GPIO_Mode_AIN ,模拟输入(ADC模拟输入,或者低功耗下省电)


  b.GPIO_Mode_IN_FLOATING ,浮空输入


  c.GPIO_Mode_IPD ,带下拉输入


  d.GPIO_Mode_IPU ,带上拉输入 



  GPIO_InitTypeDef GPIO_InitStructure;//定义结构体


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能时钟


  GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;//选择IO口   PE2


  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//设置成上拉输入


  GPIO_Init(GPIOE, &GPIO_InitStructure);//使用结构体信息进行初始化IO口



  2、使能AFIO复用时钟功能:


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 

  


  3、将GPIO口与中断线映射起来: 


  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

 


  4、中断线上进行中断初始化: 


  EXTI_InitTypeDef EXTI_InitStructure;//定义初始化结构体


  EXTI_InitStructure.EXTI_Line=EXTI_Line2; //中断线的标号 取值范围为EXTI_Line0~EXTI_Line15


  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式,可选值为中断 EXTI_Mode_Interrupt 和事件 EXTI_Mode_Event。


  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发方式,可以是下降沿触发 EXTI_Trigger_Falling,上升沿触发 EXTI_Trigger_Rising,或者任意电平(上升沿和下降沿)触发EXTI_Trigger_Rising_Falling


  EXTI_InitStructure.EXTI_LineCmd = ENABLE;


  EXTI_Init(&EXTI_InitStructure);//根据结构体信息进行初始化


 


  5、中断优先级配置: 



  NVIC_InitTypeDef NVIC_InitStructure;//定义结构体


  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能外部中断所在的通道


  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2, 


  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级 2


  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 


  NVIC_Init(&NVIC_InitStructure); //根据结构体信息进行优先级初始化 


 


  6、外部中断服务函数的编写:


  外部中断函数分别为:


  EXPORT   EXTI0_IRQHandler          


  EXPORT   EXTI1_IRQHandler       


  EXPOR T   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 EXTI2_IRQHandler(void)

  {

    if(EXTI_GetITStatus(EXTI_Line2)!=RESET)//判断某个线上的中断是否发生 


    {

      中断逻辑…

      EXTI_ClearITPendingBit(EXTI_Line2);   //清除 LINE 上的中断标志位

    }     

  }


 


三、关于使用GPIO口接按键进行外部中断的配置说明:


  使用按键进行外部中断的时候,一般都需要进行按键延时消抖以及松手检测的相关处理,中断函数可以参看以下代码:


  void EXTI2_IRQHandler(void)

  {

    delay_ms(10);//延时消抖

    if(KEY2==0)    //按键真的被按下

      {

        LED0=!LED0;

      }

    while(KEY2!=0);//等待松手

    EXTI_ClearITPendingBit(EXTI_Line2); //清楚中断标志位 

  }


  当然,如果你的按键是允许长按功能的,那么就进行别的逻辑操作,这里不作研究。


关键字:STM32  外部中断 引用地址:STM32学习之:外部中断

上一篇:STM32学习之:STM32F4XX的三大主体部分
下一篇:STM32学习之:FMC-扩展外部SDRAM

推荐阅读

产品唯一的身份标识的作用: ● 用来作为序列号(例如USB字符序列号或者其他的终端应用); ● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性; ● 用来激活带安全机制的自举过程; 96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一...
汇编语言指令的基本构成 显然汇编指令由操作数和操作码组成。 1、那什么是操作码呢? 操作码:指明CPU要执行什么样的操作。是一条指令必不可少的部分,在汇编语言中用助记符表示。 2、什么是操作数呢? 操作数:指明参与操作的数据或数据所在的地方。 3、寻址方式 因此寻址方式就是指在汇编语言中需指明操作数所在的地方。MSP430共有七种寻址方式。 使...
10月20日晚消息,今天大疆正式发布了全新口袋智能小相机DJI Pocket 2,售价2499元起。  DJI Pocket 2 延续上一代 OSMO Pocket 极简低调的外观设计,小巧便携的产品形态,整机重量仅为117g。在1080P视频拍摄情况下,具备140分钟超强续航。 Pocket 2采用DJI先进的云台增稳技术,搭载1/1.7英寸CMOS传感器,最高可稳定拍摄 4K ...
今日,小米官宣 Redmi Note 11 系列手机将于 10 月 28 日 19:00 正式发布。  据 Redmi 官方微博,全新 Redmi Watch 2 将与 Redmi Note11 同场发布。  Redmi 官方还称,Redmi Watch 2 在屏幕、运动、健康、颜值、体验、充电等方面都有升级。Redmi Watch 2 将于今日晚间 8 点开启订金预售。  IT之家了解到,在...

史海拾趣

问答坊 | AI 解惑

06英特尔杯获奖者美国之行游记

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 上帝的玩笑 ——记我这意外的美国之行 文章出处:西南交通大学 信息科学与技术学院 刘金柱 其实我曾幻想过去美国,但不过是以一些很平常的方式,比如说留学呀、出国旅游呀,再不就是做访问学 ...…

查看全部问答∨

单片机与TCP/IP网络(ISA总线接口定义)

ISA ISA=Industry Standard Architecture (isa总线) Pin Name Description 引脚 名称 含义 A1 /I/O CH CK I/O channel check; active low=parity error A2 D7 Data bit 7 A3 D6 Data bit 6 A4 D5 Data bit 5 A5 D4 Data bit 4 A6 ...…

查看全部问答∨

windows下能开发linux的驱动嘛?

我是初学者,不想装linux,不知道有没有办法在windows下开发linux的驱动啊,那位知道的蝈蝈帮忙指点下,谢谢…

查看全部问答∨

Windows Mobile 中有没有免提键的虚拟码

如题,如果没有的话,怎么做才能实现免提的功能?…

查看全部问答∨

用595驱动16*16点阵遇到很奇怪的问题,实在没检查出问题,在线等

这是程序 #include sbit ser = P3^7; sbit OE = P3^6; sbit RCK = P3^5; sbit SCK = P3^4; sbit G1 = P2^0; sbit G2 = P2^1; char code tab[]= {         0x02,0x00,0x04,0x00,0x1F,0xFF,0xE0,0x00,       ...…

查看全部问答∨

关于Tab Control的问题(win32),急~~~~~~~~~~

如何在WIN32的开发环境下,为TAB CONTROL控件的各个页面添加控件,比如在PAGE加一个LABEL,在PAGE2加一个EDIT BOX,谢谢!…

查看全部问答∨

HDL实现视频编解码

现在想的到一个关于视频编解码的HDL/SYSTEMC 的程序代码,不知那位愿帮忙一下?…

查看全部问答∨

电机星-三角转换时的转向问题

电机在星形时是(假定)正转,转换到三角形时会不会反转?如果发生这样的情况怎么样调方向?我说的是假设,在实际中我也没遇到。从电机学来说 这种情况是不是根本就不会发生?困扰了我好久,谢谢!…

查看全部问答∨

DSP包含BIOS系统工程编译出错!

用CCSv4.0编译包含bios系统的工程,出现如下错误: fatal error: file \"D:/Program Files/Texas   Instruments/bios_5_41_02_14/packages/ti/bios/lib/bios.a28FP<clk.o28FP>\"   specifies ISA revision \"C28FPU32\", ...…

查看全部问答∨

430学习经验

1.首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。   0-0xf特殊功能寄存器;0x1 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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