精华内容
下载资源
问答
  • stm32外部中断实验

    2017-11-12 15:11:40
    stm32外部中断实验,初学者入门学习交流,stm32f107zet6
  • STM32外部中断实验

    2018-11-14 10:54:47
    亲测可用,可以用来做STM32外部中断,有问题可以联系或者在评论区评论
  • stm32 外部中断 按键的误触发

    千次阅读 2019-04-20 22:40:14
    最近在调试按键作为外部中断exti进行触发动作,发现每次按键按下和按键抬起都会多次进入中断函数,造成程序不稳定,经过反复调试和查阅资料,最后终于已经把这个问题解决,现在总结一下: 1、EXTI重复配置两次导致...

    最近在调试按键作为外部中断exti进行触发动作,发现每次按键按下和按键抬起都会多次进入中断函数,造成程序不稳定,经过反复调试和查阅资料,最后终于已经把这个问题解决,现在总结一下:

    1、EXTI重复配置两次导致误触发中断的问题

    如果重复两次配置EXTI的话,由于第一次已经打开中断,当进行第二次配置中断的时候,会把中断引脚首先配置成默认引脚,然后在配置成目的引脚,这样由于默认引脚是低电平,所以在切换的过程中就会进入一次中断!!具体请参见:http://bbs.elecfans.com/jishu_942011_1_1.html

    2、STM32F401 外部中断误触发问题

    现象:调试STM32F411低功耗的时候,使用的PA1做个唤醒源,发现在没有触发EXTI的时候,MCU居然被唤醒。

    原因:PA1配置成EXTI(上拉输入),经常被误触发

    解决方式:将PA1配置成浮空输入(GPIO_PuPd_NOPULL),并且外部上拉一个4.7k电阻,就不会误触发了。

    这种bug的原因一直没有搞清,先记下省的以后就忘记了,猜测可能是STM32芯片bug。

    具体参见:http://www.bubuko.com/infodetail-2688888.html

    注:我用的是stm32F429,没有发现这个bug,但是记录下来作为开拓思路的一种方法。

    3、stm32外部中断,EXTI_ClearITPendingBit,先清和后清的区别

    前面清的话,如果下一次中断在该次中断退出前到来,那么退出该次中断后,会马上进入下一次中断,后面清的话,在该次中断退出前到来的中断就会被忽略,这里后到来的中断,指的是同样的中断

    由于按键抖动一般在ms量级,而中断服务程序一般都是us量级,因此对于按键防抖来说,前面清和后面清影响不大,但是为了保险起见,还是在中断函数的后面清比较好。

    4、进入中断之后失能EXTI中断

    这种方式最终解决了我的按键防抖问题,大体思路就是:进入中断之后立即失能中断,等处理完响应的操作之后,在使能中断,这样的话当第一次进入中断之后不会再次进入中断,直到再次使能中断之后。

     

    展开全文
  • STM32外部中断实验-EXTI

    2020-10-19 13:51:42
    STM32 外部中断简介 STM32 的每个 IO 都可以作为外部中断 的中断输入口,这点也是 STM32 的强大之处。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽...

    STM32 外部中断简介

    STM32 的每个 IO 都可以作为外部中断
    的中断输入口,这点也是 STM32 的强大之处。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的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 跟中断线的映射关系图:
    在这里插入图片描述
    在这里插入图片描述

    中断触发方式

    相应的触发方式
    上升沿触发:数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间叫作上升沿。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。
    下降沿触发:数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。 [1] 下降沿触发是当信号有下降沿时的开关动作,当电位由高变低而触发输出变化的就叫下降沿触发。也就是当测到的信号电位是从高到低也就是下降时就触发,叫做下降沿触发。
    边沿触发:既可以上升触发也可以下降触发

    上升沿触发 就是当电压从低变高时触发中断
    下降沿触发 就是当电压从高变低时触发中断

    外部中断常用库函数

    1. 设置IO口与中断线的映射关系
    GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
    
    1. 初始化中断线、触发方式等
    EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    

    在这里插入图片描述

    1. 判断中断线中断状态,是否发生
    EXTI_GetITStatus(uint32_t EXTI_Line);
    
    1. 清楚中断线上的中断标志位
    EXTI_ClearITPendingBit(uint32_t EXTI_Line);
    

    外部中断的一般配置步骤

    IO 口外部中断的一般步骤:
    1初始化 IO 口为输入。
    2开启 AFIO 时钟
    3设置 IO 口与中断线的映射关系。
    4初始化线上中断,设置触发条件等。 5)配置中断分组(NVIC),并使能中断。
    6编写中断服务函数。
    通过以上几个步骤的设置,我们就可以正常使用外部中断了。
    具体函数:

    1. 初始化IO的输入
    GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
    
    1. 开启IO口复用时钟
    RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
    
    1. 设置IO口与中断线的映射关系
    GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
    
    1. 初始话线上中断,设置触发条件
    EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    
    1. 配置中断分组(NVIC),并使能中断
    NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
    
    1. 编写中断服务函数
    EXTI4_IRQHandler()
    
    1. 清除中断标志位
    EXTI_ClearITPendingBit(uint32_t EXTI_Line);
    

    按键硬件连接图

    在这里插入图片描述
    上面的KEY_UP刚刚相反设置成下拉输入

    实验代码

    外部中断初始化代码
    开启复用时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启复用时钟
    

    设置IO口与中断线的映射关系

    /*这里用按键0(KEY0对应的IO口时PE4)为例*/
    	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
    

    初始化中断线、触发方式等

    	EXTI_InitTypeDef EXTI_InitTypeDefSture;
    	EXTI_InitTypeDefSture.EXTI_Line    	=	EXTI_Line4;//指定要配置的中断线PE4对应的时EXTI4
    	EXTI_InitTypeDefSture.EXTI_LineCmd	=	ENABLE;//使能
    	EXTI_InitTypeDefSture.EXTI_Mode			=	EXTI_Mode_Interrupt;//选择中断
    	EXTI_InitTypeDefSture.EXTI_Trigger	=	EXTI_Trigger_Falling;//下降沿触发方式(结合原理图)
    	EXTI_Init(&EXTI_InitTypeDefSture);
    

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

    	NVIC_InitTypeDef NVIC_InitStrue;
    	NVIC_InitStrue.NVIC_IRQChannel										=	EXTI4_IRQn;
    	NVIC_InitStrue.NVIC_IRQChannelCmd									= ENABLE;
    	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority	=	0x02;//根据主函数里面的设置
    	NVIC_InitStrue.NVIC_IRQChannelSubPriority					= 0x02;
    	NVIC_Init(&NVIC_InitStrue);
    

    中断服务函数

    void EXTI4_IRQHandler(void)
    {
    	
    	delay_ms(200);//防抖
    	if(KEY0 == 0){//判断按键KEY0是否按下
    		LED0 = !LED0;//灯反转(亮变暗或者暗变亮)
    		LED1 = !LED1;
    		
    	}
    	EXTI_ClearITPendingBit(EXTI_Line4);// 清除中断标志位
    	
    	
    }
    

    exti.c

    #include "exti.h"
    #include "key.h"
    #include "led.h"
    #include "delay.h"
    
    void EXTI_Init()
    {
    	EXTI_InitTypeDef EXTI_InitTypeDefSture;
    	NVIC_InitTypeDef NVIC_InitStrue;
    	
    	KEY_Init();
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启复用时钟
    	
    	/*设置IO口与中断线的映射关系*/
    	/*这里用按键0(KEY0对应的IO口时PE4)为例*/
    	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
    	
    	/* 初始化中断线、触发方式等*/
    	EXTI_InitTypeDefSture.EXTI_Line    	=	EXTI_Line4;//指定要配置的中断线PE4对应的时EXTI4
    	EXTI_InitTypeDefSture.EXTI_LineCmd	=	ENABLE;//使能
    	EXTI_InitTypeDefSture.EXTI_Mode			=	EXTI_Mode_Interrupt;//选择中断
    	EXTI_InitTypeDefSture.EXTI_Trigger	=	EXTI_Trigger_Falling;//下降沿触发方式(结合原理图)
    	EXTI_Init(&EXTI_InitTypeDefSture);
    	
    	/*配置中断分组(NVIC),并使能中断*/
    	NVIC_InitStrue.NVIC_IRQChannel										=	EXTI4_IRQn;
    	NVIC_InitStrue.NVIC_IRQChannelCmd									= ENABLE;
    	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority	=	0x02;//根据主函数里面的设置
    	NVIC_InitStrue.NVIC_IRQChannelSubPriority					= 0x02;
    	NVIC_Init(&NVIC_InitStrue);
    }
    
    void EXTI4_IRQHandler(void)
    {
    	
    	delay_ms(200);//防抖
    	if(KEY0 == 0){//判断按键KEY0是否按下
    		LED0 = !LED0;灯反转(亮变暗或者暗变亮)
    		LED1 = !LED1;
    		
    	}
    	EXTI_ClearITPendingBit(EXTI_Line4);// 清除中断标志位
    	
    	
    }
    main.c
    
    ```c
    #include "stm32f10x.h"
    #include "exti.h"
    #include "led.h"
    #include "key.h"
    #include "delay.h"
    
    int main(void)
    {
    	delay_init();
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    	KEY_Init();//案件初始化
    	LED_Init();//灯初始化
    	EXTIX_Init();//外部中断初始化
    	LED0 = 0;//灯亮起
    	while(1);
    			
    }
    
    

    实验效果

    上电后LED0亮着,当按下KEY0后,LED0熄灭LED1亮起,再次按下后LED0亮起哦,LED1熄灭。(其余按键均可设置相关操作)

    想要整个工程文件可私聊

    展开全文
  • 最近在调试按键作为外部中断exti进行触发动作,发现每次按键按下和按键抬起都会多次进入中断函数,造成程序不稳定,经过反复调试和查阅资料,最后终于已经把这个问题解决,现在总结一下:1、EXTI重复配置两次导致误...

    最近在调试按键作为外部中断exti进行触发动作,发现每次按键按下和按键抬起都会多次进入中断函数,造成程序不稳定,经过反复调试和查阅资料,最后终于已经把这个问题解决,现在总结一下:

    1、EXTI重复配置两次导致误触发中断的问题

    如果重复两次配置EXTI的话,由于第一次已经打开中断,当进行第二次配置中断的时候,会把中断引脚首先配置成默认引脚,然后在配置成目的引脚,这样由于默认引脚是低电平,所以在切换的过程中就会进入一次中断!!具体请参见:http://bbs.elecfans.com/jishu_942011_1_1.html

    2、STM32F401 外部中断误触发问题

    现象:调试STM32F411低功耗的时候,使用的PA1做个唤醒源,发现在没有触发EXTI的时候,MCU居然被唤醒。

    原因:PA1配置成EXTI(上拉输入),经常被误触发

    解决方式:将PA1配置成浮空输入(GPIO_PuPd_NOPULL),并且外部上拉一个4.7k电阻,就不会误触发了。

    这种bug的原因一直没有搞清,先记下省的以后就忘记了,猜测可能是STM32芯片bug。

    具体参见:http://www.bubuko.com/infodetail-2688888.html

    注:我用的是stm32F429,没有发现这个bug,但是记录下来作为开拓思路的一种方法。

    3、stm32外部中断,EXTI_ClearITPendingBit,先清和后清的区别

    前面清的话,如果下一次中断在该次中断退出前到来,那么退出该次中断后,会马上进入下一次中断,后面清的话,在该次中断退出前到来的中断就会被忽略,这里后到来的中断,指的是同样的中断

    由于按键抖动一般在ms量级,而中断服务程序一般都是us量级,因此对于按键防抖来说,前面清和后面清影响不大,但是为了保险起见,还是在中断函数的后面清比较好。

    4、进入中断之后失能EXTI中断

    这种方式最终解决了我的按键防抖问题,大体思路就是:进入中断之后立即失能中断,等处理完响应的操作之后,在使能中断,这样的话当第一次进入中断之后不会再次进入中断,直到再次使能中断之后。

    展开全文
  • stm32 外部中断例程,按键控制灯的亮灭 IAR6.1 FWLib3.0版本
  • 在USER目录里打开工程,HARDWARE\exti.c文件内有详细的编写外部中断流程。实验室配合按键输入编写的外部中断。使用的开发板是正点原子的stm32F767
  • stm32 外部中断应用

    2018-07-04 21:09:29
    stm32 外部中断应用,里面有详细的代码介绍,里面有详细的代码介绍,里面有详细的代码介绍,
  • 20190428-stm32外部中断按键

    千次阅读 2019-04-28 21:45:11
    void EXTI0_IRQHandler (void) //中断服务函数 进行中断时的执行程序 比如灯亮 { static char n=1; // static静态变量 只初始化一次 且n=1,按第一下就亮 delay_us(100); //按键防抖 if(!(GPIOA->IDR & 1<...

    void EXTI0_IRQHandler (void) //中断服务函数 进行中断时的执行程序 比如灯亮
    {
    static char n=1; // static静态变量 只初始化一次 且n=1,按第一下就亮
    delay_us(100); //按键防抖
    if(!(GPIOA->IDR & 1<<0)) //按下按键后为 低电平
    {
    if(n1)
    {
    led3_on();
    delay_ms(1000);
    }
    if(n
    0)
    {
    led3_off();
    delay_ms(1000);
    }
    n=!n; //按一次,状态变化一次
    }

    EXTI->PR |=1<<0;   //中断挂起 中断退出
    

    }

    展开全文
  • STM32外部中断处理流程pdf,STM32外部中断处理流程
  • STM32F407ZE开发板外部中断驱动按键,实现按键控制LED灯的开关. main.c部分: #include <stm32f4xx.h> //该头文件作用和reg51.h是一样的 #include "sys.h" #include "led.h" #include "key.h" #include "delay...
  • stm32 外部中断成功

    2011-12-06 14:52:49
    stm32 外部中断成功,按键,进入中断,然后点灯,大家可以看看呢
  • 外部中断常用库函数 外部中断的一般配置步骤 实验代码
  • STM32外部中断方式按键操作(STM32_09)

    千次阅读 2018-05-12 12:04:06
    一、中断配置的步骤1、使能中断2、设置中断优先级分组void NVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup);#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*0位抢占,4位响应 */ #define NVIC_...
  • 详细可查看:【STM32开发】STM32外部中断 注意:A > B是指中断级别更高,0是最高,15为最小,0 > 15 举个栗子: 有A、B两个中断 一、抢占式优先级 : A > B 1.B先进入中断子程序,但并没有执行完,此时A...
  • STM32 外部中断

    2019-07-24 11:54:01
    STM32 的每个 IO 都可以作为外部中断的中断输入口,STM32F103 的中断控制器支持 19 个外部中断事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为: 线 0~15:...
  • 本文中的按键连接到PC6,所以初始化STM32中C组的第6引脚为输入。 第二部分是NVIC初始化: 设置中断源:哪一个引脚就对应哪一个中断源。 设置IRQ通道:每一个引脚对应的通道不一样,可以跳转到stm32f10x.h文件中查看...
  • 使用外部中断的方式实现按键控制LED灯,不使用按键扫。适合刚入门的新手
  • STM32外部中断(基于STM32F103库函数版本)

    万次阅读 多人点赞 2018-02-05 03:03:12
    说明:本文旨在详细解析STM32外部中断,以实现按键触发外部中断。其中包含“编程流程”、“程序代码”、“代码解析”、“原理分析”、“小结”五部分。 一、编程流程 要实现STM32外部中断,按照基本流程来讲,...
  • stm32外部中断按键消抖(电路与stm32程序),测试通过。按键消抖动,抗干扰5768875687687687678
  • STM32-外部中断实验

    2019-01-14 10:39:51
    原地址:http://www.openedv.com/posts/list/21.htm 这一节,我们将向大家介绍如何使用STM32的外部输入中断。...本节分为如下几个部分: 3.4.1 STM32外部中断简介 3.4.2 硬件设计 3.4.3 软件设计 3.4.4 ...
  • 实验名称: 外部中断实验 硬件模块: STM32F407核心板V2.0 硬件接线: 实验现象: 按下按键KEY_UP,出现LED0~LED3的流水灯 按下按键KEY0 ,出现LED4~LED7的流水灯 按下按键KEY1 ,出现LED4~LED7的反向流水灯 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,769
精华内容 1,507
关键字:

stm32外部中断按键实验