STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)
文章目录
- 一、功能需求分析
- 二、Proteus绘制电路原理图
- 三、STMCubeMX 配置引脚及模式,生成代码
- 四、MDK打开生成项目,编写HAL库的按键检测代码
- 五、运行仿真程序,调试代码
一、功能需求分析
搭建完成开发STM32开发环境之后,开始GPIO的学习。上一节已经测试了使用GPIO的输出模式,实现LED点亮的功能。
本次案例实现GPIO的输入检测功能,实现按键状态检测,通过按键状态控制LED。
需求分析:
- 接线:PA6-KEY1、PA7-KEY2、PA0-LED1、PA1-LED2;
- KEY1控制LED1、KEY2控制LED2;
- 按键闭合高电平,断开低电平;
- LED为低电平驱动方式。
整体的思路是,通过输入检测获取开关状态,判断开关状态控制输出,实现LED的点亮和熄灭。
二、Proteus绘制电路原理图
Proteus绘制需要对基本元器件的名称有一定了解,如下方的发光二极管LED、电阻RES,可以在网上查找对应的元器件名称列表,方便以后绘制。
绘制电路原理图的步骤:创建画布=》芯片选型及放置=》元器件选型及放置=》连接电路=》修改元器件参数=》仿真运行。
下图为所需元器件清单。

下图为电路原理图。

三、STMCubeMX 配置引脚及模式,生成代码
接下来,根据原理图绘制,创建CubeMX项目,配置引脚及工作模式,生成MDK项目代码。
创建项目,在Pinout配置模块,点击PA0,选择GPIO_Output推挽输出模式,同理,配置PA1。
点击PA6,选择输入GPIO_Input模式,同理设置PA7。

在clock单元,配置系统时钟为72MHz。
在Project单元,填写项目名称、保存路径、IDE和版本。

在 code generator中,配置添加库的方式为所需库,用户代码在每次项目重新生成时保留。
配置完成,通过以上步骤,完成了2个LED、2个KEY的引脚的模式配置及时钟配置,接下来,点击GENERATE,生成项目代码。
找到生成路径,可以看到项目目录文件。

四、MDK打开生成项目,编写HAL库的按键检测代码
从上面步骤中,生成了MDK项目。
在MDK-ARM目录中,找到项目快捷方式,打开项目。
以下是我的项目路径:03_KEY\KEY_MDK\KEY\MDK-ARM

找到main.c文件,在main函数的while循环中,添加如下代码。
此功能代码写在while循环中,使用的是查询扫描方式,这里我们先实现功能,后面会介绍终端扫描方式实现按键检测,从而节约CPU的算力。
代码可以分为两部分,第一部分是获取PA6引脚状态,通过判断控制PA0输出,这里涉及的是KEY1和LED1。
第二部分是获取PA7引脚状态,通过判断控制PA1输出,这里涉及的是KEY2和LED2。
while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///按键KEY1检测key1_stasus = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6);if(key1_stasus == 0)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);else if(key1_stasus == 1)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);//按键KEY2检测key2_stasus = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7);if(key2_stasus == 0)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);else if(key2_stasus == 1)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);}
在项目中勾选生成HEX选项,HEX文件就是MDK编译生成的十六进制文件,作为烧录到开发板的源程序文件使用,当然,这里我们使用仿真,在Proteus中加载HEX即可。

点击编译程序,生成HEX文件。在编译窗口显示生成了以下信息,则编译成功,保证 0 errors再进行下一步。

五、运行仿真程序,调试代码
在Proteus中,双击芯片,选择加载程序路径。
03_KEY\KEY_MDK\KEY\MDK-ARM\KEY
上面是我的项目的HEX文件目录路径。
点击仿真按钮,运行程序,查看功能执行结果。

