精华内容
下载资源
问答
  • STM32芯片有16个外部中断源,EXTI0-EXTI15,分别对应着七个中断服务函数,其中有五个EXTI0,EXTI1,EXTI2,EXTI3,EXTI4是专用,其余为共用。 EXTI0对应每个端口组0引脚,也就是说 EXTI0连接引脚为PA0-PG0。...

    一 概述
    STM32芯片有16个外部中断源,EXTI0-EXTI15,分别对应着七个中断服务函数,其中有五个EXTI0,EXTI1,EXTI2,EXTI3,EXTI4是专用的,其余为共用。
    EXTI0对应每个端口组的0号引脚,也就是说 EXTI0的连接引脚为PA0-PG0。以此类推,EXTI1、EXTI2、EXTI3、EXTI4分别对应每个端口组的1、2、3、4号引脚。
    而EXTI5-EXTI9为5-9端口共用,而EXTI10-EXTI15为10-15端口共用。具体的表示如图所示:
    在这里插入图片描述
    外部中断触发条件有:上升沿触发,下降沿触发,双边沿触发。注意不能配置成高电平低电平触发。
    二 设计步骤
    基于STM32CubeMX的外部中断设计步骤:
    【1】在STM32CubeMX中指定引脚,配置中断初始化参数。
    选择GPIO引脚的功能,设置中断信号触发条件,使能NVIC对应的中断通道。
    【2】重写该I/O引脚对应的中断回调函数。
    三 具体操作
    例:将PC13引脚设置成外部中断,下降沿触发,在终端服务函数中,翻转PB9引脚的电平信号。

    1. 首先配置时钟和系统选项
      在这里插入图片描述
      在这里插入图片描述

    2. 我采用的是ST-LINKV2仿真器,所以我选用了serial wire串行线路。同时在硬件上要将单片机最小系统的BOOT0和BOOT1都置为0。

    3. 同时如图所示配置中断,输出引脚:在这里插入图片描述

    4. 将引脚参数,中断参数配置完成:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      其余关于STM32CubeMX项目建立等其他操作不再赘述。如图所示:
      在这里插入图片描述
      在这里插入图片描述

    四 代码执行

    1. 在keil工程文件里会发现一个stm32f1xx_it.c文件,里面保存的就是中断的一些代码。
      在main文件里将会看到 MX_GPIO_Init();,里面包含外部中断的初始化。
    void MX_GPIO_Init(void)
    {
    
      GPIO_InitTypeDef GPIO_InitStruct = {0};
    
      /* GPIO Ports Clock Enable */
      __HAL_RCC_GPIOC_CLK_ENABLE();
      __HAL_RCC_GPIOD_CLK_ENABLE();
      __HAL_RCC_GPIOA_CLK_ENABLE();
      __HAL_RCC_GPIOB_CLK_ENABLE();
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
    	//设置PB9为输出
      /*Configure 配置 GPIO pin : PC13 */
      GPIO_InitStruct.Pin = GPIO_PIN_13;
      GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
      GPIO_InitStruct.Pull = GPIO_PULLUP;
      HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    
      /*Configure 配置 GPIO pin : PB9 */
      GPIO_InitStruct.Pin = GPIO_PIN_9;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_PULLUP;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
      /* EXTI interrupt init*/
      HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
      HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
    	//中断初始化
    }
    
    1. 接下来我们重写该I/O引脚对应的中断回调函数:
    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {
    	if(GPIO_Pin==GPIO_PIN_13)
    	{
    		HAL_GPIO_TogglePin(GPIOB ,GPIO_PIN_9);
    	}
    	
    }
    
    

    运行,即可看到效果。
    注:
    本笔记为欧浩源老师STM32课程的一些梳理,对应的视频为:
    https://www.bilibili.com/video/av87017878?p=4

    展开全文
  • 两个外中断的应用

    2015-03-04 10:28:38
    两个外中断应用 中断服务函数格式 函数类型 函数名(形参)interrupt n using n ...关键字interruot 后面n 是中断好 对应8051 中断号 0~4   n 中断源 中断向量 (8*n +3) 0 外部中断 0003h 1 定时器0


                                                两个外中断的应用

    中断服务函数的格式

    函数类型 函数名(形参)interrupt n  using n

    关键字interruot  后面的n 是中断好 对应8051 中断号 0~4 

     n             中断源             中断向量 (8*n +3)

    0             外部中断          0003h

    1              定时器0         000Bh

    2             外部中断1      0013h

    3              定时器1        001Bh

    4               串行口         0023h

    例如 :

        void int1()    interrupt 2 using 0     //中断号 是2 选 0 工作区域

      

    EA  中断允许总开关   

    ES   串行口中断允许位

    ET1   定时器1 中断允许位

    EX1  外部中断1 中断允许位

    ET0      定时器T0 

    EX0    外部中断允许位

    IT1  = 0 电平触发  =1 跳沿触发  (外部中断请求)

    #include <reg51.h>
    #define uint  unsigned int
    #define uchar unsigned char 
    
    void delay(unsigned int  i)
    {//ÑÓʱº¯Êý
    		uchar j;
    	  for(; i>0 ; i--)
    	 {
    	  for(j = 0 ; j <125; j++)
    	  {;}
    		}
    }
    void main()
    {
    	 uchar display[9] = {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  //Á÷Ë®µÆҪʵÏÖµÄÊý¾ÝÊý×é¡¢
       uint a;
       while(1)
    	 {
    		  EA = 1; //ÔÊÐíÍⲿÖжÏ
    		  EX0 = 1; //ÔÊÐíÍⲿÖжÏ0
    		  EX1 = 1;  //ÔÊÐíÍⲿÖжÏ1
    		  IT0 = 1; //ÍⲿÖжÏ0 ΪÌøÑØ´¥·¢
    		  IT1 = 1;   //ÍⲿÖжÏ1ΪÌøÑØ´¥·¢
    		  IP = 0;    //Á½¸öÍⲿÖжϾùΪµÍÓÅÏȼ¶
    		  for(a = 0 ; a < 9 ; a++)
    		  {
    			  delay(500); //ÑÓʱ
    			  P1= display[a];
    			}
    	 }
    }
    void int0_isr(void) interrupt 0 using 1    // ÍâÖжÏ0 µÄÖжϷþÎñº¯Êý
    {
    	 uchar n ;
    	 for(n = 0 ; n < 10; n++)
    	 {
    		  P1 = 0xf0; //00
    		  delay(500);
    		  P1 = 0xf0;
    		  delay(500);
    	 }
    }
    void int1_isr(void) interrupt 2  using 2         //ÍⲿÖжÏ1µÄÖжϷþÎñº¯Êý
    {
    	  uchar  m;
    	  for(m = 0 ; m <10 ; m++)
    	  {
    			 P1 = 0xff;
    			 delay(500);
    			 P1 = 0;
    			 delay(500);  
    	 }
    }

    仿真:


    展开全文
  • 问题描述:现在pl部分同时发三个irq外部中断-irq61-63,每路中断都是间隔3ms发一次中断,上升沿触发模式。pl那边发一个中断信号计数一次,ps部分中断处理函数进一次则计数一次。正常情况两个计数器值一样则表示中断...

    问题描述:现在pl部分同时发三个irq外部中断-irq61-63,每路中断都是间隔3ms发一次中断,上升沿触发模式。pl那边发一个中断信号计数一次,ps部分中断处理函数进一次则计数一次。正常情况两个计数器值一样则表示中断来一个响应一个,现在的计数器值然而是不一样的,ps部分的中断计数器值大于pl部分的计数器值,表明中断存在重复多次响应。

    分析:我查看了ICDICFR寄存器,对应位是b11---表示上升沿触发。不是b01-----表示电平触发。要是电平触发如果清中断不正确就会造成多次重复响应中断,可是现在确认是上升沿触发,一个周期对应一个上升沿,不可能多次触发 啊。用逻辑分析仪看中断信号波形没毛刺,时间间隔没不错。

    求助:哪位遇到同样问题的同学,指点或者一起交流一下啊。我qq:631766056。一起讨论学习,效率高。

    展开全文
  • 1. 外部中断,直接有中断代理设备把外部设备的中断信号通过INTR或者NMI引脚输入CPU,CPU根据中断向量到中断描述符表中找到对应的中断描述符。 2. CPU在执行指令的时候,1. 指令可能是一个中断请求,比如int3/i...

    为什么要中断?

    操作系统就是一个死循环,它是在不断等待待处理事件的发生,待处理事件正是通过中断的形式通知操作系统的。(操作系统是中断驱动的)

    CPU对中断的支持?

    1. 外部中断,直接有中断代理设备把外部设备的中断信号通过INTR或者NMI引脚输入CPU,CPU根据中断向量号到中断描述符表中找到对应的中断描述符。

    2. CPU在执行指令的时候,1. 指令可能是一个中断请求,比如int3/int /into/bound/。 2. CPU会自动执行指令检查,比如div指令除数为0时会自动引发0号中断,比如当CPU无法识别当前运行的机器码码时会自动引发6号中断。

    注意:异常和不可屏蔽中断的中断向量号是由CPU自动提供的;来自外部设备的可屏蔽中断号是由中断代理提供的;软中断是有软件提供的。

    3.  CPU规定了中断描述符表的结构:

    低32位:

      0 ~ 15: 中断处理程序在目标代码内的偏移量的0~15位

      16 ~ 31: 中断处理程序目标代码段描述符选择子

    高32位:

      8 ~ 11: type 

      12: s位。 0表示系统段。 1表示数据段

      13~14: DPL

      15: P。表示这个中断描述符是否存在

      16~31: 中断处理程序在目标段内的偏移量的16~31位

    4. CPU在进入中断门定义的程序代码段时,会自动将eflags中的IF位设置成0,表示关闭中断,避免中断嵌套,陷阱门和中段门的区别就是它在进入该描述符定义的代码段是不会自动把IF位设置成0

    5. CPU提供IDTR寄存器来保存中断描述符表的地址。CPU规定了IDTR的结构:第0~15位是表界限,16~47位是IDT的基地址

    6. CPU接到中断向量号以后自动的将中断向量号乘以8(中断描述符是8字节),然后再与IDTR中存储的基址相加,所求地址便是中断描述符的地址。

    7. CPU自动进行特权级检查,对于用户进程主动发起的中断请求,CPU会自动检查    CPL <  门描述符的DPL 且 CPL > 目标代码段描述符的DPL;如果是外部设备引起的中断,则只检查CPL < 目标代码段的DPL

    8. 权限检查通过以后,CPU自动把目标代码段的选择子加载到cs,将目标代码段的偏移加载到eip。

    9. 中断程序的返回是用iret指令,iret指令内部由CPU自动完成了从栈中自动弹出数据到cs/eip/eflags等,根据特权级是否改变,决定是否要恢复旧栈

    10. 中断发生后,CPU会自动将eflags中的NT位和TF位置为0,TF位为0表示中断程序不能单步执行,NT位为0表示当前程序不是由于嵌套程序执行的,在iret时会用到这个地方判断当前iret是中断返回还是嵌套任务返回。

    11. 当进入中断目标程序执行时,如果是有特权级变换(由低到高),则CPU自动按照顺序压入相关的数据: ss_old -> esp_old -> eflags -> cs_old -> eip_old。 在执行完中断程序返回时,会按照压入的逆序弹出数据到相应的寄存器。

    中断机制哪些需要操作系统支持?

     需要中断描述符表和中断向量号

    中断的运行过程?

     

    转载于:https://www.cnblogs.com/caiyao/p/10898304.html

    展开全文
  • 子中断组划分是根据设置它们...上一章节我们分析28个外部中断即第0组外部中断与总中断的对应关系是: 总中断号 中断源组 中断源成员描述 对应总中断控制器 0 INT_EINT0 外部中断的EINT0~EINT
  • 单片机之中断

    2019-10-11 15:33:48
    1、中断含义及过程 中断是指CPU在处理A事情时,发现B请求CPU立刻去处理(中断发生),于是CPU去处理B(中断...每个中断源都有固定入口地址和中断号,学习时要注意中断源与中断号的对应关系 3、中断处理函数 (...
  • 1、 熟悉中断的概念、中断响应过程、中断向量表以及系统是如何根据中断类型号在中断向量表中得到该中断对应的中断服务程序的入口地址等内容。 2、 掌握中断服务程序的设计方法。 2.7.2 实验预习要求 1、 复习中断的...
  • 51中断函数编写注意事项

    千次阅读 2010-09-25 16:09:00
    51中断函数学习笔记 释疑:void Timer0() interrupt 1 using 1 Timer0 是函数名,随便取  interrupt xx using y   跟在interrupt 后面xx 值得是中断号,就是说这个函数对应第...
  •  外部中断0,与按键WAKEUP相连,当该按键按下时向消息  队列发送消息"Key Wakeup Down!"。可以看到,中断比扫描  更灵敏,按一次,有时会发送多次消息(因为没有消抖) 8、StackCheck 为UCOS II检查堆栈和CPU使用...
  • 9. 8086/8088在当前指令执行完且IF=1情况下可以响应一个外部INTR中断请求。( ) 10. 8086被复位后,寄存器Flag、IP、CS内容分别是0000 、0001 、FFFFH。 ( ) 四、汇编程序(共20分) 1. 试分析下面程序段完成...
  •  编号为1-15的对应系统异常,大于等于16则全是外部中断。  系统异常清单如下所示: 【notic】 1、优先级数值越小,优先级越高 2、有3个系统异常:复位,NMI 以及硬 fault,它们有固定优先级,并且它们...
  • interrupt 1 using 1

    2014-04-07 17:10:00
    释疑:void Timer0() interrupt 1 using 1 Timer0 是函数名,随便取 ...跟在interrupt 后面xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3...
  • Arduino端用到了外部中断功能,2脚对应Arduino外部中断0,3对应Arduino外部中断1。代码如附件所示。 可以在代码中添加一些Serial.println()语句来查看一下程序在我们控制网络摄像头时能够做出正确相应。代码...
  • 1.当某个进程发生缺页中断选中一个页面进行淘汰时,或者判断一个页面是否已调入内存时,该页面对应的页表表项中,只需要修改驻留位(又称有效位,中断位,存在位)即可,驻留位表示的是改页是在内存还是外存。...
  • 一种量程,测量结果通过浮点数运算模块将信号周期转换成对应的频率值,再将 结果送去显示。这样无论采用何种方式,只要完成一次测量即可,频率计自动开 始下一个测量循环,因此该频率计具有连续测量的功能,同时实现量程...
  • 关于8335A一些说明

    2008-12-25 15:07:08
    WZx:对应通道零点调节,x为通道 WFx:对应通道满度调节,x为通道 出厂时已经按照单极性调好,一般不需要调整,如果用户使用双极性信号输入,认为双极性零点、满度无法满足要求,可以调节WZx、WFx以满足使用...
  • void timer(void) interrupt x using x

    千次阅读 2011-05-18 16:13:00
    interrupt x using y 跟在interrupt 后面xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断3 定时器1 4 串行中断 其它根据相应得单片机有...
  • ADC809运用及电路

    2010-08-06 20:41:33
    允许外部中断1中断 MOV DPTR, #0FEF8H ;D/A转换器地址 LOOP: MOVX @DPTR, A ;启动A/D转换 HERE: SJMP HERE ;等待中断 中断服务程序: DJZ R2, ADEND   MOVX A, @DPTR ;数据采样 MOVX @R0, A ;存数 INC ...
  • 3)针对页面自适应问题,本文结合渐进增强以及拥抱流式布局思想,同时研究利用了移动设备视口特性,实现跨分辨率、跨设备页面自适应。 (4)针对系统功能实现问题,通过结合利用原生态框架与HTML5跨平台...
  • 左侧图示窗口包含棋盘和递归工作栈两部分,栈中记录含3个数据项,其中 adr 指示调用语句行号,k 指示列,i 指示行号。此算法演示可求得所有可行结果,在求得每一种排布结果之后,均会弹出一个窗口显示“找到第 j...
  • LINGO软件学习

    2009-08-08 22:36:50
    §3 模型数据部分和初始部分 在处理模型数据时,需要为集指派一些成员并且在LINGO求解模型之前为集某些属性指定值。为此,LINGO为用户提供了两个可选部分:输入集成员和数据数据部分(Data Section)和为...
  • DELPHI串口编程

    2015-12-10 21:39:48
    应该请求,便暂时停止当前程序的执行,转去执行与该请求对应的 服务程序,完成后,再继续执行原来被中断的程序。  中断处理方式的优点是显而易见的,它不但为CPU省去了查询外设 状态和等待外设就绪所花费的时间,...
  • 33 内存某字节单元中存放的二进制代码为94H,若将它看作是一个压缩的BCD码,则对应的数为( )。 A、148 B、-20 C、-108 D、94 34 8086CPU中用于中断请求输入的引脚信号是( )。 A、INTR和NMI B、INT和NMI...
  • 答:膾入处理扫描序:识别并接受从外部输入处理谤求和其它有关信息。 内部处理号码分析栏序:根据输入信号和现有状态进行分析、识别,然后决 定下一步任务。 内部处理路山选择私序:根据号码分析结果,进行相应...
  • 设 16 个处理器编号分别为 0,1,2,…,15,用 Cube0 互联函数时,与第 13 处理器机 联处理器是( A.5 ) C.12 D.12 B.9 二、填空题(本大题共 10 小题,每空 1 分,共 20 分) 填空题 本大题共 小题,...
  • (3)速度和容量“时空”矛盾,虛存量“扩大”是以牺牲CPU工作时间以及内外存交换时间为代价。 •存储管理目的及功能 目的是方便用户,提高内存资源利用率,实现内存共享。 功能主要有...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    删除操作一旦执行,立即被监听器捕获到,进而在执行 删除操作前执行自定义函数体,即判断实体有无undeletable标签,有则中断删除操作,无则正常删除。 用例图 关系 关联关系 ;依赖关系 ;泛化关系;关系...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

外部中断3对应的中断号是