的使用 STM32外部中断的使用——让你的程序更加高效

目录

外部中断简述

什么是外部中断

传统单片机与新型单片机外部中断区别

 STM32外部中断请求

STM32中断线与IO口的对应 

STM32 中断服务函数 

外部中断与中断服务函数的对应

 中断服务函数列表 

STM32外部中断程序编写

常用的库函数

外部中断的一般配置步骤 


外部中断简述

什么是外部中断

  • 当某种外部事件发生时,单片机的中断系统将迫使 CPU 暂停正在执行的程序从而进行中断事件的处理,中断事件处理完毕后,又返回被中断的程序处,继续执行
  • 注:外部事件具体是指: 上升沿 、 下降沿 、 低电平 等 

    传统单片机与新型单片机外部中断区别

    51单片机 stm32单片机
    两个IO口进行外部中断 全部IO口都可以作为外部中断
    固定IO口 映射到IO端口 

     STM32外部中断请求

    STM32的中断控制器支持19个外部中断/事件请求

  • 线 0~15 :对应外部IO口的输入中断
  • 线16 :连接到PVD输出
  • 线17 :连接到RTC闹钟事件
  • 线18 :连接到USB唤醒事件
  • STM32中断线与IO口的对应 

     

  • 每个IO口都可以对应作为中断,几个IO口为一组映射到一个中断线上
  • 在同一时间,同一组中,只能有一个IO口映射到中断线
  • 例:PB0 与 PA0 不可映射到同一中断线

    STM32 中断服务函数 

    外部中断与中断服务函数的对应

    注:上面是正点原子图,少一个EXTI0 

    IO口外部中断只有7个中断服务函数

  • EXTI0~EXTI4 分别对应一个中断服务函数
  • EXTI5~EXTI9 对应一个中断服务函数 
  • EXTI10~EXTI15 对应一个中断服务函数
  •  中断服务函数列表 

  • EXTI0_IRQHandler          
  • EXTI1_IRQHandler
  • EXTI2_IRQHandler          
  • EXTI3_IRQHandler          
  • EXTI4_IRQHandler          
  • EXTI9_5_IRQHandler        
  • EXTI15_10_IRQHandler 
  • STM32外部中断程序编写

    常用的库函数

    void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
    //设置IO口与中断线的映射关系
    
    exp:  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
    
    
    /******EXTI_Init函数******/
    
    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;
    
    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);	
    
    /***********************/
    
    
    ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
    //判断中断线中断状态,是否发生
    
    void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
    //清除中断线上的中断标志位
    

    外部中断的一般配置步骤 

    /*初始化IO口为输入*/
    GPIO_Init();
    /****************/
    
    
    /*开启IO口复用时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    /****************/
    
    /*设置IO口与中断线的映射关系*/
    void GPIO_EXTILineConfig();
    /***************/
    
    /*初始化线上中断,设置触发条件等*/
    EXTI_Init();
    /***************/
    
    /*配置中断分组(NVIC),并使能中断*/
    NVIC_Init();
    /***************/
    
    /*编写中断服务函数*/
    EXTIx_IRQHandler();
    /***************/
    
    /*清除中断标志位*/
    EXTI_ClearITPendingBit();
    /***************/
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » 的使用 STM32外部中断的使用——让你的程序更加高效

    发表评论