STM32F4 点亮灯泡【顺序点亮、按键点亮】

一、顺序点亮灯泡

①初始化

user.c文件中,我们需要对LED进行初始化设置。

在函数LED_GPIO_Config中,可以修改代码如下:

/***********************************************************************
LED初始化
备注 LED 接在GPC14引脚上
***********************************************************************/void  LED_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_2 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_SetBits(GPIOD, GPIO_Pin_3 );									 	  // 关闭所有灯泡GPIO_SetBits(GPIOD, GPIO_Pin_2 );GPIO_SetBits(GPIOD, GPIO_Pin_1 );}

在这段代码中,我们使用GPIO_InitTypeDef结构体对GPIO进行初始化配置。

我们选择使用GPIOD的引脚12、13和14作为LED的控制引脚,并设置为输出模式。

另外,我们将引脚的输出类型设置为推挽输出(PP),输出速度为100MHz,上拉电阻使能。

最后,通过GPIO_SetBits函数将引脚12、13和14设置为高电平,关闭所有灯泡。

问题一:为什么低电平才是点亮灯泡呢?
在这里插入图片描述
我们可以将引脚看作一个开关,通过改变开关的状态来控制灯泡。当引脚处于高电平时,相当于开关处于关闭状态(因为接地线了),电流无法通过开关流向灯泡,因此灯泡不亮。
而当引脚处于低电平时,相当于开关处于打开状态(未接地线),电流可以通过开关流向灯泡,从而使灯泡亮起。

②添加点亮灯泡函数

user.c文件中,我们需要添加一个函数来顺序点亮灯泡。可以在文件末尾添加如下代码:

void Light_Three_Leds(void)
{GPIO_ResetBits(GPIOD, GPIO_Pin_1);Delay_MS(1000);GPIO_SetBits(GPIOD, GPIO_Pin_1);GPIO_ResetBits(GPIOD, GPIO_Pin_2);Delay_MS(1000);GPIO_SetBits(GPIOD, GPIO_Pin_2);GPIO_ResetBits(GPIOD, GPIO_Pin_3);Delay_MS(1000);GPIO_SetBits(GPIOD, GPIO_Pin_3);}

这个函数用于控制三个灯泡的点亮和熄灭。

我们通过GPIO_ResetBits函数将指定的引脚设置为低电平,点亮对应的灯泡,并延时一段时间(这里设置为1秒)。

然后,通过GPIO_SetBits函数将引脚设置为高电平,熄灭灯泡

③在main文件中调用

main.c文件中,我们需要调用Light_Three_Leds函数来点亮灯泡。可以在适当的位置添加如下代码:

int main(void)
{// ...LED_GPIO_Config();  // 初始化LED// ...Light_Three_Leds();  // 调用函数点亮灯泡while (1){// ...// ...}
}

在主函数中,我们首先调用LED_GPIO_Config函数来初始化LED引脚

然后,可以在适当的位置使用Light_Three_Leds函数来点亮灯泡

二、按键点亮灯泡

修改EXTI中断处理函数

user.c文件中,我们需要修改EXTI9_5_IRQHandler函数,使其在检测到按键按下时点亮灯泡。可以将代码修改如下:

void EXTI9_5_IRQHandler(void)
{Delay_MS(20);if (GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_8) == 0)  // 检测按键是否按下{while (!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_8));printf("This is the system's default operation.\r\n");Delay_MS(1);Light_Three_Leds();  // 调用函数点亮灯泡}EXTI_ClearITPendingBit(EXTI_Line8);
}

在这段代码中,我们首先进行一个20毫秒的延时,以防止按键抖动。

然后,使用GPIO_ReadInputDataBit函数检测按键是否按下(假设按键连接到GPIOE的引脚8)。

如果检测到按键按下,我们进入一个循环,直到按键释放

在循环中,我们打印一条消息表示系统的默认操作,并进行一个1毫秒的延时。然后,调用Light_Three_Leds函数来点亮灯泡

