嵌入式开发十六:外部中断实验1:通过外部中断控制灯亮灭

        中断在嵌入式应用中占有非常重要的地位,几乎每个控制器都有中断功能。中断对保证紧急事件得到第一时间处理是非常重要的,本篇博客主要是外部中断的一个简单应用,我们设计使用按键来作为触发源,使得控制器产生中断,并在中断服务函数中实现控制LED灯的任务。通过这样一个简单的中断实验来熟悉中断的配置过程,为后续使用中断打好基础。

目录

一、实现的功能

二、硬件设计

三、程序设计

3.1创建工程模板

3.2工程中创建对应的文件

3.3添加文件路径

3.4添加相应的外设固件库和所需文件

3.5程序流程图

​3.5.1 编写LED0和LED1初始化函数驱动代码

3.5.2 初始化外部中断,包括:EXTI初始化、NVIC初始化

3.5.3 编写中断服务函数

3.5.5 编写延时函数

3.5.6 程序主函数

四、下载验证


一、实现的功能

       我们设计使用按键Key0来作为触发源,使得控制器产生中断,并在中断服务函数中实现控制LED灯的任务。即当按键按下时,对应的 IO 口电平会发生变化,这时只要配置好对应端口的外部中断就可以触发中断,从而执行中断服务函数。

二、硬件设计

本实验用到的硬件资源有:

LED0和LED1 以及独立按键硬件部分的连接方式的原理图在前面博客已经详细介绍过,如图所示

在本次实验中,我们只用到了Key0,为了练习,这里详细讲解如果这四个按键作为中断源/中断通道,按键是连在GPIO口的,即当按键按下时,对应的 GPIO 口电平会发生变化,这时只要配置好对应端口的外部中断就可以触发中断,从而执行中断服务函数。我们应将如何配置对应的端口模式?

       首先分析PA0,按键未按下时是低电平(下拉),当按键按下时是高电平,因此,当PA口的电平变化由低电平变化为高电平时,触发中断,也就是PA0需要配置为:输入下拉,上升沿触发模式;

       再看PE4、PE3、PE2,按键未按下时是高电平(上拉),当按键按下时是低电平,因此,当PA口的电平变化由高电平变化为低电平时,触发中断,也就是PA0需要配置为:输入上拉,下降沿触发模式;

三、程序设计

3.1创建工程模板

       直接复制创建好的库函数模板, 在此模板上进行程序开发。将复制过来的模板文件夹重新命名为“实验四:外部中断实验:中断控制LED灯”。打开此文件夹,在Project目录下新建一个文件夹,命名为:MyExti,用于存放按键中断的驱动程序,因为本次实验涉及到LED,因此,同样需要建立MyDelay和MyLed文件夹,存放对应的驱动程序。创建好后,目录如下所示:

3.2工程中创建对应的文件

      在工程下创建对应的文件夹,同时新建对应的源文件和头文件,创建好后如下图所示:

3.3添加文件路径

       要想工程在编译阶段能够找到创建的文件,必须要加入文件路径,详细步骤之前已经介绍过,路径添加完毕后,如下图所示:

3.4添加相应的外设固件库和所需文件

      本次实验是外部中断输入,有用到额外的外设SYSCFG和EXTI,因此,需要勾选这两个外设,从而在工程中引入相应的固件库源文件。与之前相比多了这两个。

3.5程序流程图

 3.5.1编写LED0和LED1初始化函数驱动代码

      由于后面我们需要利用按键中断来控制灯的开和关,所以我们必须要首先对它们进行初始化,设置PF9和PF10的GPIO口的端口模式。这与我们之前跑马灯实验初始化函数相同。

在 myled.h文件夹下编写如下代码:

#ifndef __MYLED_H
#define __MYLED_H

void LED_Init(void);

#endif

在 myled.c文件夹下编写如下代码:

#include "stm32f4xx.h"                  // Device header
#include "myled.h"


void LED_Init(void)
{
    //第一步:使能GPIOF两个口的时钟 
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能 GPIOF 时钟
	
   //第二步:GPIOF9,F10 初始化设置
   GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//LED0对应 IO 口
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
   GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化 GPIO

   //第三步:设置灯的初始状态
   GPIO_ReSetBits(GPIOF,GPIO_Pin_9 );//GPIOF9,设置低电平,灯亮
}

