精华内容
下载资源
问答
  • 现在我可以进入主函数等进行单步仿真等操作,但是不知道应该怎么进入外部中断的函数,请大神指点~ 主函数: ``` #include "stm32f4xx.h" #include "led.h" #include "bit_operation.h" #include "Systick.h...
  • 外部中断映射原理 首先所有的GPIO口都可以被配置成外部中断...中断响应只响应中断线,不直接响应GPIO,所以在使用的步骤是,1.配置GPIO的引脚模式,2配置EXTI的中断源,3配置NVIC的中断等级和中断函数 配置引脚模式...

    外部中断映射原理

    首先所有的GPIO口都可以被配置成外部中断源,但是外部中断线只有19根,分别是EXTI0-EXTI18;这样就不能一个GPIO口对应一根外部中断线了,于是就有了多个GPIO口公用一根外部中断线的设计了,怎么共,见下图;中断响应只响应中断线,不直接响应GPIO,所以在使用的步骤是,1.配置GPIO的引脚模式,2配置EXTI的中断源,3配置NVIC的中断等级和中断函数
    在这里插入图片描述

    配置引脚模式

    打开时钟,包括AFIO时钟,配置外部中断寄存器得用,配置上拉输入

    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;	 //上拉输入
     GPIO_Init(GPIOC, &GPIO_InitStructure);
    

    配置EXTI中断源

     EXTI_InitTypeDef EXTI_InitStructure;
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10); 
      EXTI_InitStructure.EXTI_Line = EXTI_Line10;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure); 
    

    配置NVIC,确定等级和中断函数

      NVIC_InitTypeDef NVIC_InitStructure;
     
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置第一组抢占4位,次要0位,依次类推,到抢占0位,次要4位
      
      NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//外部中断函数向量有1,2,3,4,5-9,10-15
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//次优先级
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    

    至于什么时候打开AFIO时钟,参考https://blog.csdn.net/u013082827/article/details/77543394

    展开全文
  • 一、外部中断的概述: STM32的每一个IO都可以作为外部中断输入 STM32的中断控制器支持19个...从上面可以看出,STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么1

    一、外部中断的概述:

    • STM32的每一个IO都可以作为外部中断输入
    • STM32的中断控制器支持19个外部中断/事件请求:
      线0~15: 对应外部IO口的输入中断
      线16: 连接到PVD 输出
      线17: 连接到RTC 时钟事件
      线18: 连接到USB唤醒事件*
      每个外部中断线都可以独立的配置触发方式(上升沿,下降沿或者双边沿出发),触发/屏蔽,专用的状态位。
      从上面可以看出,STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一一对应起来的呢?于是 STM32 就这样设计,GPIO 的管教 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0~15。这样每个中断线对应了最多 7 个 IO 口,以线 0 为例:它对应了 GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到 1 个 IO 口上,这样就需要通过配置来决定对应的中断线配置到哪个 GPIO 上了。下面我们看看 GPIO 跟中断线的映射关系图
      在这里插入图片描述
    • 在库函数中,配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig()来实现的:
    	void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
    • IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数
      在这里插入图片描述
      从表中可以看出,外部中断线5 ~ 9分配一个中断向量,共用一个服务函数外部中断线10~15分配一个中断向量,共用一个中断服务函数
    • 中断服务列表:
    	EXPORT EXTI0_IRQHandler 
    	EXPORT EXTI1_IRQHandler 
    	EXPORT EXTI2_IRQHandler 
    	EXPORT EXTI3_IRQHandler 
    	EXPORT EXTI4_IRQHandler 
    	EXPORT EXTI9_5_IRQHandler 
    	EXPORT EXTI15_10_IRQHandler
    

    二、外部中断常用库函数
    1.常用函数

    • 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);//初始化中断线:触发方式等

    • ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);//判断中断线中断状态,是否发生

    • void EXTI_ClearITPendingBit(uint32_t EXTI_Line);//清除中断线上的中断标志位

    2.EXTI_Init函数

    • void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    typedef struct
    {
    	uint32_t EXTI_Line;       //指定要配置的中断线        
    	EXTIMode_TypeDef EXTI_Mode;      
      	EXTITrigger_TypeDef EXTI_Trigger; 
      	FunctionalState EXTI_LineCmd;    
    }EXTI_InitTypeDef;
    
    	EXTI_InitTypeDef EXTI_InitStructure;
     	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); //根据 EXTI_InitStruct 中指定的
    //参数初始化外设 EXTI 寄存器
    

    三、外部中断的一般步骤:

    1. 初始化IO口为出入
    GPIO_Init();
    
    1. 开启IO口复用时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    
    1. 设置IO口与中断线的映射关系
    GPIO_EXTILineConfig();
    
    1. 初始化线上中断,设置触发条件等
    EXTI_Init();
    
    1. 配置中断分组(NVIC),并使用中断
    NVIC_Init();
    
    1. 编写中断服务函数(格式在启动文件里)
    EXTIx_IRQHandler();
    基本格式:
    void EXTI3_IRQHandler(void)
    {
    	if(EXTI_GetITStatus(EXTI_Line3)!=RESET)//判断某个线上的中断是否发生 
    	{
    		中断逻辑…
    	}
    	EXTI_ClearITPendingBit(EXTI_Line3); //清除 LINE 上的中断标志位 
    }
    
    1. 清除中断标志位
    EXTI_ClearITPendingBit();
    

    四、以外部中断服务程序4,按键中断为例
    注:主函数中LED1一直亮,按键按下后关闭

    • main文件
    #include "stm32f10x.h"
    #include "delay.h"
    #include "exti.h"
    #include "key.h"
    int main(void)
    {	
      
    	delay_init();
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先组
    	EXTIX_Init();
    	KEY_Init();
      while(1)
    	{
    		LED1 = 1;
    	}
    }
    
    
    • key.c文件
    #include "key.h"
    void KEY_Init() //IO³õʼ»¯
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
    	GPIO_Init(GPIOE, &GPIO_InitStructure); 
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; 
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 
    	GPIO_Init(GPIOA, &GPIO_InitStructure); 
    }
    
    
    • key.h文件、
    #ifndef __KEY_H
    #define __KEY_H
    #include "sys.h"
    #define LED1 PAin(0)
    #define KEY1 PEin(4)
    
    
    void KEY_Init(void);  //³õʼ»¯
    
    #endif
    
    • exti.c文件
    #include "exti.h"
    #include "key.h"
    #include "delay.h"
    void EXTIX_Init(void)
    {
    	NVIC_InitTypeDef NVIC_InitStructure;
    	EXTI_InitTypeDef EXTI_InitStructure;
    	KEY_Init();
    	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
    	
    	EXTI_InitStructure.EXTI_Line = EXTI_Line4;
    	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    	
    	NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    	EXTI_Init(&EXTI_InitStructure);
    	NVIC_Init(&NVIC_InitStructure);
    
    }
    void EXTI4_IRQHandler(void)
    {
    	delay_ms(10);//消抖
    	if(KEY1 == 0){
    		LED1 = !LED1;
    	}
    	EXTI_ClearITPendingBit(EXTI_Line4);//清除中断线
    }
    
    
    • exti.h文件
    #ifndef __EXTI_H
    #define __EXTI_H
    #include "sys.h"
    void EXTIX_Init(void);
    #endif
    
    

    五、对于多个中断的设置方式(判断中断线,以外部中断13为例)

    • 基本格式
    void EXTI15_10_IRQHandler(void)
    {
      if(EXTI_GetITStatus(EXTI_Line13)==SET)
    	{
    		delay_ms(10);
    		if(KEY1==0)	
    		{
    			LED1=!LED1; 
    		}	
    		EXTI_ClearITPendingBit(EXTI_Line13); 
    	}
    }
    
    展开全文
  • (1) STM32的每个IO都可以作为外部中断输入。 (2) 每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。 STM32供IO使用的中断线只有16个,但是STM32F系列的IO口多达...

    一、IO口外部中断原理概述

    IO口外部中断:

    (1) STM32的每个IO都可以作为外部中断输入。

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

    STM32供IO使用的中断线只有16个,但是STM32F系列的IO口多达上百个,STM32F103ZGT6(112),那么中断线怎么跟IO口对应呢?

    SYSCFG_EXTICR1 寄存器中有EXTI0~EXTI4,EXTI0[3:0] 有四位,可以有16个序号为0的IO引脚与EXTI0相连。其他依次类推。

    16个中断线分配7个中断函数

    二、IO口外部中断的一般配置步骤:

    (1) 在用户定义的EXTI_Init( )函数中,使能IO口时钟。

    (2) 调用HAL_GPIO_Init( )初始化IO口,设置触发方式。

    (3) 设置中断优先级,并使能中断通道。

    (4) 在中断服务函数void EXTI0~4_IRQHandler( ) 中调用外部中断通用处理函数HAL_GPIO_EXTI_IRQHandler( )。

    (5) 在外部中断回调函数:HAL_GPIO_EXTI_Callback( )中编写我们真正的控制逻辑。

    展开全文
  • 1、单片机中断:找了一张 80C51 单片机的图如下:其中,在 P3.2、P3.3 的位置,即 12 ,13 引脚处,标有 INT0 和 INT1,那两个引脚就是外部中断的输入。上面一个横杠代表低电平有效,给 P3.2、P3.3 赋值 0,就可以...

    1、单片机中断:

    找了一张 80C51 单片机的图如下:

    a48ca28aa7c8b5547d556fbd35690a74.png

    其中,在 P3.2、P3.3 的位置,即 12 ,13 引脚处,标有 INT0 和 INT1,那两个引脚就是外部中断的输入。上面一个横杠代表低电平有效,给 P3.2、P3.3 赋值 0,就可以运行已经写好的中断服务程序。具体怎么用,还要熟悉一些中断寄存器的使用。

    2、中断寄存器:

    (1)、IE (Interrupt Enable):中断允许控制寄存器

    57e638250bf260de7cf2f975d46268f0.png

    EA (IE.7):EA=0 时,所有中断禁止(即不允许中断)

    EA=1 时,各中断的产生由个别的允许位决定

    ET2 (IE.5):定时器 2 溢出中断允许(8052 用,博主用的 STC89C54RD+ 也有)

    ES (IE.4):串口中断允许(ES=1 允许,ES=0 禁止,下同)

    ET1 (IE.3):定时器 1 中断允许

    EX1 (IE.2):外部中断 INT1 中断允许

    ET0 (IE.1):定时器 0 中断允许

    EX0 (IE.0):外部中断 INT0 中断允许

    (2)、IP (Interrupt Priority):中断优先级控制寄存器

    4c6774bea29eafd6953f6d2a8da687c9.png

    PX0:外部中断 0 的中断优先级控制位,PX0=1,外部中断 0 被定义为高优先级中断;PX0=0,外部中断 0 定义为低优先级中断

    PT0:定时器 T0 的中断优先级控制位,PT0=1,定时器 T0 被定义为高优先级中断;PT0=0,定时器 T0 定义为低优先级中断

    PX1:外部中断 1 的中断优先级控制位,PX1=1,外部中断 1 被定义为高优先级中断;PX1=0,外部中断 1 定义为低优先级中断

    PT1:定时器 T1 的中断优先级控制位,PT1=1,定时器 T1 被定义为高优先级中断;PT1=0,定时器 T1 定义为低优先级中断

    PS:串口中断优先级控制位,PS=1,串口中断被定义为高优先级中断;PS=0,串口中断定义为低优先级中断

    (暂时没用过,后续使用再更新)

    (3)、TCON (Timer Control Register):定时器/计数器控制寄存器

    这个寄存器在前面定时器里遇到过,再备份一下:

    39f3e05a76ec37cbb5214e1a534ed23b.png

    TF:定时器溢出标志,计数器溢出时硬件自动置位,即 TF=1,进入中断后再由硬件自动清除(TF=0)

    TR:计数器的控制位

    TR=1:计数器开始工作

    TR=0:计数器停止计数

    IE:外部中断 INT 的请求标志

    当单片机检测到 INT 引脚上有下降沿时,IE=1 申请中断,进入中断服务程序时,硬件自动清除 IE 标志

    IT:外中断触发类型控制

    IT=1 时,外中断信号的下降沿触发 IE 标志

    IT=0 时,外中断信号的低电平触发 IE 标志

    3、中断的编程使用:

    使用中断,就是说当发生某些事件的时候,运行“中断服务程序”,使用方法如下:

    void TImer0_ISR(void) interrupt 1 using 1

    {

    /* 此处编写中断服务的具体内容 */

    }

    语句 interrupt x using y 是指:此函数作为“x 号中断”的“中断服务程序”,并且使用“y 号寄存器组”“传递参数”。

    首先要清楚:80C51 单片机有 5 个中断源:2 个外部中断、2 个定时器中断(定时器 0 和 定时器 1)、1 个串口中断(8052 有 6 个中断源,多了一个定时器 2 中断),x 即为“中断号”:

    557831c594d5f0b0f2e8e5fbe9bea920.png

    上面的程序是定时器 0 的中断服务程序,因此是 interrupt 1;要是想按一个键进行中断,那么就是外部中断,因此是 interrupt 0 或者 interrupt 2。

    关键字 using,用来指定中断服务程序使用的“寄存器组”。用法是:using 后跟一个 0 到 3 的数,对应着 4 组工作寄存器。一旦指定工作寄存器组,默认的工作寄存器组就不会被压栈,这将节省 32 个处理周期,因为入栈和出栈都需要 2 个处理周期。这一做法的缺点是所有调用中断的过程都必须使用指定的同一个寄存器组,否则参数传递会发生错误。顺便一提,默认使用 0 号寄存器组,即:不写 using y 就会默认 using 0,因为主程序使用 0 号寄存器组做参数传递。

    补充:中断入口地址:

    62f23a1e139be442768a941ea59dc35c.png

    展开全文
  • ARM复位时从启动介质获取的代码为全F或者全0,而如果ADS调试将代码下载到外部RAM里边就会导致0x18地址没有中断处理代码,发生中断当然也就没有办法执行了,其实有几种处理方法:1使用ADS的分散加载机制。...
  • **STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢**? 使用 EXTI_GetITStatus()来查询哪根线产生了中断。比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否...
  • STM32共用中断和共用中断函数的判断

    千次阅读 2016-12-09 21:21:35
    STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢?使用 EXTI_GetITStatus()来查询哪根线产生了中断。 比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否...
  • ARM复位时从启动介质获取的代码为全F或者全0,而如果ADS调试将代码下载到外部RAM里边就会导致0x18地址没有中断处理代码,发生中断当然也就没有办法执行了,其实有几种处理方法: 1使用ADS的分散加载机制。...
  • STM32 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢? 使用 EXTI_GetITStatus()来查询哪根线产生了中断。比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否产生了中断的。 你...
  • 第2篇是中断篇,中断篇中介绍了中断系统必要性以及如何使用单片机中的中断系统(外部中断0、外部中断1、定时器/计数器0、定时器/计数器1、串行中断)。通过I/O篇与中断篇的学习,其实基本学习完51单片机了。应用篇的...
  • 第五章中断系统第六章定时器及应用一、判断下列说法的正误,并说明原因:1、中断允许寄存器IE的最高位(EA)为1是89C51系统响应中断的重要条件。...√5、89C51单片机中,外部中断源的优先级比内部中断源...
  • STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢? 使用 EXTI_GetITStatus()来查询哪根线产生了中断。比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否产生...
  • STM 32 EXTI

    2017-08-14 17:10:46
    IO 口外部中断1.STM32的每个IO都可以作为外部中断输入。 2.每个外部中断线可以独立的设置触发方式(上升沿,下降沿,或者双边沿触发),触发或是屏蔽,专用的状态位。 3.STM32供IO使用的中断线只有16个,但是STM32...
  • 8051定时器应用

    千次阅读 2011-04-29 20:51:00
    8051系列单片机中的定时器如何用来测量外部脉冲...然后GATE位置1,表示由外部中断引脚INT0的高低电平控制定时器0的启动和停止,INT0为高电平启动定时器计数,INT0为低电平时停止计数;C/T还是设为0,即作定时器使用,T
  • 存取控制中断 安全性错误配置 跨站脚本攻击(XSS) 不安全的反序列化 使用具有已知漏洞的组件 日志记录和监控不足 1.xxe中文名 XML 外部实体注入 2.xxe怎么利用 XML中可以通过调用实体来请求本地或者远程内容,...
  • HC-SR04超声波测距模块的使用时非常广泛的,而且驱动它的单片机也有很多。在这里我主要说一下51单片机的代码。 51单片机虽然简单,但是实际操作起来也会...1.ECHO的返回电平用外部中断的方式判断 2.在12MHz的晶振下
  • 第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...
  • 程序是想通过外部中断int0按键进行发送,串行中断发送/接受,但是怎么操作数码管都不变,串口助手也不现实接受的数字,求大神帮忙,本人大3ke'she ![图片说明]...
  • //SYSTICK使用外部时钟源 fac_us=SYSCLK/8; //不论是否使用ucos,fac_us都需要使用 #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. reload=SYSCLK/8; //每秒钟的计数...
  • Visual Studio程序员箴言中文扫描PDF

    热门讨论 2010-12-28 01:04:18
    技巧5.4 从“命令”窗口运行外部可执行程序 103 技巧5.5 创建命令别名 104 5.1.2 “输出“窗口 105 技巧5.6 使用f8键和shift+f8键在“输出”窗口中的错误之间导航 105 技巧5.7 双击“输出”窗口中的消息...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言...
  • dw1000-用户手册中文版

    2018-04-07 15:24:34
    辣鸡网站怎么把资源都涨价到35了,改回来 谷歌机翻+个人修正的user manul,感兴趣可以看看 目录 Initializing the driver 6 2 DW1000的概述 13 2.1简介 13 2.2连接到DW1000 13 2.2.1 SPI接口 13 .2.1.1 SPI工作模式 ...
  • Visual Studio程序员箴言--详细书签版

    热门讨论 2012-10-16 20:37:39
    技巧1.3 使用Ctrl+Enter组合键在上方插入一行,使用Ctrl+Shift+Enter组合键在下方插入一行 3 技巧1.4 使用Ctrl+W组合键选择当前单词 3 技巧1.5 使用Ctrl+Delete组合键删除下一个单词,使用Ctrl+Backspace组合...
  • 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。 5.20运行时的“nullpointerassignment”错误是什么意思?应该怎样捕捉它? 第6章 数组和指针 ...
  • IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义, ;但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中 __Vectors DCD __initial_sp ; Top of ...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

外部中断1怎么使用