zoukankan      html  css  js  c++  java
  • EXTI 外部中断

    整理自:正点原子PPT

    1 简介

    STM32F4的每个IO都可以作为外部中断输入,STM32F4的中断控制器支持23个外部中断/事件请求。

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

    EXTI线16:连接到PVD输出。

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

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

    EXTI线19:连接到以太网唤醒事件。

    EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件。

    EXTI线21:连接到RTC入侵和时间戳事件。

    EXTI线22:连接到RTC唤醒事件。

    每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

    虽然只有16个给IO口使用的中断线,但是我们可以使用响应的映射函数来让中断线和IO口实现对应。

    (注意:同一时间对于同一中断线,有且仅能有一个IO口与之相对应)

    是不是16个中断线就可以分配16个中断服务函数呢?

    不是,IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数

    2SQbPP.png

    从表中可以看出,外部中断线5—9分配一个中断向量,共用一个服务函数外部中断线10—15分配一个中断向量,共用一个中断服务函数。

    中断函数列表

    EXTI0_IRQHandler           
    EXTI1_IRQHandler
    EXTI2_IRQHandler           
    EXTI3_IRQHandler           
    EXTI4_IRQHandler           
    EXTI9_5_IRQHandler         
    EXTI15_10_IRQHandler       
    
    

    2 外部中断配置步骤

    1、使能SYSCFG时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟
    

    2、设置IO口与中断线的映射关系(记得先初始化GPIO)

    void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex);
    

    eg:

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//将PE2连接到外部中短线2上面
    

    3、初始化中断线,设置触发条件

    void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    

    这里也是需要传递一个结构体参数进去,该结构体定义如下:

    typedef struct
    {
      uint32_t EXTI_Line;   //指定要配置的中断线           
      EXTIMode_TypeDef EXTI_Mode;   //模式:事件 OR中断
      EXTITrigger_TypeDef EXTI_Trigger;//触发方式:上升沿/下降沿/双沿触发
      FunctionalState EXTI_LineCmd;  //使能 OR失能
    }EXTI_InitTypeDef;
    
    

    eg:

      /* 配置EXTI_Line0 */
      EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能
      EXTI_Init(&EXTI_InitStructure);//配置
    	
    	/* 配置EXTI_Line2,3,4 */
    	EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line4;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能
      EXTI_Init(&EXTI_InitStructure);//配置
    

    4、记住EXTI配置完毕后还要配置NVIC的优先级

    5、编写中断服务函数。

    EXTIx_IRQHandler();
    

    6、函数调用完毕后记得清除中断标志位

    EXTI_ClearITPendingBit();
    
  • 相关阅读:
    关于求 p_i != i and p_i != i+1 的方案数的思考过程
    poj 3041 Asteroids 二分图最小覆盖点
    poj 1325 Machine Schedule 最小顶点覆盖
    poj 1011 Sticks 减枝搜索
    poj 1469 COURSES 最大匹配
    zoj 1516 Uncle Tom's Inherited Land 最大独立边集合(最大匹配)
    Path Cover (路径覆盖)
    hdu 3530 SubSequence TwoPoint单调队列维护最值
    zoj 1654 Place the Rebots 最大独立集转换成二分图最大独立边(最大匹配)
    poj 1466 Girls and Boys 二分图最大独立子集
  • 原文地址:https://www.cnblogs.com/mudrobot/p/14810130.html
Copyright © 2011-2022 走看看