精华内容
下载资源
问答
  • 外部中断优先级配置

    千次阅读 2017-07-05 01:22:59
    STM32固件库使用手册(中文版)P167抢占优先级的优先级别大于从优先级(响应优先级),而在抢占优先级内部,配置...优先级大小:抢占优先级0>抢占优先级1>抢占优先级2>抢占优先级3>从优先级0>从优先级1>从优先级2>从优先

    STM32固件库使用手册(中文版)P167
    一, 抢占优先级的优先级别大于从优先级(响应优先级),而在抢占优先级内部,配置所给的抢占优先级(NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;)数字越小,代表的优先级别越高,从优先级同理;优先级大小:抢占优先级0>抢占优先级1>抢占优先级2>抢占优先级3>从优先级0>从优先级1>从优先级2>从优先级3

    二,配置表格分组
    这里写图片描述
    1. 选中 NVIC_PriorityGroup_0,则参数 NVIC_IRQChannelPreemptionPriority 对中断通道的设置不产生影响。
    2. 选中 NVIC_PriorityGroup_4,则参数 NVIC_IRQChannelSubPriority 对中断通道的设置不产生影响。
    NVIC_IRQChannelCmd
    该参数指定了在成员 NVIC_IRQChannel 中定义的 IRQ 通道被使能还是失能。这个参数取值为 ENABLE 或
    者 DISABLE。

    例:`
    NVIC_InitTypeDef NVIC_InitStructure;

    /* Configure the Priority Grouping with 1 bit */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

    /* Enable TIM3 global interrupt with Preemption Priority 0 and Sub
    Priority as 2 */
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure(&NVIC_InitStructure);

    /* Enable USART1 global interrupt with Preemption Priority 1 and Sub
    Priority as 5 */
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
    NVIC_InitStructure(&NVIC_InitStructure);

    /* Enable RTC global interrupt with Preemption Priority 1 and Sub
    Priority as 7 */
    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;
    NVIC_InitStructure(&NVIC_InitStructure);

    /* Enable EXTI4 interrupt with Preemption Priority 1 and Sub
    Priority as 7 */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;
    NVIC_InitStructure(&NVIC_InitStructure);

    /* TIM3 interrupt priority is higher than USART1, RTC and EXTI4
    interrupts priorities. USART1 interrupt priority is higher than RTC
    and EXTI4 interrupts priorities. RTC interrupt priority is higher
    than EXTI4 interrupt prioriy. */
    `

    展开全文
  • 用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。 要求:中断触发方式为下降沿触发,按键有消抖功能 仿真 ...

    问题

    用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级,外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。
    要求:中断触发方式为下降沿触发,按键有消抖功能

    仿真

    在这里插入图片描述

    代码

    #include <reg51.h>
    #define uchar unsigned char
    
    void delay(uchar c) { //延时c毫秒
    		uchar a, b;
    		for (; c > 0; c--) 
    		for (b = 142; b > 0; b--) 
    		for (a = 2; a > 0; a--);
    }
    
    void INT_0() interrupt 0 { //外部中断0
    		EX0=0; //关闭外部中断0,防止在执行过程中再次发生中断
    		delay(20); //消除抖动
    		EX0=1; //打开外部中断0
    		while(1) { //led向下循环点亮,表示正在执行外部中断0服务程序
    				P1 = 0xfe; delay(200);
    				P1 = 0xfd; delay(200);
    				P1 = 0xfb; delay(200);
    				P1 = 0xf7; delay(200);
    				P1 = 0xef; delay(200);
    				P1 = 0xdf; delay(200);
    				P1 = 0xbf; delay(200);
    				P1 = 0x7f; delay(200);
    		}
    }
    
    void INT_1() interrupt 2 { //ÍⲿÖжÏ1
    		EX1=0;
    		delay(20);
    		EX1=1; 
    		P1 = 0x00; delay(200); //led全部点亮,闪烁3次,表示正在执行外部中1服务程序
    		P1 = 0xFF; delay(200);
    		P1 = 0x00; delay(200);
    		P1 = 0xFF; delay(200);
    		P1 = 0x00; delay(200);
    }
    
    void main() {
    		P1 = 0xFF;
    		EA = 1;  //打开总中断
    		EX0 = 1; //打开外部中断0
    		IP = 0x04; //设置外部中断1为高级优先级
    		IT0 = 1; //设置触发方式为下降沿触发
    		EX1 = 1; //打开外部中断1
    		IT1 = 1; 
    		while(1);//死循环
    }
    
    展开全文
  • 外部中断及其中断优先级管理

    万次阅读 2018-06-26 20:10:41
    一、外部中断的一般配置 ①初始化IO口为输入 GPIO_Init(); ②开启IO口复用时钟 RCC_APB2PeriphClockCmg(RCC_APB2Periph_AFIO,ENABLE) ③设置IO口与中断线的映射关系 void GPIO_EXTILineConfig(); ...
    一、外部中断的一般配置
         ①初始化IO口为输入
                GPIO_Init();
           ②开启IO口复用时钟
                RCC_APB2PeriphClockCmg(RCC_APB2Periph_AFIO,ENABLE)
           ③设置IO口与中断线的映射关系
                void GPIO_EXTILineConfig();   
           ④初始化线上中断,设置触发条件
                EXTI_Init();
           ⑤配置中断分组并且使能中断
                NVIC_Init();
           ⑥编写中断服务函数
                EXIT_IRQHandler();
           ⑦清除中断标志位
                EXIT_ClearITPendingBit();
    二、外部中断通用I/O映像
            
            GPIOx.0映射到EXTI0:PA0,PB0,……,PG0→EXTI0;
            GPIOx.1映射到EXTI0:PA1,PB1,……,PG1→EXTI1;
            GPIOx.2映射到EXTI0:PA2,PB2,……,PG2→EXTI2;
                ……
            GPIOx.15映射到EXTI0:PA15,PB15,……,PG15→EXTI15;

    void GPIO_Configuration(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;    
        //LED
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB,&GPIO_InitStructure);

        //KEY
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
    }

    void EXTI_Configuration(void)
    {
        EXTI_InitTypeDef EXTI_InitStructure;

        EXTI_ClearITPendingBit(EXTI_Line5);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);

        EXTI_InitStructure.EXTI_Line=EXTI_Line5;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;

        EXTI_Init(&EXTI_InitStructure);
    }
    三、中断优先级的配置
          ①设置中断优先级分组。调用函数:
                    void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
                    整个系统执行过程中,只设置一次中断分组。
          ②每个中断设置对应的抢占优先级和响应优先级:
                      void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
          ③如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。
    void NVIC_Configuration(void)
    {
           NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }



    * 抢占优先级 & 响应优先级区别:
    * 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
    * 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
    * 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
    * 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
    展开全文
  • STM32F4——NVIC中断优先级外部中断

    千次阅读 2015-08-07 21:56:31
    NVIC中断优先级 一、简介:  CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置。对于STM32F4没有用到CM4内核的所有东西,只是用到了一部分,对于STM32F40和41系列共有92个中断,...

    NVIC中断优先级

    一、简介:

        CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置。对于STM32F4没有用到CM4内核的所有东西,只是用到了一部分,对于STM32F40和41系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断。

    二、相关寄存器:

        ISER[8]—中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82个可屏蔽的中断,因此利用ISER[0~2]这三个32位寄存器就够了。一下的几个寄存器同理。

        ICER[8]—中断除能寄存器组,用来消除中断。

        ISPR[8]—中断挂起控制寄存器组,用来挂起中断。

        ICPR[8]—中断解挂控制寄存器组,用来解除挂起。

        IABR[8]—中断激活标志寄存器组,对应位如果为1则表示中断正在被执行。

        IP[240]—中断优先级控制寄存器组,它是用来设置中断优先级的。我们只用到了IP[0]~IP[81],每个寄存器只用到了高4位,这4位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先级和响应优先级各占多少位则由AIRCR寄存器控制,相关设置如下图所示:

        关于抢占优先级和响应优先级的理解,可以将它们简单的理解为两个级别,抢占优先级的级别要比响应优先级的级别高,简单的理解为一个为长辈的一个为晚辈的,晚辈要让着长辈,因此抢占优先级的中断可以打断响应优先级的中断,而同级别的中断就得有个先来后到的了,先来的先执行。

    三、相关库函数应用

        1、中断优先级分组函数:void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup),用来设置设置中断优先级的分组,就是设置AIRCR寄存器的值。

        2、中断初始化:NVIC_Init(),用来设置一个中断的相关参数,包括中断通道、抢占优先级、响应优先级、通道使能。


    外部中断

    一、简介:

        STM32F4的每一个IO都可以作为外部中断的中断输入口,其中断控制器支持22个中断/事件请求。其中有:1、EXTI线0~15:外部IO口的输入中断。2、线16:PVD输出。3、线17:RTC闹钟事件。4、线18:USB OTG FS唤醒事件。5、线19:以太网唤醒。6、线20:USB OTG HS唤醒事件。7、线21:RTC入侵和时间戳事件。8、线22:RTC唤醒事件。

    二、IO口与中断线的对应:

        STM32F4IO口远比16根中断线要多,如果要对应上就需要多个IO口公用一根中断线,由于每一组IO口都有16个IO口,则可以做如下对应,即:PA0、PB0、……、PI0,对应中断线0,依次类推则可以做好相应对应。基于该结构则有了如下的配置过程。

    三、外部中断配置:

        1、使能IO口时钟,初始化IO口。

        2、开启SYSCFG时钟,设置IO口和中断线的映射。相关函数为:void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx,uint8_t EXTI_PinSourcex)

        3、初始化线上中断,设置相关参数。相关函数为:EXTI_Init();相关参数包括:中断线、中断模式、中断触发条件、中断线使能。

        4、配置中断分组。相关函数为:NVIC_Init();相关参数包括:中断通道、抢占优先级、响应优先级、使能中断通道。

        5、编写中断服务函数。即中断触发后执行的相关代码。与其相关的有两个函数为:ITStatus EXTI_GetITStatus(uint32_t EXTI_Line),用来判断线上中断是否发生。void EXTI_ClearITPendingBit(uint32_t EXTI_Line),用来在中断函数结束时清除中断标志位。

    总结:

        有关NVIC的中断优先级配置和外部中断的相关结构和配置就介绍到这里,这些介绍是编写相关代码的基础,在理解的基础上也要去书写相关的代码和例程,同时设计的相关中断触发事件来多用,用的多了自然会在理论的基础上得到升华。给自己加油吧!!

    展开全文
  • Q1:请教高人C51单片机C语言中的中断优先级怎么设置?C51中设置中断优先级,需要对中断寄存器IP进行配置。具体值需要根据用户需要的优先级顺序进行确定,具体的设置方法就是直接写如下C语言语句:IP = 06H;// 如果5...
  • 包含五个中断源,两级中断优先级,优先级可编程设置,通过IP进行设置: ... 51单片机中断优先级的设置方法解析 ... PX0(IP.0),外部中断0优先级设... EA是中断控制位,EA=1开放中断,EA=0屏蔽所用中断(编程
  • STM32F103 的中断控制器支持 19 个外部中断/ 事件请求。每个中断设有状态,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的 19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断。 线 16:连接到 PVD ...
  • IP:中断优先级控制寄存器 外部中断0 外部0中断触发:(P3.2口触发;P3.2触发;P3.2触发) 若IT0=0,则为低电平触发 若IT0=1,则为下降沿触发 外部中断0初始化: 初始化方法一: void Init_INT0() { IT0=1;//设置...
  • NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQn),每个中断有最高256(最低8)级的优先级,具体的中断数和优先级级数由芯片厂商在设计芯片时决定(STM32F1支持60个外部中断,16级优先级)。...
  • 中断优先级

    2016-06-08 10:44:00
    外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART 或 PX0>PT0>PX1>PT1>PS>...... 首先查询...
  • 51单片机有两个外部中断,两个定时器/计数器,两个外部中断分别是int0,int1。定时器/计数器分别是t0,t1,还有一个串口中断TI/RI,加起来有五个中断。它们在硬件上的排列顺序是INT0,T0,INT1,T1,TI/RI,这5个...
  • 中断的优先级 不多BB,感觉和配置GPIO一样 1.选哪个中断 2.设定中断抢占优先级 3.设定中断响应优先级 4.使能ENABLE 记得要在main函数中先写...中断优先级分组没看懂(2020.10.11)(小声BB) 总结: 挂起和唤醒 : ...
  • STM32中断及其优先级

    千次阅读 2017-12-15 08:12:18
    1、异常与中断 2、优先级分组,NVIC_PriorityGroupConfig 3、抢占优先级,NVIC_IRQChannelPreemptionPriority 4、子(亚)优先级,NVIC_IRQChannelSubPriority 5、中断号定义,NVIC_IRQChannel 6、优先级配置的寄存器...
  • 1. 基于proteus的51单片机开发实例(14)中断嵌套和中断优先级1.1. 实验目的在前面实例中我们已经学习了51单片机的定时器/计数器中断,外部中断,通过这些实例,知道了中断电路的设计,中断编程的方法。本实例中我们...
  • 中断优先级分组(NVIC) 值越低,优先级越高
  • 和线程的区别:线程是同时执行多个任务,中断是停下来去执行其他的(注意优先级),执行完了再回来执行, 定时器才相当于线程,定一个时间,每到这个时间执行一次 二、中断概述 STM32F4并没有使用CM4内核...
  • NVIC_PriorityGroup_00 bit 抢占优先级 4 bit 子优先级 NVIC_PriorityGroup_1 :1 bit 抢占优先级 3 bit 子优先级 NVIC_PriorityGroup_2 :2 bit 抢占优先级 2 bit 子优先级 NVIC_PriorityGroup_3 :3 bit 抢占...
  • 中断优先级问题

    千次阅读 2016-11-04 14:17:23
    外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART 或 PX0>PT0>PX1>PT1>PS>...... 首先查询优先级是不可以更改和设置...
  • 51中断优先级及中断嵌套

    千次阅读 多人点赞 2017-12-28 16:47:26
    基本型80C51系列单片机有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4...查询优先级datasheet上默认的查询优先级(IP寄存器不做设置,上电复位后为00H):外部中断0 > 定时/计数器0
  • USB在持续通信几十万次后,会出现USB IN中断丢失几次的情况,分析是中断优先级不够高,导 致USB中断在排队,然而排队还未完成,又有新的USB中断发生,致使其中断丢失。LPC1769的所有中 断默认为最高优先级"0"...
  • STM32的中断优先级,开关总中断

    千次阅读 2014-04-29 21:48:34
    STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 )和16个抢占优先级(因为抢占优先级最多可以有四位数)。 二:优先级判断  ...
  • 从之前的串口实验可以看出,STM32总共分为内部中断和外部中断,内部和外部的配置差别不是很大,外部中断只是多了一步,需要通过 GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函数(在stm...
  • PIC 的八位单片机只有一个中断入口(16和32的单片机就有多个...在这里,外部中断优先级必须比定时器中断的优先级高,不然在定时时无法对其产生相应的外部中断控制它停止。 #include __CONFIG(1,XT) ; ...
  • FreeRtos 任务优先级和中断优先级

    千次阅读 2019-07-01 17:36:19
    中断优先级和任务优先级的区别: 1.简单的说,这两者之间没有任何关系,不管中断的优先级是多少,中断的优先级永远高任何任务的优先级,即在执行的过程中,中断来了就开始执行中断服务程序, 2.对应STM32F103 F...
  • STM32中断设置以及中断优先级设置

    万次阅读 多人点赞 2018-09-13 15:26:45
    最近,在做一个智能锁的项目,由于,今天碰到了一个关于中断的问题,因此,又...本项目使用到的是STM32F030C8型号的MCU,我们可以从官方下载到的标准库文件中的启动汇编文件中,查看到本型号单片机的外部中断向量表...
  • 6.7 单片机中断优先级

    千次阅读 2016-07-06 07:25:54
    中断优先级的内容,大家先通过我的介绍大概了解一下即可,后边实际应用的时候我们再详细理解。 在讲中断产生背景的时候,我们仅仅讲了看电视和烧水的例子,但是实际生活当中还有更复杂的,比如我正在看电视,这个...
  • 设计单片机的Proteus仿真电路,实现如下功能:控制P0口数码管循环显示0-9; 按下上面开关,控制P2口数码管依次显示0-9;按下下面开关,控制P1口数码管依次显示0-9。
  • NVIC中断优先级管理

    千次阅读 2016-09-07 10:29:00
    一,STM32中断介绍CM3内核支持256个中断,16个内核中断和240个外部中断,具有256级可编程中断设置STM32只使用了CM3内核的一部分,84个中断:16个内核中断+68个可屏蔽中断(外部中断),具有16级可编程的中断优先级STM32F103...
  • 单片机之中断优先级设置

    千次阅读 2020-09-14 17:39:35
    单片机芯 片: STC12C5A60S2 晶振是11.0592MHZ 中断优先级的基本规则 1.低优先级中断可被高优先级中断所中断 ...例如:想要实现外部中断1被中断0中断,设置外部中断0为最高优先级(优先级3) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,945
精华内容 18,378
关键字:

外部中断0优先级控制位