3.5.2  初始化外部中断,包括:EXTI初始化、NVIC初始化

        本小节是配置外部中断的关键部分,在上篇博客已经详细介绍过过程,这里针对这个实验复述整个过程,这也是程序编码的逻辑,务必掌握!

第一步:使能GPIO时钟和使能SYSCFG时钟

       首先,我们要使用GPIOE作为中断输入,同时LED所在的GPIOF,所以我们要使能相应的 GPIOE和GPIOF的时钟, EXTI和 NVIC的时钟默认是打开的,因此,我们不需要使能,但是需要使能SYSCFG的时钟。

第二步:初始化口为输入模式

        按键Key0所在的GPIO口为GPIOE,因此使用 GPIOE_Pin_4口作为中断输入,初始化相应的GPIOE_Pin_4口为输入上拉;

第三步:配置SYSCFG,设置GPIO口与中断线的映射关系。

         KEY0、KEY1、KEY2 和 KEY_UP 分别连接 PE4、PE3、PE2 和 PA0,即对应了 EXTI4、 EXTI3、EXTI2 和 EXTI0 这四条外部中断线。这里需要注意的是 EXTI0 到 EXTI4 都是有单独 的 中 断 向 量 , EXTI5 到 EXTI9 是公用 EXTI9_5_IRQn , EXTI10 到 EXTI15 是公用 EXTI15_10_IRQn。

        本次实验只用了GPIOE_Pin_4(PE4),因此应该使用SYSCFG将其映射到EXTI4中断通道

第四步:初始化线上中断EXTI

       定义EXTI外设结构体,对成员变量初始化(对寄存器操作),对于本实验就是中断通道为:EXTI4、中断响应、下降沿触发模式(前面分析过);然后调用初始化函数EXTI_Init()。

第五步:初始化中断分组(NVIC) , 并使能中断。

         既然是外部中断,涉及到中断我们当然还要设置 NVIC 中断分组和优先级。

(1)NVIC中断分组:直接调用函数:NVIC_ PriorityGroupConfig();//整个工程只设置一次

(2)此外部中断的设置:首先,定义内核外设NVIC的结构体,对成员变量初始化(对寄存器操作),对于本实验就是中断通道为:EXTI4_IRQn、抢占优先级、响应优先级、使能外部中断通道,然后调用初始化函数NVIC_Init()。

在 myexti.h文件夹下编写如下代码:

#ifndef _MY_EXTI_H_
#define _MY_EXTI_H_

void My_ExtiInit(void);  //初始化中断

#endif

在 myexti.c文件夹下编写如下代码:

#include"stm32f4xx.h"


/*******************************************
    第一步:开时钟
    按键 ---GPIOE_Pin_4
    NVIC  不需要开时钟!!!(在内核里面)
    SYSCFG ---APB2总线上
    EXTI的时钟是默认打开的
	第二步:初始化GPIO
	第三步:配置SYSCFG,映射通道
	第四步:初始化EXTI:边沿检测控制
	第五步:初始化NVIC,中断响应优先级,优先处理哪一个中断
	第六步:编写中断函数:第1步:查看函数名称:启动文件中定义好的中断处理函数。第二步:重写中断函数
*********************************************/

//初始化方法统一方法:定义外设对应的结构体,对结构体变量的成员赋初值(配置寄存器),调用初始化函数


void My_ExtiInit(void)
{
	//开启GPIOE的时钟
	 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	//开启SYSCFG时钟
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
	
	//初始化GPIOE
	GPIO_InitTypeDef Struct;
	Struct.GPIO_Pin= GPIO_Pin_4;
	Struct.GPIO_Mode= GPIO_Mode_IN;   //输入
	Struct.GPIO_PuPd=GPIO_PuPd_UP;	 //配置按键,默认上拉
	GPIO_Init(GPIOE,&Struct);  
	
	
	//映射通道 将GPIOE_Pin4映射到EXTI的通道4上	
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
	
	
	
	//初始化EXTI
	EXTI_InitTypeDef Struct2;
	Struct2.EXTI_Line=EXTI_Line4;             //设置中断通道	
	Struct2.EXTI_Mode=EXTI_Mode_Interrupt;   //中断模式:中断响应和事件响应
	Struct2.EXTI_Trigger=EXTI_Trigger_Falling; //中断触发方式:下降沿触发
	Struct2.EXTI_LineCmd=ENABLE;             //中断使能
	EXTI_Init(&Struct2);
	
	
	//设置中断分组
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	
	//初始化NVIC
	NVIC_InitTypeDef Struct3;
	Struct3.NVIC_IRQChannel=EXTI4_IRQn;             //设置中断源/中断通道
	Struct3.NVIC_IRQChannelPreemptionPriority=0;  //设置抢占优先级
	Struct3.NVIC_IRQChannelSubPriority=0;        //设置响应优先级
	Struct3.NVIC_IRQChannelCmd=ENABLE;             //使能中断
	NVIC_Init(&Struct3);
	
}