最后,通过EXTI_ClearITPendingBit函数清除中断挂起标志,表示中断已处理完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/279.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式第18讲——中介者模式

目录 一、什么是中介者模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构 5.1 抽象中介者(Mediator)——LogisticsCenter 5.2 抽象同事类(Colleague)——Participant 5…

搭建SpringBoot项目 详细教程

一、搭建SpringBoot项目 这个项目,可以作为种子项目,我打算把它放置Gitee上。包含大部分web开发的相关功能,后期所有的Spring Boot项目都可以用这个项目,简单修改一下配置,就可以快速开发了。 选择Spring initializr…

uniapp 开发小程序之实现不同身份展示不同的 tabbar(底部导航栏),附带相关问题解答

效果展示: 引言 在开发过程中逐渐意识到uniapp原生的tabbar可能不能满足开发要求,通过浏览博客才选择使用uView的Tabbar 底部导航栏来实现,我选择用的是2X版本 安装 我是使用Hbuilder插件的方式引入的组件库,安装配置可以看这篇…

【用户认证】密码加密,用户状态保存,cookie,session,token

相关概念 认证与授权 认证(authentication )是验证你的身份的过程,而授权(authorization)是验证你有权访问的过程 用户认证的逻辑 获取用户提交的用户名和密码根据用户名,查询数据库,获得完…

【DBA专属】MHA高可用数据库集群-----------一主一备两从一管理,一个VIP客户端

MHA高可用数据库集群 目录 环境配置: 所有操作系统均为centos 7.x 64bit 1、关闭防火墙:(所有服务器) 2.配置所有主机名映射(所有服务器) 3、同步时区 4.安装MHA node及相关perl依赖包(所有…

使用HHDESK图形化功能管理服务器

服务器的管理通常繁琐而枯燥,需要大量的命令行来执行。 所以图形化功能应运而生。 本篇以传输文件为例,简单介绍一下HHDESK的图形化管理功能。 首先需要配置好服务器。 点击连接管理,在连接类型中选择SSH,按照刚才在服务器中配…

Android应用程序开发需要哪些编程语言?

开发一款Android上的应用程序通常需要以下编程语言: Java:Java是Android开发的主要编程语言。几乎所有的Android应用程序都使用Java进行核心开发。你可以使用Java编写应用程序的业务逻辑、界面设计和数据处理等。 刚好我这里有嵌入式、plc、单片机的资料…

【NAS群晖drive异地访问】远程连接drive挂载电脑硬盘「内网穿透」

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转发自CSDN远程穿透的文章:【…

哈工大计算机网络课程网络层协议详解之:DHCP协议

哈工大计算机网络课程网络层协议详解之:DHCP协议 文章目录 哈工大计算机网络课程网络层协议详解之:DHCP协议如何获得IP地址?硬编码动态主机配置协议-DHCP:(Dynamic Host Configuration Protocol) 动态主机配…

Docker学习笔记1

PaaS: 一、虚拟化分类: 虚拟化资源提供者: 1)硬件平台虚拟化 2)操作系统虚拟化 虚拟化实现方式: type I: 半虚拟化 type II:硬件辅助全虚拟化 type III: 软件全虚拟化: …

【②MySQL 】:测试数据准备、SQL语句规范与基本操作

前言 欢迎来到小K的MySQL专栏,本节将为大家准备MySQL测试数据、以及带来SQL语句规范、数据库的基本操作的详细讲解~✨文末送书,小K赠书活动第二期 目录 前言一、准备测试数据二、SQL语句规范三、数据库的基本操作四、总结:文末赠书 一、准备测…

影响远程访问性能的潜在因素

对企业和远程办公人员而言,远程访问技术非常关键。因为通过这项技术,员工可以随时随地使用任意设备工作,可以提高生产力和灵活性。 但是,远程访问性能可能会受到多种因素的影响。这篇文章将介绍影响远程访问性能的各种潜在因素&a…