S.D.LuSTM32学习笔记外部中断实验.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
S.D.LuSTM32学习笔记外部中断实验

PAGE  PAGE - 8 - S.D.Lu的STM32学习笔记(7)外部中断实验 概述: 中断的应用是单片机初学者遇到的第一道最难的障碍。个人认为,是否掌握中断的使用方法也可以作为是否已经入门的判断依据。 ARM Coetex-M3内核的中断系统很庞大,支持多达240个中断通道(不包含16个CM3的中断线)。但是STM32并没有使用CM3核的所有资源,目前STM32(非互联型)可支持60个中断通道,互联型支持68个。 本篇笔记将从较容易学习的外部中断入手,详细描述STM32的中断编程方法及步骤。 由于STM32外部中断的设置相对于51、AVR等单片机来说要复杂,所以在实验之前先沿着信号路径对相关寄存器进行介绍和分析。 STM32外部中断: STM32有20个外部中断源,如下: 16个GPIO输入中断; PVD输出; RTC闹钟事件; USB唤醒事件; 以太网唤醒事件(只适用于互联型产品)。 (本篇讨论的是16个GPIO输入中断。) GPIO输入中断虽然有16个输入通道,但是只占用了7个中断向量。EXTI0~EXTI4各占用一个中断向量,EXTI5~9共用一个,EXTI10~15共用一个。所以在编程的时候EXTI5~9将共用一个中断函数,EXTI10~15共用一个中断函数。 这16个外部中断和GPIO的映射图如下。 由上图可以看出,这16个中断的输入引脚是可以由用户自己重新定义的。当然是有限制的,例如:EXTI0通道,只能选择PA0,PB0,PC0,PD0,PE0,PF0,PG0这7个引脚中的一个;而EXTI1只能选择名称为Px1的7个引脚中的一个(x可取A~G中的一个);依次类推,EXTI2只能选择Px2引脚;……。具体选择那个引脚,可由寄存器AFIO_EXTICRx(x可取1~4)的相应位设置。具体操作可参考本文后面的程序。 上图说明了EXTIx的输入通道选择方法,下面将介绍相关内部寄存器的作用及配置。 上图是外部中断/事件控制器的框图。该框图涉及6个寄存器,(按信号路径)分别是: 下降沿触发选择寄存器(EXTI_FTSR); 上升沿触发选择寄存器(EXTI_RTSR); 软件中断事件寄存器(EXTI_SWIER); 挂起寄存器(EXTI_PR); 中断屏蔽寄存器(EXTI_IMR); 事件屏蔽寄存器(EXTI_EMR)。 为了便于理解,我们先将上图简化。 首先,左下角的“脉冲发生器”和“事件屏蔽寄存器”是用于产生事件脉冲信号的,为其它外设模块提供触发信号。在本??笔记我们不涉及该内容,可将这部分模块忽略。欲了解中断和事件的区别,看参考《STM32中外部中断与外部事件》一文。 其次,中间的“软件中断事件寄存器”的作用是,为用户提供一个通过软件产生中断的途径,在此也可暂时忽略。 “请求挂起寄存器”其实就是中断标志寄存器。 简化后得到下图: 所以,在外部中断控制器部分我们只需要操作4个寄存器即可: 下降沿触发选择寄存器(EXTI_FTSR); 上升沿触发选择寄存器(EXTI_RTSR); 挂起寄存器(EXTI_PR); 中断屏蔽寄存器(EXTI_IMR)。 简化框图中,最左边的箭头“至NVIC中断控制器”,指向下一个中断处理模块。 NVIC的全称是嵌套向量中断控制器。这是STM32外部中断设置最难理解的部分。 NVIC对CM3核支持的所有240个通道的中断嵌套进行控制。 我们先了解NVIC的相关寄存器。打开固件库的头文件core_cm3.h,查找“NVIC”,找到如下结构体定义: 由NVIC的结构体定义可以知道,其中有7个可用的寄存器组: __IO uint32_t ISER[8]:中断使能设置寄存器组; __IO uint32_t ICER[8]:中断使能清除寄存器组; __IO uint32_t ISPR[8]:中断挂起设置寄存器组; __IO uint32_t ICPR[8]:中断挂起清除寄存器组; __IO uint32_t IABR[8]:中断激活位寄存器组; __IO uint8_t IP[240]: 中断优先级寄存器组,8bit宽度; __O uint32_t STIR: 软件触发中断寄存器组。 这些寄存器的功能描述可参考《Cortex-M3技术参考手册》(广州周立功公司)第8章。 STM32最多只有68个中断通道,所以没有使用上述的全部寄存器。 对各个中断的优先级设置就是通过写这些寄存器组完成的。需要说明一点,STM32的中断优先级寄存器只用了8位宽度的高4位,而这4位的意义则由寄存器AIRCR的[10:8]这3个位的设置决定。AIRCR寄存器的说明请参考《Cortex-M3技术参考手册》正文第83~84页。AIRCR被定义在SCB_Type结构体中,在core_cm3.h第

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档