精华内容
下载资源
问答
  • 2021-06-02 09:55:35

    快速导航
    STC12已封装好的函数库

    interrupt_ISR.c

    
    #define EA_ON 	EA = 1//总开总中断
    #define EA_OFF	EA = 0//关总中断
    
    /*************************************************
     *函数名称:void int0_Init(uchar mode)
     *函数说明:外部中断0初始化
     *输入:uchar mode 0为外部中断0低电平触发,1为外部中断0下降沿触发
     *返回:无
     *************************************************/
    void int0_Init(uchar mode)
    {
    	IE0  = 0;	     //将INT0中断请求标志位清"0"
    	EX0 = 1;	     //使能INT0中断允许位
    	IT0 = mode;		//选择INT0  IT0=0为低电平沿或IT0=1下降沿触发方式
    	EA_ON;			//开总中断
    }
    
    /*************************************************
     *函数名称:void int1_Init(uchar mode)
     *函数说明:外部中断1的初始化配置
     *输入:uchar mode 0为外部中断0低电平触发,1为外部中断0下降沿触发
     *返回:无
     *************************************************/
    void int1_Init(uchar mode)
    {
    	IE1  = 0;	     //将INT1中断请求标志位清"0"
    	EX1 = 1;	     //使能INT1中断允许位
    	IT1 = mode;		   //选择INT1 IT1=0为上升沿或IT1=1下降沿触发方式
    	EA_ON;		     //允许总中断
    }
    
    
    
    /**************************************
    功能描述:外部中断0服务程序
    入口参数:无
    返回值:无
    ***************************************/
    void INT0_Routine (void) interrupt 0		
    {
    	//以下为用户处理程序
    	
    }
    
    /**************************************
    功能描述:外部中断1服务程序
    入口参数:无
    返回值:无
    ***************************************/
    void INT1_int (void) interrupt 2		
    {
    	//以下为用户处理程序
    	
    }
    

    interrupt_ISR.h

    #ifndef _INTERRUPT_ISR_H
    #define _INTERRUPT_ISR_H
    
    //外部中断0初始化配置
    void int0_Init(uchar mode);
    
    //外部中断1的初始化配置
    void int1_Init(uchar mode);
    
    #endif
    
    更多相关内容
  • stm32端口、中断初始化及中断函数

    千次阅读 2019-07-24 19:38:39
    对于stm32端口、中断初始化及中断函数的调用 端口初始化 首先来看下官方提供的端口初始化库函数(以stm32f4xx为例) ps:很多时候看官方提供的函数比较困难,所以结合例子进行分析,部分官方代码未能展示,可在keil...

    对于stm32端口、中断初始化及中断函数


    端口初始化

    首先来看下官方提供的端口初始化库函数(以stm32f4xx为例)
    ps:很多时候看官方提供的函数比较困难,所以结合例子进行分析,部分官方代码未能展示,可在keil5中右键跳转查看

    //**一、使能配置时钟函数**
    void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
    
    //RCC_AHB1PeriphClockCmd 函数中的 FunctionalState NewState 参数
    typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
    
    //**二、GPIO初始化定义**
    typedef struct
    {
      uint32_t GPIO_Pin;              /*!< Specifies the GPIO pins to be configured.
                                           This parameter can be any value of @ref GPIO_pins_define */
    
      GPIOMode_TypeDef GPIO_Mode;     /*!< Specifies the operating mode for the selected pins.
                                           This parameter can be a value of @ref GPIOMode_TypeDef */
    
      GPIOSpeed_TypeDef GPIO_Speed;   /*!< Specifies the speed for the selected pins.
                                           This parameter can be a value of @ref GPIOSpeed_TypeDef */
    
      GPIOOType_TypeDef GPIO_OType;   /*!< Specifies the operating output type for the selected pins.
                                           This parameter can be a value of @ref GPIOOType_TypeDef */
    
      GPIOPuPd_TypeDef GPIO_PuPd;     /*!< Specifies the operating Pull-up/Pull down for the selected pins.
                                           This parameter can be a value of @ref GPIOPuPd_TypeDef */
    }GPIO_InitTypeDef;
    
    //**三、端口配置函数**
    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
    


    端口初始化例子

    #include "stm32f4xx.h" //stm32f4xx 头文件
    
    static GPIO_InitTypeDef GPIO_InitStructure;	//定义 GPIO_InitTypeDef 类型的结构体 GPIO_InitStructure
    
    int main()
    {
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);	//使能端口A的时钟
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);	//使能端口B的时钟
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;	//第 1 2 根引脚(可以使用位或增加多个引脚)
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;			//输出模式
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 		//输入或者输出处理频率 100MHz
    	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;			//推挽模式,增加输出电流的能力
    	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 		//不需要上下拉电阻
    	GPIO_Init(GPIOA, &GPIO_InitStructure); 					//**配置端口 A **
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;	//第 3 4 根引脚
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN 			//输入模式
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 		//输入或者输出处理频率 100MHz
    	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 			//推挽模式,增加输出电流的能力
    	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 		//不需要上下拉电阻
    	GPIO_Init(GPIOB, &GPIO_InitStructure); 					//**配置端口 B** 
    }
    


    中断初始化

    接下来看下官方提供的中断初始化库函数(以stm32f4xx为例)

    
    //**一、使能配置时钟函数**
    void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
    
    //**二、配置中断引脚**
    void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex);
    
    //**三、配置中断模式**
    typedef struct
    {
      uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.
                                             This parameter can be any combination value of @ref EXTI_Lines */
       
      EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.
                                             This parameter can be a value of @ref EXTIMode_TypeDef */
    
      EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
                                             This parameter can be a value of @ref EXTITrigger_TypeDef */
    
      FunctionalState EXTI_LineCmd;     /*!< Specifies the new state of the selected EXTI lines.
                                             This parameter can be set either to ENABLE or DISABLE */ 
    }EXTI_InitTypeDef;
    
    //**四、中断模式生效**
    void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    
    //**五、设置中断优先级分组**
    void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
    
    //**六、配置中断优先级**
    typedef struct
    {
      uint8_t NVIC_IRQChannel;                    /* !< Specifies the IRQ channel to be enabled or disabled.
                                                       This parameter can be an enumerator of @ref IRQn_Type 
                                                       enumeration (For the complete STM32 Devices IRQ Channels
                                                       list, please refer to stm32f4xx.h file) */
    
      uint8_t NVIC_IRQChannelPreemptionPriority;  /*!< Specifies the pre-emption priority for the IRQ channel
                                                       specified in NVIC_IRQChannel. This parameter can be a value
                                                       between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
                                                       A lower priority value indicates a higher priority */
    
      uint8_t NVIC_IRQChannelSubPriority;         /*!< Specifies the subpriority level for the IRQ channel specified
                                                       in NVIC_IRQChannel. This parameter can be a value
                                                       between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
                                                       A lower priority value indicates a higher priority */
    
      FunctionalState NVIC_IRQChannelCmd;         /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel
                                                       will be enabled or disabled. 
                                                       This parameter can be set either to ENABLE or DISABLE */   
    } NVIC_InitTypeDef;
    
    //**七、中断模式生效**
    void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
    
    


    中断初始化例子

    
    #include "stm32f4xx.h"
    
    static EXTI_InitTypeDef EXTI_InitStructure;	//定义 EXTI_InitTypeDef 类型结构体 EXTI_InitStructure
    static NVIC_InitTypeDef NVIC_InitStructure;	//定义 NVIC_InitTypeDef 类型结构体 NVIC_InitStructure
    
    int main(void)
    {
    	/*使能SYSCFG配置时钟*/
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);	
    	
    	/*配置一个输入引脚,引脚为PA0,将PA0引脚连接到外部中断线0*/
    	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
    
    	/* 配置外部中断线0为中断模式,触发方式为上升沿触发 */
    	EXTI_InitStructure.EXTI_Line = EXTI_Line0;					//外部中断线0
    	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;			//中断模式
    	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; 		//上升沿触发 ,只能检测到按键释放的状态
    	EXTI_InitStructure.EXTI_LineCmd = ENABLE;					//使能外部中断线0有效
    	EXTI_Init(&EXTI_InitStructure);                       	 	//配置完成该中断模式
    	
    	/*设置中断优先级分组2*/
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    
    	/*配置外部中断线0优先级*/
    	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;		   	 	//设置中断号
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;	//抢占优先级0x00
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;			//子(响应)优先级0x01
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;					//使能外部中断线0优先级有效
    	NVIC_Init(&NVIC_InitStructure);									//配置完成该中断优先级
    
    }
    
    


    中断函数

    该函数不能被调用,由硬件直接跳转

    
    //外部中断0中断服务函数
    void EXTI0_IRQHandler(void)	//中断服务函数EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler ...
    {
    	//检查中短线0是否由中断触发
    	if(EXTI_GetITStatus(EXTI_Line0) = SET)
    	{
    
    		void fun(void);//用户自定义内容
    		
    		//完成中断请求,结束该中断,可以处理新的外部中断。
    		EXTI_ClearITPendingBit(EXTI_Line0);
    	}
    }
    
    
    展开全文
  • 一.串口通信例子 实验内容:将一段固定的数据(数据+回车、换行符)通过电脑发送到单片机,单片机判断接收的数据是否正确,并将...2.外部中断初始化函数 3.外部中断配置步骤: 新建一个自己的文件夹,然后再新建一个L

    一.串口通信例子

    实验内容:将一段固定的数据(数据+回车、换行符)通过电脑发送到单片机,单片机判断接收的数据是否正确,并将接收的数据重新发送到电脑。

    通过判断是否接收到回车符0x0d和换行符0x0a来判断是否接收完整个数据。

    数据大约是这种样式:ABCDEFG…(0x0d、0x0a)

    在这里插入图片描述

    中断服务函数:

    在这里插入图片描述

    main()函数:

    在这里插入图片描述

    二.外部中断:

    1.外部中断的概述:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    注意:并不是每一个中断线都分配了一个中断函数。

    在这里插入图片描述

    2.外部中断初始化函数

    在这里插入图片描述

    3.外部中断配置步骤:

    在这里插入图片描述

    新建一个自己的文件夹,然后再新建一个LED和KEY的文件夹,用来分别放led和key代码。具体可以参考之前的文章:

    如何新建自己的.h和.c文件

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.实验结果:按键每按一次,小灯状态反转。

    展开全文
  • CC2530中断初始化和中断函数

    千次阅读 2020-07-21 20:37:06
    中断初始化 其实中断的初始化可以参照引脚的初始化,即4个寄存器(PxSEL,PxDIR,PxINP,P2INP)。中断同样也要初始化 1)初始化输入信号寄存器(PICTL) 设置中断的触发(开始)条件 例如:PICTL |= 0x01 设置端口P0_7...

    相关寄存器在cc2530中文数手册中2.4小节

    中断初始化

    其实中断的初始化可以参照引脚的初始化,即4个寄存器(PxSEL,PxDIR,PxINP,P2INP)。中断同样也要初始化

    1)初始化输入信号寄存器(PICTL)

    设置中断的触发(开始)条件
    例如:PICTL |= 0x01 设置端口P0_7中断触发方式为下降沿触发
    PICTL &=~0x02 设置端口P1_2中断触发方式为上升沿触发
    在这里插入图片描述

    2)初始化中断使能端口寄存器(PxIEN)

    设置Px端口中断使能
    例如:P0IEN |=0x02 使能端口0_1
    P1IEN |=0x08 使能端口1_3
    在这里插入图片描述

    3)初始化中断使能寄存器1(可位寻址)

    例如:P0IE=1 端口0中断使能 也可以写为 IEN1 |=0x20
    P1IE=1 端口1中断使能 也可以写完 IEN2 |=0x10
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    4)打开总中断

    EA=1 或者 IEN0 |=0x80
    在这里插入图片描述

    5)PxIFG 中断状态标志寄存器

    例如 P0IFG |= 0x0F 设置端口P0_0到P0_3的端口请求状态
    在这里插入图片描述

    中断函数

    中断函数没有返回值和参数

    中断向量名称

    在这里插入图片描述

    #pragma vector = <中断向量>
    __interrupt void <中断名称>(void){
    if(判断中断到来标志位是否是1{
    	EA=0;//关闭总中断
    	 delay(100);//延时防止抖动
    	 //操作
    	 P0IFG &= ~0x02;//手动清除Px端口的标志位
      }
      P0IFG =0;//复位Px端口的标志位
      EA=1;
    }
    

    上面代码和例子仅供参考,如果有误请留言。

    
    
    展开全文
  • STM32外部中断初始化

    千次阅读 2017-07-30 20:21:07
    #include "exti.h" /******************************************************************************* * 函 数 名 : exti_init * 函数功能 : 外部中断2端口初始化函数 * 输 入 : 无 * 输 出 : 无
  • 合泰杯——合泰单片机工程4之外部中断前言一、中断初始化函数二、中断函数主函数总结 前言 继上一次的按键输入工程,这一次我们来利用按键来进行外部中断实验,当按键按下时,单片机去执行中断函数的程序,也就是...
  • C51之外部中断

    千次阅读 2018-02-25 09:44:40
    名称:C51之外部中断实验 说明:关于什么是中断这里就不说了。说说计算机中使用中断有什么好处吧。 (1)、实时处理。在计算机控制系统中,环境、参数的突然变化,可能需要 CPU立即做出相应或处理。 (2)...
  • 51单片机基础(1) -外部中断

    千次阅读 2021-08-04 20:54:29
    外部中断 以下是假期对51单片机课程内容做的一些小结 中断的基本概念 中断: CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,转而为该外设服务(或者是处理...
  • 没想到一个月学了这么多,再来-_- 外部中断() 首先初始化IO口为输入,并且初始化AFIO时钟 1 配置GPIO与中短线的关系: void GPIO_EXTILineConfig(uint8_t ...2初始化外部中断函数: void EXTI_Init(EXTI_InitTyp...
  • 外部中断0——51程序

    万次阅读 2016-09-12 23:16:22
    51单片机中一共有5个中断方式: ①外部中断0 ②定时器中断0 ③外部中断1 ④定时器中断1 ⑤串口中断 ...void int0_init() //外部中断0初始化函数 { EA = 1; //打开总中断 IT0 = 1; /*设置中断触发方式:
  • 中断&定时器/计数器初始化说明

    千次阅读 2021-01-06 17:37:00
    定时器/计数器初始化过程:...void timer0_init(void)//定时器0中断初始化函数 { TMOD=0x80; //将定时器/计数器0当成13位定时器/计数器,TL0只用低5位参与分频,TH0整个8位全用。 TH0=0xXX; //设定定时器0初始计数值
  • stm32在中断函数里执行初始化函数

    千次阅读 2018-06-12 15:37:05
    最近用了stm32f030c8t6,要求做低功耗:1、关闭外设时钟并把管脚都配置成模拟输入...找了好久才想起来,我的唤醒初始化函数是在外部中断函数中执行的,初始化函数中用了延时函数,延时需要执行systick中断函数,中断...
  • 【51单片机】外部中断

    千次阅读 多人点赞 2021-12-07 11:12:13
    51的 外部中断 与 定时器(内部中断) 有一个共同特点,那就是与主程序是并行工作的,就是主程序在运行的时候,中断也在等待触发条件,当中断被触发的时候会暂停主程序转而执行中断服务程序,只有中断服务程序执行完后...
  • 中断的相关概念2.CC2530中断系统3.CC2530中断处理函数编写方法4.CC2530外部中断5.案例:外部中断输入控制LED灯 1.中断的相关概念 内核与外设之间的主要交互方式:轮询、中断 轮询的方式貌似公平,但实际工作效率...
  • 使用STM32F103ZET6开发板,利用HAL库进行的STM32CubeMX学习笔记三:STM32的中断系统与外部中断基础
  • 外部中断实验

    2020-12-06 15:54:37
    外部中断概述 1、 STM32的每个IO都可以作为外部中断输入。 2、 STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到...
  • STM32CubeMX教程3 — 外部中断 前期准备: ①:STM32硬件(我的是STM32F103ZET6) ②:STM32CubeMX Keil5 实验目的 通过按键(Key)外部中断的方式控制一个灯的亮灭 (我的Key对应PE4) 思维导图 新建工程 1.设置...
  • 第一个问题,关于中断线的理解。stm32的每个IO口都可以作为外部中断的输入口,但外部中断中与IO相关的中断线只有16条(IO口有几十个甚至上百个)。为什么要这样呢?...1)初始化 IO 口为输入。(外部中
  • 问题: 存在开机后初始化,在TIM...初始化函数最后已经关闭定时器: TIM_Cmd(TIM3, DISABLE); //暂关闭TIMx外设。将这个函数提到初始化最前面也没用。 解决方法: 总结:应该是TIM_TimeBa
  • GPIO初始化&中断控制器初始化

    千次阅读 2020-01-11 23:00:23
    GPIO中断初始化: int SetupInterrupt ( ) { int status ; //第一步:初始化异常处理 Xil_ExceptionInit ( ) ; //第二步:初始化中断控制器 GicCfgPtr = XScuGic_LookupConfig ( SCUGIC_ID ) ;...
  • 进一步理解中断函数

    千次阅读 2021-05-18 17:10:05
    1.另一个外部中断前面两讲都是围绕外部中断0(P3.2的功能)来讲解,这里我们也还有一个外部中断1(P3.3的功能)。P3.3要想实现上一讲的功能只需杜邦线接下面的IO端口即可代码就是把“EX0”改为“EX1”,“IT0”改为“IT1...
  • 每按一下按键(外部 0 中断 P3.2),8 个 LED 从下向上流水 1 次。 电路图: 代码: #include<reg51.h> #include<intrins.h> void delay(unsigned int m) { unsigned int i; for(;m>0;m--) { ...
  • 说在前面:记得前几天写了一个用按键来控制灯的函数,但是无论怎样都无法实现函数的重复使用,一开始以为是没有设置好循环,但是,因为没有实现外部中断才做不了循环操作2.外部中断1.作为STM32而言,每一个IO口都...
  • 在库函数中,配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig()来实现的: void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) 该函数将 GPIO 端口与中断线映射起来,使用范例是...
  • 【STM32】外部中断实验代码详解

    千次阅读 2021-09-22 20:59:36
    文章目录exit.c exit.c #include "exti.h" ...//外部中断初始化函数 void EXTIX_Init(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(R
  • 中断 TMOD:定时器/计数器工作方式寄存器...外部中断0初始化初始化方法一: void Init_INT0() { IT0=1;//设置外部中断0;下降沿触发 EX0=1;//开启外部中断0; EA=1;//开启中断总开关 } 初始 化方法二: void
  • STM32 关于外部中断线、中断源和中断服务函数的问题 中断线问题: 上图可以看出,PA0、PB0...PG0共用的EXTI0中断线,PA1、PB1...PG1共用的EXTI1中断线,也就是 编程里面的(如下图库文件),对应16个中断线,...
  • 了解STM32的NVIC中断优先级管理及初始化简介NVIC总结NVIC中断优先级分组中断优先级设置 简介 1、CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可程中断设置。 2、STM32F103系列...
  • (1)超声波被调用初始化函数,定时器被设定为可中断,并且定时器开始计数; (2)计数到溢出,触发定时器中断,它会调用超声波启动函数Ultrasound_start(); (3)超声波启动后,有回波信号,将触发外部中断...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,937
精华内容 28,374
关键字:

外部中断初始化函数