3.5.3编写中断服务函数

         初始化 EXTI 后,中断就已经开启了,当任意按键按下后会触发一次中断, 这时程序就会进入中断服务函数执行,所以我们还需要编写对应的 EXTI 中断服务函数.实现一些控制。  因为PE4管脚对应的中断线是EXTI4,打开启动文件查看对应的中断服务函数名为EXTI4_IRQHandler, 这个从名字来看就很好理解。一般我们把中断服务函数和相应的中断初始化函数放在一个文件。

        一般为确保中断确实发生,我们会在中断服务函数调用中断标志位状态读取函数读取外设中断标志位并判断标志位状态。 EXTI_GetITStatus 函数用来获取 EXTI 的中断标志位状态,如果 EXTI 线有中断发生函 数返回“SET”否则返回“RESET”。实际上EXTI_GetITStatus 函数是通过读取 EXTI_PR 寄存器值来判断 EXTI 线状态的。 执行任务后需要调用 EXTI_ClearITPendingBit 函数清除 EXTI 线的中断标志 位。

 在 myexti.c文件夹下编写如下代码:

//编写中断函数
void EXTI4_IRQHandler(void)//为什么中断函数没有返回值和参数?
{	
	if(EXTI_GetITStatus(EXTI_Line4) == SET) //判断中断是否产生,对中断标志位进行检测
	{	
		GPIO_ToggleBits (GPIOF,GPIO_Pin_9 );   //电平翻转实现对LED的控制
	}
	EXTI_ClearITPendingBit(EXTI_Line4);      //中断触发后,清零操作!!!
}

3.5.5编写延时函数

在 mydelay.h文件夹下编写如下代码:

#ifndef __MYDELAY_H__
#define __MYDELAY_H__
#include <stdint.h>
 
void My_Delay_us(uint32_t num); //延时任意微秒
void My_Delay_ms(uint32_t num); //延时任意毫秒
void My_Delay_s(uint32_t num);  //延时任意秒
 
#endif

在 mydelay.c文件夹下编写如下代码: 

#include "stm32f4xx.h"                  // Device header
#include "mydelay.h"
 
 
//延时num微秒
void My_Delay_us(uint32_t num)
{
    while(num--)
    {
        SysTick ->CTRL = (1 << 0);
    
        SysTick ->CTRL &= ~(1<<2);
    
        SysTick ->CTRL &= ~(1<<1);
    
        SysTick ->VAL = 0x0;
    
        SysTick ->LOAD = 21;   //1秒 21000000HZ,1毫秒 21000HZ  1微秒 21 HZ
    
        while(!(SysTick ->CTRL & (1<<16)));
        SysTick ->CTRL = ~(1<<0);
    }
}
 
 
//延时num毫秒,1毫秒等于1000微秒
void My_Delay_ms(uint32_t num)
{
    while(num--)
    {
        My_Delay_us(1000);
    }
}
 
 
//延时num秒,1秒等于1000毫秒
void My_Delay_s(uint32_t num)
{
    while(num--)
    {
        My_Delay_ms(1000);
    }
}


3.5.6程序主函数

      首先是调用初始化函数主要有LED的初始化函数和外部中断初始化函数接下来。

#include "stm32f4xx.h"                  // Device header
#include "myexti.h"
#include "myled.h"


int main(void)
{
	 LED_Init();//LED初始化
	 My_ExtiInit(); //外部中断初始化
	
     while(1)
	 {
		 
	 }
}

四、下载验证

         我们先来看看编译结果,如图所示:

 可以看到 0 错误,0 警告,编译通过,接下来,大家就可以下载验证了。这里我们使用 DAP 仿真器下载。下载完之后,运行结果如图所示:

