STM32学习--外部中断

来源:互联网 发布:好看的耽美文知乎 编辑:程序博客网 时间:2024/05/19 20:46

  先聊聊题外话,学习STM32,我大多从了解功能、框图到寄存器定义,然后在使用方法、配置步骤。其实配置时使用库函数是相当方便的,甚至可以不用看寄存器,但为深入了解一下,有时还是会多看看,而了解其方法脉络后再使用库函数更方便,只需查相应的库函数手册即可。

1. 概述

  STM32的外部中断资源丰富、使用灵活。在F1系统中最多有20个中断源(互联网型,其他类型有19个)。EXTI0~ EXTI15给IO口使用,EXTI16~ EXTI18分别分配给RTC、PVD、USB。可检测脉冲宽度低于APB2时钟宽度的外部信号。
这里写图片描述
  如图所示,IO口通过线路映像对输入线上,边沿检测电路检测到输入线上有上升沿或下降沿的信号时会请求挂起,相应中断/事件开启后,会响应中断或事件。软件对软件中断寄存器置位也会引起挂起,若相应中断/事件开启,也会响应中断或事件。
  这里写图片描述
  映射IO口和中断线的关系是每组IO(GPIOA、GPIOB。。。。。。。)对应的位只映射对应的中断线上。如PA0 、PB0只能在EXTI0 上,PA1 、PB1只能在EXTI1 上…….但具体是哪组GPIO是可选的。如下图。EXTI线16连接到PVD输出, EXTI线17连接到RTC闹钟事件, EXTI线18连接到USB唤醒事件, EXTI线19连接到以太网唤醒事件(只适用于互联型产品)。

2. 事件与中断

由上述可知事件与中断的来源都一样也就是相应的挂起,比如IO口接收到一个上升/丁降沿,这个信号被检测到后会产生对应的挂起。如果这个挂起之后的处理需要CPU参与(比如点亮一个LED,发个信号)那么需使用中断,在中断函数中增加代码,CPU处理。如不需CPU介入,直接对其他外设提供一个通知信号(如DMA、TIM、ADC采样等)则可使用事件的方式。

3. 寄存器

在设置外部中断中有几个寄存器需了解:
外部中断配置(AFIO_EXTICRx): 用来配置IO与中断线映射关系;
中断屏蔽寄存器(EXTI_IMR): 使能/关闭对应输入线上中断;
事件屏蔽寄存器(EXTI_EMR):使能/关闭对应输入线上事件;
上升沿触发选择寄存器(EXTI_RTSR)、下降沿触发选择寄存器(EXTI_FTSR):选择触发沿,可以上升下降均使能,即边沿均可产生中断,但不能设置高、低电平中断。
软件中断事件寄存器(EXTI_SWIER):置对应位,会在对应线上产生挂起。
挂起寄存器(EXTI_PR):发生挂起,对应位为1,对该位写1可以清除该位。

4. 使用外部中断步骤

使用外部中断步骤:
① 初始化IO,(设置输入模式、使能GPIO时钟、AFIO时钟);
② 设置IO与中断线的映射(操作AFIO EXTICRx);
③ 开启对应的外部中断线上的事件/中断,设置触发沿;
④ 配置NVIC,使能中断;
⑤ 编写中断函数。

0 0
原创粉丝点击