可以看到,闭合开关,控制LED点亮,断开开关,控制LED熄灭,功能正常。
代码链接:STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)
至此,我们已经完成了STM32的GPIO输入输出案例的编写,后面,会给大家介绍更多的功能。
相关文章:
STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)
文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式,生成代码四、MDK打开生成项目,编写HAL库的按键检测代码五、运行仿真程序,调试代码 一、功能需求分析 搭建完成开发STM32开发环境之后,开始GPIO…...
DS3231SN
这份文件是关于DS3231SN芯片的数据手册,由Maxim Integrated公司生产。DS3231SN是一款高精度的I2C接口集成实时时钟(RTC)/温度补偿晶体振荡器(TCXO)/晶体的芯片。以下是该芯片的核心内容概述: 产品概述&…...
tsconfig.json文件翻译
原文件 {"compilerOptions": {/* Visit https://aka.ms/tsconfig to read more about this file *//* Projects */// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects.…...
树状数组学习笔记
树状数组 拜读了大佬的讲解博文(树状数组(详细分析应用),看不懂打死我!),写一篇Python版的笔记巩固消化,附带蓝桥杯历年真题作为例题演示 一、作用 用于快速读取列表中 某个区间内所有元素的和 实现单点修改ÿ…...
【bugfix】如何解决svg到线上显示空白或者svg的viewBox为空
svgo的默认机制是当width和height和viewbox一样会删除viewbox,这都是为了svg的压缩做的,详情可以看issue中的讨论,我们可以通过更改babel的配置来解决 https://github.com/svg/svgo/issues/1128 https://github.com/ant-design/ant-design-we…...
docker基础学习指令
文章目录 [toc] docker基础常用指令一、docker 基础命令二、docker 镜像命令1. docker images2. docker search3. docker pull4. docker system df5. docker rmi1. Commit 命令 三、 docker 容器命令1. docker run2. docker logs3. docker top4. docker inspect5. docker cp6. …...
回溯大学生活
回顾一下大学四年 bg:湖南大学 20级计科,成绩60%,无考研考公打算 四年之前,怀着激动的心情来到了大学校园,经过了太久的压抑终于迎来了高中老师口中的美好的大学生活,然而呢事实并非如此。恋爱呢…...
Android Fence机制
Android Fence机制 Android中的GraphicBuffer同步机制-Fence (最全最详细,推荐) AndroidQ 图形系统(5)Fence机制简介 Android P 图形显示系统(十一) BufferQueue(二)...
sa-token非Web上下文无法获取Request
0x02 非Web上下文无法获取Request 问题定位 在我们使用sa-token安全框架的时候,有时候会提示:**SaTokenException:非Web上下文无法获取Request**** 错误截图: 在官方网站中,查看常见问题排查: 非Web上下文无法获取…...
tomcat 常见优化方案
tomcat作为Web服务器,它的处理性能直接关系到用户体验,下面是几种常见的优化措施: 对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情况,加大tomcat使用的jvm的内存 服务器所能提供CPU、内存、硬盘的性能…...
前端导出文本内容为csv文件,excel乱码
原因:编码格式问题,需要改为utf-8 bom // Create blob with utf8-bom 编码 const createBlobWithBOM(data, mimeType)> {const bom [0xEF, 0xBB, 0xBF];const bomArray new Uint8Array(bom);const dataArray new TextEncoder().encode(data);const…...
36---USB HUB电路设计
视频链接 USB HUB电路设计01_哔哩哔哩_bilibili USB HUB 电路设计 1、USB HUB基本介绍 USB Hub,指的是一种可以将一个USB接口扩展为多个,并可以使这些接口同时使用的装置。 Hub也是大家常说的集线器,它使用星型拓扑结构连接多个USB接口设…...
FPGA在深度学习领域的应用的优势
FPGA(Field-Programmable Gate Array)是一种可编程逻辑芯片,可以根据需要重新配置其内部的逻辑电路和功能。在深度学习领域,FPGA被广泛用于加速模型训练和推理任务。 首先,FPGA可以提供高度定制化的计算架构ÿ…...
Windows Edge 兼容性问题修复 基本解决方案
Windows Edge 浏览器兼容性问题可能源于多个方面,以下是一些常见的问题及其处理结果: 插件或扩展冲突:某些第三方插件或扩展可能与Edge浏览器不兼容,导致崩溃或运行异常。处理结果为,尝试禁用所有插件和扩展ÿ…...
【Servlet】服务器内部转发以及客户端重定向
文章目录 一、服务器内部转发:request.getRequestDispatcher("...").forward(request, response);二、客户端重定向:response.sendRedirect("");三、服务器内部转发代码示例四、客户端重定向代码示例 一、服务器内部转发:…...
是否有替代U盘,可安全交换的医院文件摆渡方案?
医院内部网络存储着大量的敏感医疗数据,包括患者的个人信息、病历记录、诊断结果等。网络隔离可以有效防止未经授权的访问和数据泄露,确保这些敏感信息的安全。随着法律法规的不断完善,如《网络安全法》、《个人信息保护法》等,医…...
Java设计模式详解:单例模式
设计模式详解:单例模式 文章目录 设计模式详解:单例模式一、单例模式的原理二、单例模式的实现推荐1、饿汉模式2、静态内部类 三、单例模式的案例四、单例模式的使用场景推荐总结 一、单例模式的原理 单例模式听起来很高大上,但其实它的核心…...
Pointnet++改进即插即用系列:全网首发OREPA在线重新参数化卷积,替代普通卷积 |即插即用,提升特征提取模块性能
简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入OREPA,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三...
XRDP登录ubuntu桌面闪退问题
修改 /etc/xrdp/startwm.sh unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR . $HOME/.profile...
【Node】使用Node.js构建简单的静态页面生成器
使用Node.js构建简单的静态页面生成器 在现代的Web开发中,静态网站因其速度快、安全性高而越来越受到开发者的青睐。本文将介绍如何使用Node.js构建一个简单的静态页面生成器,通过这个小项目,你将了解到静态网站生成的基本原理和实现方法。 …...
(5月最新版)OpenClaw 小龙虾 Windows 一键安装与问题排查
OpenClaw(小龙虾)Windows 11 一键部署教程|2026 新版|零代码・免配置・解压即用 适用系统:Windows 11 专业版 / 家庭版 / 正式版(全版本兼容)当前版本:v2.7.1 下载地址:…...
技能图谱探索器:从数据建模到交互可视化的全栈实现
1. 项目概述:一个技能图谱的探索工具最近在GitHub上看到一个挺有意思的项目,叫nitzzzu/openclaw-skills-explorer。光看名字,openclaw和skills-explorer这两个词就挺有画面感的。我第一反应是,这应该是一个用来探索、梳理或可视化…...
告别IDEA编译警告:深入解析JDK版本过时问题与多维度解决方案
1. 当IDEA开始"抱怨":那些烦人的编译警告从哪来? 每次打开老项目,总能看到那个熟悉的黄色警告:"Warning:java: 源值1.5已过时,将在未来所有发行版中删除"。这个提示就像个唠叨的老朋友,…...
如何让经典DirectX游戏在现代Windows上完美运行:DDrawCompat终极兼容解决方案
如何让经典DirectX游戏在现代Windows上完美运行:DDrawCompat终极兼容解决方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.co…...
微信视频下载器wx_channels_download
微信视频下载器ltaoo/wx_channels_download(跨平台轻量首选) 特点:体积小、使用简单,在微信PC端视频下方添加“下载”按钮;支持 macOS 和 Windows。优点:集成式(无需单独监听)&…...
半导体设备投资热潮:千亿美元流向、产业逻辑与工程师应对策略
1. 从百亿投资狂潮看半导体制造的底层逻辑最近和几个在晶圆厂和Fab设备商工作的老朋友聊天,话题总绕不开一个词:投资。无论是台积电、三星的先进制程军备竞赛,还是中芯国际、联电的成熟制程扩产,背后都是一台台价值数千万甚至上亿…...
GPU内核优化:R3框架与分层自动调优实践
1. GPU内核优化的挑战与机遇在现代高性能计算和人工智能领域,GPU已经成为不可或缺的计算引擎。然而,随着硬件架构的快速迭代,保持应用程序的高性能表现变得越来越具有挑战性。传统的手工优化方法需要开发者投入数月时间,在算法设计…...
5大核心功能揭秘:GTA5线上小助手如何彻底改变你的洛圣都冒险体验
5大核心功能揭秘:GTA5线上小助手如何彻底改变你的洛圣都冒险体验 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 你是否厌倦了在GTA5线上模式中花费数小时完成重复任务?是否希望…...
保姆级教程:彻底解决CondaHTTPError网络连接失败(附.condarc文件完整配置流程)
深度解析CondaHTTPError:从网络诊断到.condarc文件全配置指南 遇到CondaHTTPError: HTTP 000 CONNECTION FAILED错误时,很多开发者会感到束手无策。这个问题通常出现在国内网络环境下,尤其是公司内网、校园网或使用某些代理服务后。本文将带你…...
NoFences:彻底解决Windows桌面杂乱问题,免费开源桌面整理革命
NoFences:彻底解决Windows桌面杂乱问题,免费开源桌面整理革命 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了Windows桌面上满屏的图标&a…...
