精华内容
下载资源
问答
  • 2021-11-27 08:24:01

           STC15系列单片机最多有4个外部中断,有时还是觉得不够用, 如我们用它做自动机的限位保护时就需要多个中断.例如点胶机三轴限位就要6个中断.加上点胶阀操控,上料控制共十几个也不算多。外部中断扩展大致有以下几种方法:

            1. 使用专用芯片,如8259A。

            2. 将内部定时/计数器做计数器使用,设置使其当计数值为1时即触发中断,就可当外部中断用.

            3. 用2的方法可将3路CCP/PCA当成外部中断使用。

            4. 外部中断端口二极管并接输入再加软件查询定位输入源法。由于这种方法占用资源比较少,本人比较喜欢使用,下面用一个实例来简单介绍一下。

            原理图如下:

         4 个I/O口外加一片CD4051与8只1开关二极管将INT0由一个扩展为八个。

        软件实现:首选使能中断及INT0中断,将INT0设置成下降沿触发中断,在中断函数中写出扫描触发中断源的代码,对不同的中断源,写出相应的响应代码。注意:方法4的实时性相对较差,因为输入源扫描,需要一些时间,要求高时,因谨慎选用。

    更多相关内容
  • 下面是一个STM32F030 IO口外部中断应用程序,感兴趣的朋友可以看看。
  • 也就是说,单片机把每个机器周期的S5P2采样到的外部中断线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要
  • 从业十年的工程师为大家总结了关于单片机入门的知识,这节主要介绍了利用外部中断实现模拟串口数据的收发。
  • 51单片机的5大中断源:串行中断、定时中断1、外部中断1、定时中断0、外部中断0;下面一起来学习一下
  • 已知单片机的 P0 接了一位七段数码管,当无外部中断外部中断 0)时,数码 管按 a~g 段依次点亮,不断循环显示;当有外部中断(按钮被按下,P3.2 有下降沿电 压)时,数码管显示状态改为“8”亮灭闪烁显示,亮灭...
  • STM32 的每个 IO 都可以作为外部中断的中断输入,STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状位,每个中断/事件都有独立的触发和屏蔽设置。 STM32F103的 19 个外部中断为: 线 0~15:对应...
  • STM8S003单片机上,用按键做为外部中断触发,实现按键按下LED指示灯翻转效果。
  • 实验二 外部中断 .pdf

    2020-12-18 18:11:38
    中山大学_微机实验
  • 外部中断:达到实时响应处理事件的效果。 目前Ardinuo UNO引脚只有2个,一个是2号,一个是3号 在Ardinuo中中断函数,返回值为空,不能有参数 程序运行截图如下: 当感应到震动后: 这里来看下震动传感器 这里...
  • 外部中断概述

    2021-05-15 12:20:15
    STM32的每个IO都可以作为外部中断输入。 STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到USB唤醒事件。 每个外部...

    STM32的每个IO都可以作为外部中断输入。
    STM32的中断控制器支持19个外部中断/事件请求:
    线0~15:对应外部IO口的输入中断。
    线16:连接到PVD输出。
    线17:连接到RTC闹钟事件。
    线18:连接到USB唤醒事件。

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

    从上面可以看出,STM32供IO使用的中断线只有16个,但是STM32F10x系列的IO口多达上百个,STM32F103ZET6(112),STM32F103RCT6(51),那么中断线怎么跟io口对应呢?
    在这里插入图片描述
    以STM32F103ZET6(112)为例,它有七组端口,每组16个GPIO口,那么
    GPIOx.0映射到EXTI0
    GPIOx.1映射到EXTI1

    GPIOx.15映射到EXTI15

    是不是16个中断线就可以分配16个中断服务函数呢?
    IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数在这里插入图片描述
    从表中可以看出,外部中断线5~9分配一个中断向量,共用一个服务函数
    外部中断线10~15分配一个中断向量,共用一个中断服务函数。
    中断服务函数“名”可在启动文件中查找

    外部中断常用库函数
    ①void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
    //设置IO口与中断线的映射关系

    exp: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

    ②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);
    //清除中断线上的中断标志位

    外部中断的一般配置步骤:
    1.初始化IO口为“输入”。
    GPIO_Init();

    2.开启IO口复用时钟。
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

    3.设置IO口与中断线的映射关系。
    void GPIO_EXTILineConfig();

    4.初始化线上中断,设置触发条件等。
    EXTI_Init();

    5.配置中断分组(NVIC)。
    NVIC_Init();

    6.编写中断服务函数。
    EXTIx_IRQHandler();

    7.清除中断标志位
    EXTI_ClearITPendingBit();

    stm32按键硬件连接
    在这里插入图片描述
    PA0 下拉输入
    PC5 上拉输入
    PA15 上拉输入

    展开全文
  • 目录一、中断和异常二、NVIC和EXTI1、嵌套向量中断控制器(NVIC)2、外部中断/事件控制器(EXTI)3、区别三、NVIC寄存器和EXTI寄存器1、NVIC中的寄存器四、中断向量表 一、中断和异常 1、中断——当需要出现时,CPU暂时...

    中断是STM32中很重要的一个概念,如果想要单片机效率更高,就要摆脱查询式,用中断式来提高它的运行效率。今天讲的外部中断,就是GPIO口和4个特定中断/事件外设,由于中断比较复杂,就先讲概念,下一篇讲具体的实验代码。

    一、中断和异常

    1、中断——当需要出现时,CPU暂时停止当前程序的执行,转而执行处理新情况的程序和执行过程。
    2、异常——处理器要复位,不可屏蔽中断,存储故障,这些由内核产生的就叫做异常,也就是硬件异常。

    • 注:两者区别就是,中断一般发生与外部,异常发生于内部。
    • 中断源三个来源:1、IO口;2、片上外设;3、内核。

    二、NVIC和EXTI

    1、嵌套向量中断控制器(NVIC)

    在这里插入图片描述
    可以看到,NVIC是属于Cortex-M3的,不可屏蔽中断和外部中断都由它处理,它的作用如下:

    • 可嵌套中断支持
    • 向量中断支持
    • 动态优先级调整支持
    • 中断延迟大大缩短
    • 中断可屏蔽

    NVIC可管理240个中断,15个异常

    2、外部中断/事件控制器(EXTI)

    在这里插入图片描述

    EXTI是属于STM32的,功能如下:

    • 每个中断/事件都有独立的触发和屏蔽
    • 每个中断线都有专用的状态位
    • 支持多达20个软件的中断/事件请求
    • 检测脉冲宽度低于APB2时钟宽度的外部信号。

    管理STM32的16个IO口(占用 EXTI0至 EXTI15),以及片上的4个外设PVD输出,RTC闹钟事件,USB唤醒事件、以太网唤醒事件(按顺序占用EXTI16,EXTI17,EXTI18,EXTI19)
    注意:以太网唤醒事件只适用于互联型。

    (1)中断和事件的区别

    • 中断:需要CPU参与,需要软件的中断服务函数才能完成中断后产生的结果
    • 事件:靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果

    (2)中断触发流程

    1、输入线输入一个信号(中断)
    2、进行边沿检测(上升沿或下降沿触发)
    3、或门进入中断挂起请求寄存器
    4、若打开了中断屏蔽寄存器,与门输出到NVIC中断检测电路

    (3)事件触发流程

    1、输入线输入一个信号(事件)
    2、进行边沿检测(上升沿或下降沿触发)
    3、若打开了事件屏蔽寄存器,与门输出一个1到脉冲发生器,产生一个脉冲,供其他外设使用。

    3、中断/事件线的映像

    在这里插入图片描述
    通过相应寄存器,可以配置16个IO口具体哪一个为EXTI中断源,每一个中断线上只能映像一个IO口,比如,你映像了PA0,那PB0~PG0不能再作为中断源。

    4、向量表

    ST公司以M3为内核,制造了STM32单片机,制造过程中对支持的中断进行了裁剪,所以STM32只能支持60个中断,15个异常,如下,就是STM32公司支持的中断和异常,叫中断向量表,灰色部分就是15个异常,剩下的就是60个中断。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    三、中断的优先级及分组

    1、中断优先级

    中断很多,如果同时有多个中断发生,该怎么办?这里讲一下优先级。

    • 优先级:一种约定,优先级高的先做,优先级低的后做
    • 优先级分为主优先级次优先级
    • 数字越小优先级越高
    • 由名字可以知道,两个中断先比较主优先级,再比较次优先级

    我们通过不同优先级例子来掌握什么是优先级。
    1、假如有两个中断A,B同时到达

    在这里插入图片描述
    先比较主优先级:A的主优先级高于B的主优先级,那么先执行中断A。
    在这里插入图片描述
    先比较主优先级:A,B主优先级一样,再比较次优先级:A的次优先级高,先执行中断A
    在这里插入图片描述
    先比价主优先级:A,B主优先级一样,再比较次优先级:A,B次优先级一样,这时候,就根据向量表中的位置,谁的中断号小就先执行谁

    2、假如有两个中断B先到,A后到
    在这里插入图片描述
    B先来先执行B,执行到一半,A来了,A的主优先级比B的高,B暂时挂起,等待A执行完才能继续执行B,这就是主优先级的嵌套
    在这里插入图片描述
    B先来先执行B,执行到一半,A来了,A,B的主优先级一样,这时候,尽管A的次优先级高,但此刻不能进行嵌套,只能等B执行完才能执行A。
    总结主优先级可以嵌套,次优先级不能嵌套

    2、中断优先级分组

    优先级分组就是最多能设置的优先级个数
    在这里插入图片描述

    • 组0:4位设置次优先级,能设置16种次优先级(0-15)
    • 组1:1位设置主优先级,3位设置次优先级,能设置2种主优先级(0-1)8种次优先级(0~7)
    • 组2:2位设置主优先级,2位设置次优先级,能设置4种主优先级(0-3)4种次优先级(0-3)
    • 组3:3位设置主优先级,1位设置次优先级,能设置4种主优先级(0-7)4种次优先级(0-2)
    • 组4:4位设置主优先级,能设置16种主优先级(0-15)

    四、NVIC寄存器组和EXTI寄存器

    这里只讲需要手动设置的寄存器,想了解更多,请在Cortex-M3权威指南第八章查看。

    1、NVIC寄存器组

    (1)NVIC_ISER(中断使能寄存器组)

    在这里插入图片描述
    这个寄存器组是中断使能寄存器组:
    ISER0使能0~31号中断
    ISER1使能32~63号中断
    ISER2使能64~95号中断
    ISER3使能96~127号中断
    ISER4使能128~159号中断
    ISER5使能160~191号中断
    ISER6使能192~223号中断
    ISER7使能224~239号中断
    这个寄存器每一位管理一个中断,但是由于STM32是经过裁剪的,只有60个中断,所以这个寄存器组我们只用前两个 ISER0 和 ISER1

    (2)NVIC_IP(中断优先级控制的寄存器组)

    在这里插入图片描述
    这个寄存器用来设置优先级,每个寄存器只有8位,管理一个中断的优先级,那么有240中断你,就有240个PRI寄存器。因为大多数芯片采用的是小端存储,为了不同芯片代码移植方便,所以规定这个8位寄存器高四位设置优先级,低四位保留不用。
    因为一个寄存器只有8位,为了统一,四个8位PRI寄存器凑成一个32位寄存器IP,如下图:
    在这里插入图片描述
    我们可以知道:

    • NVIC_IP0设置0~3号中断优先级
    • NVIC_IP1设置4~7号中断优先级
    • NVIC_IP59设置236~239号中断优先级

    按这样,240个寄存器,4个4个组合起来,IP寄存器就变成了6032位寄存器。
    STM32只有60个中断,我们只使用IP0~IP14

    (3)NVIC_AIRCR(应用程序中断及复位控制寄存器)

    在这里插入图片描述
    这个寄存器就是用来设置分组的寄存器,8~10位用来设置分组。
    设置分组时,必须把钥匙写进去,不然不能进行写操作。比如:

    NVIC_AIRCR|=0X05FA0500; 		//写入钥匙和分组2
    

    2、EXTI寄存器

    (1)EXTI_IMR(中断屏蔽寄存器)

    在这里插入图片描述
    这个寄存器就是用来开放来自线x的中断请求。

    (2)EXTI_RTSR(上升沿触发选择寄存器)

    在这里插入图片描述
    输入信号为上升沿时有效

    (3)EXTI_FTSR (下降沿触发选择寄存器)

    在这里插入图片描述
    输入信号为下降沿时有效

    (4)EXTI_PR(挂起寄存器)

    在这里插入图片描述
    挂起寄存器,对应位为1,说明有中断触发请求,对应位写1可以清除状态,否则会反复进入中断服务函数。

    五、外部中断配置寄存器 1~4

    这些寄存器就是配置输入线映射的寄存器,总共有四个。
    在这里插入图片描述
    在这里插入图片描述
    如上

    • 向[3:0]位写入0001,说明中断/事件线0上,选择PB0为外部中断输入源
    • 向[7:4]位写入0001,说明中断/事件线1上,选择PB1为外部中断输入源
      可以看到,选择几号引脚,就对应几号中断线。
      AFIO_EXTICR1(外部中断配置寄存器1 ),管理0—3号中断线
      AFIO_EXTICR2(外部中断配置寄存器2 ),管理4—7号中断线
      AFIO_EXTICR3(外部中断配置寄存器3 ),管理8—11号中断线
      AFIO_EXTICR4(外部中断配置寄存器4 ),管理12—15号中断线。

    六、总结

    1、关于外部中断配置步骤

    • 1、开启复用时钟,设置映射关系(选择具体IO口引脚为中断输入源)
    • 2、开放来自线x的中断请求
    • 3、设置触发条件(上升沿、下降沿)
    • 4、分配中断向量控制器(分组和设置优先级并使能)
    • 5、编写中断服务函数(编写中断要处理的事情)

    2、涉及寄存器总结

    • 1、RCC_APB2ENR
      开启复用时钟
    • 2、AFIO_EXTICR1~4
      选择中断输入源
    • 3、EXTI_IMR
      开放中断请求
    • 4、EXTI_RTSR和EXTI_FTSR
      选择触发条件
    • 5、NVIC_AIRCR
      设置分组
    • 6、NVIC_ISER0~1
      使能具体中断
    • 7、NVIC_IP0~14
      设置优先级
    • 8、EXTI_PR
      清除中断标志
    展开全文
  • 把其中别的中断请求源IR0直接接到AT89S51的一个外部中断请求源IR0输入端INT0,其余的4个中断请求源IR1~IR4按下图所示的方法通过各自的OC门(集电极开路门)连到AT89S51的另一个外中断源输入端INT1,同时还连到P1...
  • 中断一次,发光二极管依次从左向右点亮,中断8次后,程序结束。
  • STM32的每一个IO都可以作为外部中断的中断输入。STM32F103的中断控制器支持19个外部中断/事情请求。每个中断都设有状态位,每个中断/事件都有独立的触发和屏蔽设置。 STM32F103的19个外部中断为: 线0~15 ...

    一、STM32外部中断介绍

    STM32的每一个IO口都可以作为外部中断的中断输入口。STM32F103的中断控制器支持19个外部中断/事情请求。每个中断都设有状态位,每个中断/事件都有独立的触发和屏蔽设置。

    STM32F103的19个外部中断为:

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

    其中,STM32供IO口使用的中断线只有16个。STM32如何把16个中断线和IO口一一对应起来呢?STM32是这样设计的,GPIO的管脚GPIOx.0~GPIOx.15(x = A,B,C,D,E,F,G)分别对应中断线0~15,如此一来,每个中断线对应了最多7个IO口。举个例子说明,GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0对应中断线0。每个中断线上每次只能连接在1个IO口上,这样就需要通过配置来决定对应中断线配置到哪个GPIO上了。如下是GPIO和中断线的映射关系图:

    二、实验要求

    按下按键KEY1,采用外部中断方式控制LED1状态的翻转。

    三、程序

    1. IO口外部中断初始化步骤

    (1)初始化IO口为输入;

    (2)开启AFIO时钟;

    (3)设置IO口与中断线的映射关系;

    (4)初始化线上中断,设置触发条件等;

    (5)配置中断分组(NVIC),并使能中断;

    (6)编写中断服务函数。

    void exit_init(void)
    {
        EXTI_InitTypeDef EXTI_InitStruct;
        NVIC_InitTypeDef NVIC_InitStruct;
        
        key_init(); //按键初始化
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //复用AFIO时钟使能
        
        /****************GPIOE.3与中断线3进行映射***************/
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);  //KEY1-PE3,设置PE3和中断线3的映射
        
        /*********************初始化中断线上中断**********************/
        EXTI_InitStruct.EXTI_Line = EXTI_Line3; //中断线3
        EXTI_InitStruct.EXTI_LineCmd = ENABLE;
        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;    //下降沿触发
        EXTI_Init(&EXTI_InitStruct);
        
        /*********************配置中断分组***********************/
        NVIC_InitStruct.NVIC_IRQChannel = EXTI3_IRQn;   //使能按键KEY1外部中断通道3
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;  //抢占优先级2
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; //子优先级2
        NVIC_Init(&NVIC_InitStruct);
        
    }
    
    void EXTI3_IRQHandler(void) //外部中断3服务函数
    {
        delay_ms(10);   //消抖
        if(KEY1 == 0)
        {
            LED1 = !LED1;
        }
        EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
    }
    2. 主函数
    int main(void)
    {
        exit_init();
        LED_init();
        delay_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2
        while(1);
    }

    展开全文
  • STM32 外部中断简介

    2020-08-11 08:13:53
    STM32 IO 中断的一些基础概念。STM32 的每个 IO 都可以作为外部中断的中断输入,这点也是 STM32 的强大之处。STM32F103 的中断控制器支持 19 个外部中断/事件请求。
  • 利用8086控制8259可编程中断控制器,实现对外部中断的响应和处理。要求程序中每次中断进行计数,并将技术结果用8255的PA输出到发光二极管显示。
  • 51外部中断1电平触发

    2018-03-17 12:25:48
    51单片机实现外部中断1电平触发 /*----------------------------------------------- 名称:外部中断0电平触发 论坛:www.doflye.net 编写:shifang 日期:2009.5 修改:无 内容:通过中断接口P3.2连接的独立...
  • AT89C51单片机外部中断

    千次阅读 2020-11-27 22:12:30
    C51单片机外部中断调用P3_2 ,P3_3。 中断方式有两种,分别为电平方式和脉冲方式。 中断请求有0和1。中断总允许为EA=1, IE0:外部中断请求0标志位; IT0:外部中断0触发方式设置位,IT0=1下降沿触发,IT0=0低电平...
  • 也就是说,单片机把每个机器周期的S5P2采样到的外部中断线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平...
  • 和往常一样,我会提供完成项目同时,提供小编在实践时的情况以及自己认为更好的算法...STM32的开发板IO都可以作为中断输入引脚,但是中断线只有16根,所以在选择时有一些局限:开发板的IO有GPIOA,B,C,D,E,F,G;每种IO
  • 外部中断测脉冲个数

    千次阅读 2021-05-21 07:56:59
    1.外部中断的常用功能外部中断经常用来记录外部脉冲的个数,也就是当我们使用外部中断1时,如果想记录自身单片机的某个引脚的下降沿个数,只需用杜邦线把这个引脚和P3.3连接即可。比如P2.3引脚产生这样的电平无规律...
  • 设计一个外部中断触发流水灯系统:当外部中断来临时,启动流水灯,即从P2的LED循环点亮。可以从protues中看到结果
  • DSP2812 XINT外部中断完整工程代码 XINT外部中断 完美实现
  • stm8 外部中断 源代码

    2020-03-20 22:09:23
    stm8 外部中断 程序源代码 只需要改一下对应的io数字就可以使用,适合学习如何编写外部中断程序。
  • 初始化作为外部中断源的GPIO。和普通的GPIO的设置类似,不过由于是使用GPIO引脚作为中断源,所以还需要开启复用时钟。 2..配置中断控制器 NVIC。由于有很多的中断,所以STM32用NVIC来控制操作各种中断。配置NVIC...
  • 51单片机交通灯实验,救护车到来时由外部中断实现,下降沿触发,
  • 使用外部中断实现使用独立按键控制led的亮灭 一、需求分析 1、三个关键词 外部中断 独立按键 led亮灭 2、要实现一个中断系统如何做? 初始化外部中断系统INT0/INT1 void init() { EA=1; IT0=1; EX0=1; ...
  • LPC1768微处理器包括4个外部中断,分别是EINT0、EINT1、EINT2、EINT3对应的引脚分别是P2.10~P2.13,这几个引脚也可以作为通用IO使用。名个外部中断可以设置成低电平/高电平或上升沿/下降沿有效,它们还有一个功能...
  •   利用单片机 AT89C51 的外部中断 0 和中断 1, I/O ,对 LED 和数码管分别进行控制。以实现按键 K0 时 LED 灯亮灭闪烁,按键 K1 时做 LED 左和右流水运动。无按键操作时偶数位数码管显示 0-F。 使用74LS373可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,784
精华内容 12,313
关键字:

外部中断口