VID_20240516_123328

      可以看到我们按 KEY0 可以控制 LED 灯的打开和关闭(每按一次Key0都会触发一次中断,将LED的PF9电平翻转,从而实现对LED灯的控制),符合预期设计。至此,我们的本次的学习就结束了。主要学习了 STM32F407 外部中断的使用方法。这一节我们就讲解到这里,希望能对大家的开发有帮助。 如有兴趣,感谢点赞、关注、收藏,若有不正地方,还请各位大佬多多指教!

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
专业课课程设计 题 目: 基于单片机的跑马灯控制器设计 院系名称: 电气工程学院 专业班级:电气F1105 学生姓名: 学 号:20112391 指导教师: 邵 教师职称: 目 录 1 课题简介 3 1.1课题研究背景 3 1.2 国内外研究现状 4 1.3 本课题研究内容 4 2 系统总体设计方案 5 2.1 设计方案论证 5 2.2 系统结构及主要参数确定 5 3 软硬件电路设计与调试 8 3.1 硬件电路设计 8 3.1.1 基本原理 9 3.2 软件电路设计 10 3.3 软硬件电路调试 13 3.4 调试结果分析 13 结论 13 参 考 文 献 14 附录 15 绪论 单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。单片机是嵌入式系 统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解 决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工 具的发展,基于SoC的单片机应用系统设计有较大的发展。因此,对单片机的理解可以从 单片微型计算机、单片微控制器延伸到单片应用系统。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。 导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化 过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统 ,录象机、摄象机,以及程控玩具等等,这些都离不开单片机单片机最小系统是在以MCS- 52单片机为基础上扩展,使其能更方便地运用于测试系统中,不仅具有控制方便、组态 简单和灵活性大等优点,而且可以大幅度提高被测试的技术指标,从而能够大大提高产 品的质量和数量。单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点 ,称为在实时检测和自动控制领域中广泛应用的器件,在工业生产中称为必不可少的器 件,尤其是在日常生活中发挥的作用也越来越大。本毕业设计主要在STC89C52RC单片机 上扩展I/O口,复位电路,晶振电路,LED显示电路,数码管显示电路,蜂鸣器电路。适 合于我们学生用于单片机的学习掌握和一些各种科研立项等的需求。因此,研究单片机 最小系统有很大的实用意义。 1 课题简介 1.1课题研究背景 由于单片机技术在各个领域正得到越来越广泛的应用,世界上许多集成电路生产厂家 相继推出了各种类型的单片机,在单片机家族的众多成员中MCS- 52系列单片机以其优越的性能、成熟的技术及高可靠性和高性能价格比,迅速占领了工 业测控和自动化工程应用的主要市场,成为国内单片机应用领域中的主流。目前,可用 于MCS- 52系列单片机开发的硬件越来越多,与其配套的各类开发系统、各种软件也日趋完善, 因此,可以极方便地利用现有资源,开发出用于不同目的的各类应用系统。 1.2 国内外研究现状 单片机的技术进步反映在内部结构、功率消耗、外部电压等级以及制造工艺上。在这几 方面,较为典型地说明了数字单片机的水平。在目前,用户对单片机的需要越来越多, 但是,要求也越来越高。在单片机应用中,可靠性是首要因素为了扩大单片机的应用范 围和领域,提高单片机自身的可靠性是一种有效方法。近年来,单片机的生产厂家在单 片机设计上采用了各种提高可靠性的新技术:EFT(Ellectrical Fast Transient)技术 ,低噪声布线技术及驱动技术,采用低频时钟。同时单片机在目前的发展形势下还表现 出可靠性及应用越来越水平高和互联网连接,所集成的部件越来越多,功耗越来越低和 模拟电路结合越来越多等发展趋势。 1.3 本课题研究内容 本设计选择采用AT89C51单片机为核心。AT89C51是一个低电压、高性能CMOS8位单片 机带有K字节的可反复擦写的程序存储器。和128字节的存取数据存储器RAM,这种器件采 用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS- 51系列的单片机兼容。片内含有8位 中央处理器和闪烁存储单位,有较强的功能的AT89C51单片机能够被应用到控制领域中 AT89C51提供以下的功能标准:4K字节闪烁存储器,128字节随机存取数据存储器,3 2个I/O口,2个16位定时/计数器,1个 5向量两级中断结构,1个串行通信口,片内振荡器和时钟电路。另外,AT89C51还可以进 行OHZ的静态逻辑操作,并支持两种软件的节电模式。闲散方式停止中央处理器的工作, 能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作。掉电方 式保存随机存取数据存储器中的内容,但振荡器停止工作并禁止其它所有部件的工作直 到下一个复位。 选择采用AT89C51单片机为核心,使用简单的程序实现跑马灯显示效果设计。 2 系统总体设计方案 2.1 设计方案论
第4章 SOPC软件编程基础实验144 4.1 PIO输出实验1——流水灯控制145 4.2 PIO输出实验2——步进电机控制148 4.3 PIO输入实验——读取开关信号153 4.4 PIO外部中断实验157 4.5 定时器实验1——使用系统时钟服务161 4.6 定时器实验2——使用时间标记服务166 4.7 定时器实验3——看门狗实验169 4.8 通过C库函数访问JTAG UART173 4.9 通过HAL API函数访问JTAG UART176 4.10 通过C库函数访问UART178 4.11 通过HAL API函数访问UART181 4.12 SPI 操作及逻辑分析仪使用实验184 4.13 存储器实验189 4.14 System ID实验190 第5章 SOPC软件编程高级实验193 5.1 字符液晶显示实验193 5.2 七段数码管显示实验196 5.3 频率计实验199 5.4 直流电机直流脉宽调速(PWM)实验201 5.5 乐曲播放实验205 5.6 实时时钟实验213 5.7 温度采集实验219 5.8 读/写CAT1025实验224 5.9 A/D转换实验226 5.10 D/A转换实验231 5.11 红外收发通信实验234 5.12 16×16点阵LED实验238 5.13 简单的嵌入式Web服务器实验241 5.14 读/写SD Card实验248 5.15 USB实验253 5.16 VGA接口实验260 5.17 PS/2鼠标接口实验262 5.18 PS/2键盘接口实验265 第6章 μC/OSII基础实验 270 6.1 μC/OSII应用程序开发流程实验270 6.2 任务管理和时间管理实验276 6.3 信号量和互斥量实验283 6.4 消息队列和邮箱实验292 第7章 SOPC硬件系统高级实验304 7.1 定制基于Avalon总线的用户外设实验304 7.2 定制Nios II用户指令实验315 7.3 创建目标板Flash编程设计实验326
《嵌入式系统导论》实验报告 学院: 学号: 姓名: 上海工程技术大学 电子电气工程学院 实验一 GPIO(按键和LED实验 一、实验要求 1 、掌握基于STM32F103微控制器的嵌入式系统、仿真器和开发用PC机之间的连接方法,能 够搭建基于STM32F103微控制器的嵌入式系统交叉开发环境。 2 、熟悉常用的嵌入式开发工具KEIL MDK或IAR EWARM的操作环境和基本功能(包括编辑、编译、链接、调试和下载等),学会创建、配 置和管理STM32工程,掌握嵌入式程序的基本调试方法,学会使用逻辑分析仪窗口和外设 窗口等信息窗口调试嵌入式程序。 3 、理解LED和按键的构件原理,学会设计它们与微控制器间的接口电路 4 、掌握STM32F103微控制器GPIO的工作原理,熟悉STM32的GPIO库函数 5 、学会使用STM32的GPIO库函数在KEIL MDK或IAR EWARM下开发基于LED和按键的简单嵌入式应用程序 二、实验环境 1 、硬件: ALIENTEK STM32F103嵌入式开发板 2 、软件: KEIL MDK或IAR EWARM 三、实验内容 1 、流水灯实验一: 在KEIL MDK或IAR EWARM 中建立STM32工程,并使用GPIO库函数和延时循环设计基于无限循环架构的嵌入式应用程 序,使开发板上的红色LED以一定周期闪烁。 采用软件仿真的方式调试程序,通过"Logic Analyzer",观察程序模拟运行时连接红色LED的引脚PA8上的输出波形。 采用硬件下载的方式调试程序,观察程序下载硬件运行时红色LED的闪烁情况。 2 、按键控制LED实验: 在KEIL MDK或IAR EWARM 中建立STM32工程,并使用GPIO库函数设计基于无限循环架构的嵌入式应用程序,实现以 下功能:当按键KEY0按下时,目标板上红色LED点亮;当按键KEY0释放时,目标板上红色 LED。 采用软件仿真的方式调试程序,通过"Logic Analyzer"和"Peripherals GPIOC",观察程序模拟运行时连接红色LED的引脚PA8和连接 按键KEY0的PC5上的输出波形。 采用硬件下载的方式调试程序,观察程序下载硬件运行时按键KEY0按下和释放时红色 LED的点亮和熄情况。 四、硬件设计 1 、发光二极管(红色LED)、按键(KEY0)与嵌入式微控制器(STM32F103)的接口电路 五、软件设计 1 、流水灯实验一程序: 3 、按键控制LED实验程序: 六、实验结果 1 、流水灯实验一 1 )软件模拟仿真 用连接红色LED的PA8引脚的输出信号波形图描述软件仿真的运行结果 2 )下载硬件运行 用文字或图片描述程序在STM32F103微控制器上的运行结果 STM32F103微控制器上的运行结果为:LED灯点亮一段时间后熄并且循环点亮 2 、按键控制LED实验 1 )软件模拟仿真 用连接红色LED的PA8和连接按键KEY0的PC5的引脚信号波形图描述软件仿真的运行结果 2 )下载硬件运行 用文字或图片描述程序在STM32F103微控制器上的运行结果 按下按钮LED灯点亮,松开按钮后LED灯熄 七、实验思考 1 、依次连接按键KEY0、KEY1和WK_UP的STM32引脚PA13、PA15和PA0的复用功能: 1 )PA13、PA15: 由于PA13和PA15复位时默认设置为调试接口引脚(JTAG/SW),所以观察实验结果时 先关闭开发板电源,然后拔下开发板上连接的仿真器接口,接着重新打开开发板电源观 察程序运行结果。 2 )PA0: 由于PA0外接跳线连接到温度传感器DS18B20,所以在做按键KEY和外部中断EXTI实验 时,先拔下开发板上PA0与DS18B20的跳线。 实验二 定时器实验 一、实验目的 1 、掌握STM32的TIMER工作原理,熟悉STM32的TIMER库函数 2 、学会使用STM32库函数在KEIL MDK或IAR EWARM下开发基于TIMER的嵌入式应用程序 3 、掌握嵌入式系统中延时的实现方法和主要应用 4 、学会在嵌入式开发工具(KEIL MDK或IAR EWARM)中使用单步 全速运行、设置断点和观察变量 寄存器等方法调试嵌入式应用程序 二、实验环境 1 、硬件: ALIENTEK STM32F103嵌入式开发板 2 、软件: KEIL MDK或IAR EWARM 三、实验内容 1 、流水灯实验二: 在KEIL MDK或IAR EWARM 中建立STM32工程,使用GPIO和TIMER库函数,设计基于无限循环架构的嵌入式应用程序 ,使目标板上红色LED按固定时间一直闪烁,其中红色LED点亮和熄的时间各为x秒(x =学生学号最后两位/10,如对于学号为02111022
STM32是一款基于ARM Cortex-M系列内核的32位微控制器,可用于开发嵌入式系统。按键中断和LED灯亮是嵌入式系统中非常常见的功能,下面我将用300字回答如何使用STM32的按键中断控制LED灯的亮。 首先,我们需要连接一个按键和一个LED灯到STM32微控制器的相应引脚上。假设按键连接到PA0引脚,LED灯连接到PC13引脚。 接下来,我们需要配置STM32的GPIO外设来控制这些引脚。首先,开启相关引脚的时钟。然后,将PA0引脚配置为输入模式,PC13引脚配置为输出模式。可以使用STM32的寄存器或者开发环境提供的库函数来完成这些配置。 然后,我们需要配置外部中断。配置PA0引脚所对应的外部中断线,使其可以检测到按键的状态变化。可以使用STM32的寄存器或者库函数来完成这个配置。 紧接着,我们编写中断处理函数。当按键状态发生变化,中断触发时,中断处理函数被调用。在该函数中,我们可以读取按键引脚的状态,如果按键被按下,我们将PC13引脚设置为高电平,LED灯亮起;如果按键被释放,我们将PC13引脚设置为低电平,LED灯熄。 最后,我们需要在主函数中启用中断。启用中断后,当按键状态发生变化时,中断处理函数将被调用。 以上就是使用STM32的按键中断来控制LED灯亮的步骤。通过配置GPIO外设和外部中断,编写中断处理函数,我们能够实现按下按键时,LED灯亮起;释放按键时,LED灯熄的功能。这样就完成了按键中断控制LED灯亮的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来可期,静待花开~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值