精华内容
下载资源
问答
  • 开发环境为vivado2018.3。本资源解压后,可直接用vivado打开。流畅顺利的使用按键中断控制LED
  • 单片机MSP430G2553的按键中断控制LED亮灭状态切换程序,其他程序比如非按键中断、定时器中断、PWM等单片机MSP430G2553系列代码我会陆续上传,敬请期待。
  • tiny6410 按键中断控制LED 亮灭, KEY1~4控制点亮LED1~4; KEY5~8控制熄灭LED1~4。
  • 【嵌入式】按键中断控制 LED 1. 操作内容2. 原理解释2.1 实验箱按键电路2.2 实验箱LED电路2.3 寄存器说明3. 操作步骤3.1 编写键控制 LED 代码,将代码编译为二进制文3.2 安装 USB 驱动3.2 使用 DNW 软件下载裸机程序...

    1. 操作内容

    1. 熟悉中断控制主程序需要进行的步骤
    2. 熟悉中断服务程序需要进行的步骤
      利用按键SW5实现按键中断控制LED。按下按键SW5,4个LED同步闪烁,再次按下按键,4个LED全灭。编写系统的启动代码、按键中断控制程序、头文件以及Makefile文件,编译得到
    展开全文
  • EXTI:通过按键中断控制led灯亮灭

    千次阅读 2020-07-03 16:48:42
    介绍EXTI的使用方法及基本原理 并且包括实验通过按键中断控制led灯的亮灭

    前言

    已经详细介绍了 NVIC,对 STM32F10x 系列中断管理系统有个全局的了解,这章的内容是 NVIC 的实例应用,也是 STM32F10x 控制器非常重要的一个资源。

    STM32的通用I/O引脚可以直接映射为外部中断通道或事件输出,用于产生中断/事件请求。这就需要微控制器上的另一个外设——EXTI。

    1.EXTI功能框图

    外部中断/事件控制器, 管理了控制器的 20个中断/事件线(EXTI19只适用于以太网唤醒事件(只适用互联型)微控制器)。
    每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。 EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性

    在这里插入图片描述

    EXTI 可分为两大部分功能:
    一个是产生中断(红色虚线),红色虚线指示的电路流程。它是一个产生中断的线路,最终信号流入到 NVIC 控制器内。
    另一个是产生事件(绿色虚线),这两个功能从硬件上就有所不同。
    产生中断线路目的是把输入信号输入到 NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级的。

    另外, EXTI 是在 APB2 总线上的,在编程时候需要注意到这点。

    2. 中断/事件线

    EXTI 有 20 个中断/事件线,每个 GPIO 都可以被设置为输入线,占用 EXTI0 至EXTI15,还有另外七根用于特定的外设事件,见表:
    在这里插入图片描述
    根特定外设中断/事件线由外设触发,具体用法参考《STM32F10X-中文参考手册》中对外设的具体说明

    3.外部中断配置寄存器(AFIO_EXTICR1)

    EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO 作为 EXTI 的输入源。

    EXTI可以通过 AFIO 的外部中断配置寄存(AFIO_EXTICR)的
    EXTI0[3:0]位选择配置为 PA0、 PB0、 PC0、 PD0、 PE0、 PF0、 PG0。这样的寄存器有4个,每一个寄存器控制4条事件线。GPIO有16个端口,就需要4个寄存器来控制。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.EXTI 初始化结构体

    初始化结构体和初始化库函数配合使用是标准库精髓所在,理解了初始化结构体每个成员意义基本上就可以对该外设运用自如了。

    typedef struct {
    uint32_t EXTI_Line; // 中断/事件线选择,可选 EXTI0 至 EXTI19
    EXTIMode_TypeDef EXTI_Mode; // EXTI 模式可选为产生中断(EXTI_Mode_Interrupt)或者产生事件(EXTI_Mode_Event)。
    EXTITrigger_TypeDef EXTI_Trigger; // 触发类型可选上升沿触发(EXTI_Trigger_Rising)、下降 沿 触 发 ( EXTI_Trigger_Falling) 或 者 上 升 沿 和 下 降 沿 都 触 发( EXTI_Trigger_Rising_Falling)。
    FunctionalState EXTI_LineCmd; // EXTI 使能控制是否使能 EXTI 线,可选使能 EXTI 线(ENABLE)或禁用(DISABLE)。
    } EXTI_InitTypeDef;
    

    5.外部中断控制实验:按键控制led灯的亮灭

    5.1 硬件设计

    PA0接按键
    PB0接led灯

    5.2 软件设计

    1-初始化要连接到EXTI的GPIO
    2-初始化EXTI用于产生中断/事件
    3-初始化NVIC,用于处理中断
    4-编写中断服务函数
    5-main函数

    具体代码看下面,都有详细的注释

    bsp_exti.c内容:

    #include "bsp_exti.h"
    
    /*
    
    1-初始化要连接到EXTI的GPIO
    2-初始化EXTI用于产生中断/事件
    3-初始化NVIC,用于处理中断
    
    */
    
    static void GPIO_Configuration(void)//使用static,此函数只能在 bsp_exti.c 文件中调用
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	
    	//打开GPIO口的时钟
    	RCC_APB2PeriphClockCmd(KEY_INT_GPIO_CLK, ENABLE);
    	
    	/* 选择按键用到的 GPIO */
      GPIO_InitStructure.GPIO_Pin = KEY_INT_GPIO_PIN;
      /* 配置为浮空输入 */
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_Init(KEY_INT_GPIO_PORT, &GPIO_InitStructure);
    }
    
    //初始化EXTI
    static void EXTI_Configuration(void)//使用static,此函数只能在 bsp_exti.c 文件中调用
    {
    	EXTI_InitTypeDef EXTI_InitStructure;   //定义一个结构体变量
    	
    	//选择信号源
    	GPIO_EXTILineConfig(KEY_INT_EXTI_PORTSOURCE, \
      KEY_INT_EXTI_PINSOURCE);
    	
    	// 结构体初始化,在stm32f10x_exti.h中,那个线   0
      EXTI_InitStructure.EXTI_Line = KEY_INT_EXTI_LINE;
    	
    	/* EXTI 为中断模式0x00 ,还有一种事件模式0x04*/
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
      /* 上升沿中断 */
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
      /* 使能中断 */
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure);
    }
    
    
    //初始化NVIC
    static void NVIC_Configuration(void)//使用static,此函数只能在 bsp_exti.c 文件中调用
    {
    	NVIC_InitTypeDef NVIC_InitStructure;
    	
    	/* 配置 NVIC 为优先级组 1 */
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//函数在misc.c中
    	
    	/* 配置中断源:按键 ,四个结构体成员初始化,在misc.h中 */
      NVIC_InitStructure.NVIC_IRQChannel = KEY_INT_EXTI_IRQ;
    	
    	/* 配置抢占优先级: 1 */
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
      /* 配置子优先级: 1 */
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    	
    	/* 使能中断通道 */
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    	
    }
    
    
    
    void EXTI_Config(void)
    {
    	/* 配置GPIO   */
    	GPIO_Configuration();
    	
    	/* 配置 NVIC 中断*/
      NVIC_Configuration();
    	
    	/* 配置 EXTI */
      EXTI_Configuration();
    }
    

    bsp_exti.h内容:

    #ifndef __BSP_EXTI_H
    #define __BSP_EXTI_H
    
    #include "stm32f10x.h"
    
    #define KEY_INT_GPIO_PIN              GPIO_Pin_0
    #define KEY_INT_GPIO_PORT             GPIOA
    #define KEY_INT_GPIO_CLK              (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)
    
    #define KEY_INT_EXTI_IRQ              EXTI0_IRQn //中断源,在stm32f10x.h中
    #define KEY_INT_EXTI_PORTSOURCE       GPIO_PortSourceGPIOA  //中断源在哪个口    A
    #define KEY_INT_EXTI_PINSOURCE        GPIO_PinSource0       //中断源在那个线    0
    #define KEY_INT_EXTI_LINE             EXTI_Line0            //线0
    
    static void GPIO_Configuration(void);   /* 配置GPIO   */
    static void EXTI_Configuration(void);   /* 配置 NVIC 中断*/
    static void NVIC_Configuration(void);   /* 配置 EXTI */
    void EXTI_Config(void);
    
    #endif /* __BSP_EXTI_H */
    
    

    stm32f10x_it.c内容:

    #include "stm32f10x_it.h"
    #include "bsp_led.h"
    #include "bsp_exti.h"
    
    void EXTI0_IRQHandler (void)
    {
    	if(EXTI_GetITStatus(EXTI_Line0) != RESET)
    	{
    		LED_G_TOGGLE;
    	}
    	EXTI_ClearITPendingBit(EXTI_Line0);
    }
    

    main.c内容:

    #include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
    #include "bsp_led.h"
    #include "bsp_exti.h"
    
    int main(void)
    {
    	// 来到这里的时候,系统的时钟已经被配置成72M。
    	LED_GPIO_Config();
    	
      EXTI_Config();
    	
    	while(1)
    	{
    		/*无限循环是main程序的主体部分。当系统初始化完成后,*/
    		/*即始终陷于该无限循环中运行。与之前的按键控制灯亮灭*/
    		/*不同,此循环不做任何事情。因为所有工作都由中断服务程序完成*/
    	}
    }
    
    

    后记:前/后台嵌入式软件架构

    前/后台架构,是由后台程序和前台程序两部分构成的。后台又被称为任务级程序。主要负责处理日常事务;前台通过中断及其服务函数实现,又被称为中断级程序。

    后台

    位于main.c中,主体为主函数main,通常由几个初始化函数和一个无限循环组成。其中,初始化完成中断源和NVIC的配置。

    前台

    中断服务程序,位于stm32f10x_it.c中,由中断服务函数组成。

    展开全文
  • 【嵌入式】按键中断控制 LED 跑马灯实验 1. 操作内容2. 原理解释2.1 实验箱按键电路2.2 实验箱LED电路2.3 寄存器说明3. 操作步骤3.1 编写键控制 LED 代码,将代码编译为二进制文3.2 安装 USB 驱动3.2 使用 DNW 软件...

    1. 操作内容

    1. 熟悉中断控制主程序需要进行的步骤
    2. 熟悉中断服务程序需要进行的步骤
      利用按键SW4和SW5实现按键中断控制LED跑马灯。按下按键SW4,LED从左向右跑马灯闪烁10次
    展开全文
  • 在完成交通灯基本功能基础上,当有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验题以按键中断申请,表示有急救车通过。
  • 【嵌入式】按键中断控制 LED 及蜂鸣器实验 1. 操作内容2. 原理解释2.1 实验箱按键电路2.2 实验箱LED电路2.3 实验箱蜂鸣器电路2.3 寄存器说明3. 操作步骤3.1 编写键控制 LED 代码,将代码编译为二进制文3.2 安装 USB ...
    展开全文
  • USART中断控制LED我很早就已经解决了,这个是在我第二版本的基础上,将按键变成了中断,就这么简单,话不多说,开始 1.需要移植的文件首先是bsp_exti.c /** **************************************************...
  • 下面就直接进入正题,按键中断控制LED蜂鸣器,首先确定按键属于输入信号,需要向开发板输入电平来对LED灯和蜂鸣器进行控制,那么我们需要做的分为以下几步: 首先查看开发板原理图,确定你所需要控制的KEY和LED以及...
  • 按键中断方式控制led linux驱动程序,里面还有一个扫描方式的按键驱动。
  • STM32 HAL库 CubeMx 按键中断控制LED

    千次阅读 2021-03-09 11:49:06
    中断的方式,通过按键控制 led灯的亮灭 按一下,灯亮。再按一下,灯灭。 一 新建工程 查看原理图 按键 PA15 LED灯 PA8 打开CubeMx,先使能串口线,让我们可以通过仿真器往单片机里下载程序。 找到PA15,选择为...
  • S1按键中断控制LED

    千次阅读 2019-05-05 23:29:58
    //进入中断服务程序后改变P1.0口即LED1的状态 //异或 能改变P1输出口的电平状态,即改变灯的状态 P2IFG &= ~BIT1; //清除P2.1口即S1的中断标志位 //将P2.1即S1的中断标志位清0,以便退出中断状态(不清0的话...
  • mini2440按键中断控制led灯遇到的问题

    千次阅读 2010-11-19 18:56:00
    平台: xp系统,ARM mini2440 程序名:按键中断控制led灯主要学习内容,S3C2440外部中断遇到问题 1. 超级终端下载程序时按下d后又跳回到下载界面,没有等待我下载程序、解决办法:这应该是自己的大意,按下d的时候把...
  • 本次实验是在上次实验的基础上,稍加修改,通过中断方式,利用按键控制led流水灯的闪烁,配置非常简单,只需要几分钟搞定。(附加上次实验链接:Proteus仿真STM32流水灯实验例程、详细步骤。) 二、在Proteus中配置...
  • tiny 6410按键中断控制LED

    千次阅读 2012-09-14 18:55:29
    本文主要介绍实现KEY1~4控制点亮LED1~4, KEY5-8控制熄灭LED1~4的实现。会上传全部的代码。...第一步:为了让按键能产生中断,就要使GPN0~5设置为Ext.Interrupt【0~5】,GPL11,12设置为Ext.Interrupt【19,20
  • 中断屏蔽寄存器二、电路图 一、相关寄存器介绍 1.寄存器PxSEL x为端口标号0~2; 用来设置端口的每个引脚为通用I/O或者是外部设备I/O; 默认时,每当复位后,所有数字输入输出引脚都设置为通用输入引脚。 2.寄存器...
  • 前面我们介绍了按键中断,其实我们稍作修改就可以用按键控制LED了。做个小实验,两个按键分别控制两个led亮灭。 板子:zc702。 硬件部分 添加zynq核: 勾选串口用于打印信息,勾选EMIO,我们控制两个led,...
  • 在本实验中,我们将通过调用AXI GPIO IP核,使用中断机制,实现底板上PL端按键控制PS端GPIO,并使用EMIO控制LED灯的亮灭。首先,axi_gpio与之前的GPIO的区别:之前的GPIO是硬核,是ps端实际存在的外设电路;而axi_...
  • 实验目的:   测试评估板上的按键LED 实验内容:   1、按下s1一次红灯亮1s后熄灭   2、快速按下s1两次绿灯亮1s后熄灭 bsp_led.h 在这里插入代码片
  • 2013-10-07 实验之按键中断控制Led

    千次阅读 2013-10-07 19:26:51
    注意事项:驱动层,中断程序编写,指针地址,唤醒与睡眠,地址映射解绑  应用层,指针,内存置0,格式化输出 内核版本:Linux 2.6.38 开发板: Mini 6410 原理图:   驱动程序: #include #include #include ...
  • #define GLOBAL_CLK //相当于定义了FCLK,HCLK,PCLK,UCLK #include "def.h" #include "option.h" #include "mmu.h" #include "2440addr.h" #define LED1_on rGPBDAT = ((0xf)^(1)) //GPB5=0 #define LED2_on
  • 这一节是我学驱动这么多天来,最头疼的...就是因为电脑当时出了问题,没有写poll,导致我在中断处理函数,poll,read三个驱动函数之间,不断的徘徊也没找到直接的关系。题外话不多了~~~~~进入正题!!! 本节知识点:
  • 从ARM裸机看驱动之按键中断方式控制LED(一)http://blog.csdn.net/u010872301/article/details/78494383
  • 从ARM裸机看驱动之按键中断方式控制LED(二)(内含Makefile,直接编译即可使用) ,具体使用参考博客 http://blog.csdn.net/u010872301/article/details/78526055
  • 中断-按键控制LED

    2017-07-25 16:08:07
    中断-按键控制LED
  • 单片机MSP430G2553的按键非中断控制LED亮灭状态切换程序,其他程序比如非按键中断、定时器中断、PWM等单片机MSP430G2553系列代码我会陆续上传,敬请期待。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,067
精华内容 5,626
关键字:

按键中断控制led