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

news2024/12/23 14:07:03

一、顺序点亮灯泡

①初始化

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.coloradmin.cn/o/676316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Springboot集成Neo4j完整版教程】

🚀 Neo4j 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,C…

基于Python+OpenCV图像识别的连连看辅助工具(深度学习+机器视觉)含全部工程源码及视频演示

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Pycharm 环境 模块实现1. 获取句柄2. 图像划分3. 建立矩阵4. 矩阵求解 系统测试工程源代码下载其它资料下载 前言 本项目目标是利用pywin32来获取游戏图像信息,并利用OpenCV进行识别和处理&#xff…

2023学习日志

[牛客网习题练习] 此系列文章仅是对个人学习的记录如有错误望大家指正与谅解。 1.题目描述:输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出…

文本分析-使用Python做词频统计分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【JDK】二、环境变量从jdk17切换为jdk8后不生效的解决办法

环境变量从jdk17切换为jdk8后不生效的解决办法 一、问题描述二、环境变量为java17时的截图三、修改为java8时的截图四、解决办法1、原因分析 2、删除jdk17和jdk8默认的配置或者把默认的下移,统一使用自己的%JAVA_HOME%.3、同样我们把JAVA_HOME改成17 重启后&#xf…

面试题:mybatis中# 和 $ 的区别

面试题:mybatis中# 和 $ 的区别 一、主要区别如下: 1、#{}可以理解为预处理,而${}是直接替换。 #传入的参数在SQL中显示为字符串,会对自动传入的数据加上双引号。 $传入的参数在SQL中直接显示为传入的值 2、#{}试用于所有类型…

不要再封装各种Util工具类了,这个神级框架你值得拥有!

一、功能 二、安装 三、简单测试 今天给大家推荐一个非常好用的Java工具类库,企业级常用工具类,基本都有,能避免重复造轮子及节省大量的开发时间,非常不错,值得大家去了解使用。 Hutool 谐音 “糊涂”,…

STM32F4的连接初始化【ST-LINK、USB To TTL】

所需设备:STM32F4、杜邦线(彩色小电线) * 8 、USB 转 TTL 0.认识设备 ST-link USB 转TTL STM32F4主板 1.连线 ST-Link连线 一共需要四根线 序号从左至右,从上至下进行编号 1 - 3.3V 连接 1(黄色)2- GND …

并发编程.

1、概述 1.1 进程和线程 进程:操作系统资源分配的最小单位。 程序由指令和数据组成,指令要执行,数据要读写,就必须将指令加载至cpu,数据加载至内存,在指令运行过程中还需要用到磁盘、网络等设备&#xff0…

python:并发编程(十八)

前言 本文将和大家一起探讨python并发编程的实际运用,会以一些我实际使用的案例,或者一些典型案例来分享。本文使用的案例是我实际使用的案例(下篇),是基于之前效率不高的代码改写成并发编程的。让我们来看看改造的过…

计算逆波兰表达式

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现 ⭐码云地址超链接(Gitee):这里存放我学…

如何搭建Nginx网站服务

目录 一、首先搭建Nginx服务 二、授权的访问控制 第一步 安装依赖包 第二步 生成用户密码认证文件 第三步 修改文件属性和权限 第四步 修改配置文件 第五步 用浏览器测试网站 三、基于IP地址进行限制 第一步 修改配置文件 第二步 用两台设备进行访问测试 四、基于域…

工人规范操作识别系统 yolov5

工人规范操作识别系统通过yolov5python网络模型技术,工人规范操作识别系统对工人的操作进行实时监测,当工人规范操作识别系统检测到工人操作不符合规范时,将自动发出警报提示相关人员采取措施。YOLOv5中在训练模型阶段仍然使用了Mosaic数据增…

HCI-1

3.1 定义 就本文档而言,适用以下术语和定义: 嵌入式安全元件主机:在不可移动安全元件中实现的主机 门:主机内部运行的服务的入口点 主机:运行一项或多项服务的逻辑实体 主机控制器:还负责管理主机网络的…

聊聊 分布式系统 中的补偿机制设计问题

一、关于业务补偿机制 1、什么是业务补偿 2、业务补偿设计的实现方式 二、关于回滚 1、显示回滚 2、回滚的实现方式 三、关于重试 1、重试的使用场景 2、重试策略 3、重试时的注意事项 四、业务补偿机制的注意事项 1、ACID 还是 BASE 2、业务补偿设计的注意事项 我们知…

Langchain+本地大语言模型进行数据库操作的实战代码

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Navicat Premium 16执行.sql语句中含有汉字乱码造成view和function创建后无法使用

Navicat Premium 16执行.sql语句中含有汉字乱码造成view和function创建后无法使用 如图,从这里选择sql时没法改sql。所以造成我昨天创建view和function时创建好的前面有感叹号没法用。打开一个fun看里面的汉字是问号。 所以要从这里打开: 1. ultraedit…

EMC学习笔记(十)特殊信号的EMC处理(二)

特殊信号的EMC处理(二) 1.对外接口的EMC设计标准电路1.1 DVI EMC设计标准电路1.2 HDMI接口EMC设计标准电路1.3 LVDS接口EMC设计标准电路1.4 PS2接口EMC设计标准电路1.5 RJ11 EMC设计标准电路1.6 SCART接口EMC设计标准电路1.7 s-video接口EMC设计标准电路…

五个步骤,助你优雅的写好 Controller 层代码!

Controller 层逻辑 普通写法 优化思路 Controller 层逻辑 MVC架构下,我们的web工程结构会分为三层,自下而上是dao层,service层和controller层。controller层为控制层,主要处理外部请求,调用service层。 一般情况下…

6.23黄金是否会跌破1900?多单被套怎么办?

近期有哪些消息面影响黄金走势?今日黄金多空该如何研判? ​黄金消息面解析:周四(6月22日)美市尾盘,现货黄金收报1910美元/盎司,下跌20美元或0.1%,日内最高触及1934.95美元/盎司&…