STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)

STM32HAL库+按键扫描+定时器间隔时间扫描 STM32HAL库H7系列+HAL库+定时器定时10ms扫描按键是否按下+进行按键处理 阅读详情
AI摘要

本文详细介绍了使用STM32开发环境,通过Proteus绘制电路原理图,STMCubeMX配置引脚和工作模式,以及MDK编写并调试HAL库的按键检测代码,实现LED的开关控制。通过实际操作演示了如何利用GPIO的输入检测功能和按键控制LED的点亮与熄灭过程。,

一、功能需求分析

搭建完成开发STM32开发环境之后,开始GPIO的学习。上一节已经测试了使用GPIO的输出模式,实现LED点亮的功能。
本次案例实现GPIO的输入检测功能,实现按键状态检测,通过按键状态控制LED。

需求分析:

  1. 接线:PA6-KEY1、PA7-KEY2、PA0-LED1、PA1-LED2;
  2. KEY1控制LED1、KEY2控制LED2;
  3. 按键闭合高电平,断开低电平;
  4. 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输入输出案例的编写,后面,会给大家介绍更多的功能。

Stm32f103c8t6(proteus仿真)学习——3.按键控制LED灯 3.按键控制LED灯 阅读详情

相关推荐

STM32CubeMX+Keil5+Proteus实现按键控制LED灯(入门篇)

嵌入式入门学习本文说明STM32CubeMX安装和使用 本文说明 学生党,之前学习过嵌入式的课程,跟着正点原子的视频一步一步地构建项目的工程,主要是基于标准库的开发,整个过程实在是过于繁琐。想必有的同学也应深有体会。 最近准备开始嵌入式相关的工作,打算使用HAL库进行开发,所以看了许多视频和教程做一个项目,本文主要做一个学习总结。 STM32CubeMX安装和使用 官网安装链接 选择适应自己的系统即可 安装过程就不细谈了,基本上就是一直下一步 打开软件,安装HAL库,这里我们选择在线安装HAL库 选择所需

爱学习的诸葛铁锤的博客 2万+

【STM32仿真】STM32CubeMX+Keil+Proteus单片机仿真

博主最近需要联合proteush和STM32CubeMX两个软件进行单片机的仿真,为后期的硬件打下基础。主要目的是学习软件的使用和单片机的仿真。本文是我在学习proteus软件和STM32CubeMX过程当中的心得和学习笔记,在学习时已经有C, C++的基础。文章附上了学习的代码,仅供大家参考。如果有问题,有错误欢迎大家留言。

晚安的博客 1万+

STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)

在完成开发环境搭建之后,开始使用STM32GPIO的功能,可以看到上次测试案例,LED点亮实验,在其基础上,调用HAL库的读写引脚,反转引脚状态的API函数,实现流水灯效果。 需求分析: 1. 使用PA0-PA3引脚,分别连接LED0-3; 2. 实现回马枪样式的流水灯效果,首先LED0-3依次点亮,然后LED3-0逆序点亮; 3. LED使用低电平驱动方式; 4. 为了演示效果,四个LED选取不同的颜色。

Empty_Android的博客 1545

蓝桥杯STM32 G431 hal库开发速成——GPIO输入——按键

GPIO输入,key按键

weixin_44860466的博客 2467

Proteus仿真STM32按键检测:从原理图到代码的完整虚拟验证方案

在嵌入式开发中,电路仿真是一种重要的前期验证手段,它允许开发者在投入物理硬件前,对系统设计进行功能性测试。其核心原理是通过软件模拟硬件电路和微控制器的行为,构建一个虚拟的闭环验证环境。这项技术的核心价值在于显著降低试错成本、加速开发周期,尤其适用于电路原理验证、底层驱动调试和算法逻辑测试等场景。通过仿真,工程师可以直观观察GPIO电平变化、信号时序,并验证如按键消抖等关键逻辑。本文聚焦于STM32的按键检测仿真,详细解析了在Proteus环境中,如何结合Keil MDK,从软件安装、工程创建、电路绘制到代码

weixin_33739646的博客 363

Proteus仿真STM32按键检测:从电路搭建到代码调试完整指南

在嵌入式系统开发中,硬件调试往往成本高昂且周期漫长。电路仿真技术为开发者提供了一个在代码烧录到物理芯片前验证硬件设计和驱动逻辑的虚拟环境,能有效提升开发效率、降低反复烧录测试的成本。Proteus作为一款主流的电子设计自动化软件,其VSM(虚拟系统建模)技术能够模拟微控制器的核心指令集和外设行为,实现软硬件协同仿真。对于STM32这类广泛应用的微控制器,通过Proteus进行按键检测等基础人机交互功能的仿真,可以帮助开发者深入理解GPIO配置、外部中断、消抖算法等关键技术原理。这种仿真驱动的开发方法,尤其适

weixin_29190573的博客 231

STM32HAL库+proteus仿真 1.点亮LED灯+流水灯

翻转端口电平,如果是高就变低,如果是低就变高。双击stm32,传入hex文件 (路径在 \MDK-ARM\LED)2.配置stm32cubemx,其他步骤和上面一样,只需修改端口。3.proteus仿真(笔者使用proteus8.15)传入即可看到D1到D8循环点亮,是不是很简单呢?然后仿真,可以看到LED被点亮o(* ̄︶ ̄*)o。1.建立stm32cubemx工程文件。选择stm32f103c8t6。根据仿真,LED低电平点亮。

m0_64167498的博客 1546

Proteus仿真STM32按键检测:从环境搭建到代码调试完整指南

嵌入式系统开发中,硬件仿真技术是验证电路设计和程序逻辑的关键前置环节。其核心原理是通过软件模拟微控制器及外围电路的电气特性,在虚拟环境中运行实际代码,从而提前发现设计缺陷。这项技术的工程价值在于显著降低开发成本与风险,尤其适用于教学演示、原型验证和算法测试等场景。以STM32 GPIO输入检测为例,通过Proteus搭建包含上拉电阻和按键的仿真电路,配合STM32CubeMX配置引脚模式与时钟树,再使用Keil MDK编写包含消抖逻辑的HAL库代码,最终实现LED状态控制。本文聚焦STM32F103C8的仿

weixin_28278377的博客 347

STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)

需求分析 1. 按键检测使用中断扫描方式; 2. 连线方式:PA0-LED0;PA1-LED1;PA4-KEY0;PA6-KEY1; 3. 按键中断模式设置为上升沿触

Empty_Android的博客 1547

STM32矩阵键盘驱动与Proteus仿真:从IO复用原理到HAL库实现

在嵌入式系统设计中,IO口复用是一项基础且关键的技术,它通过动态扫描检测机制,有效解决了微控制器IO资源有限与多外设需求之间的矛盾。其核心原理在于利用行列交叉的电路结构,以N+M个IO口控制N×M个按键,实现了硬件资源的极大节约。这项技术的工程价值在于将“一对一”的静态连接思维,升级为“分时复用”的动态管理思维,是嵌入式人机交互设计的基石。基于STM32 HAL库的矩阵键盘驱动开发,结合Proteus仿真验证,为嵌入式课程设计、毕业设计提供了稳定可靠的输入解决方案,典型应用于计算器、密码锁及各类菜单控制系统

weixin_30243533的博客 458

STM32F4 HAL流水灯Proteus仿真

STM32F4 HAL流水灯Proteus仿真

STM32-05基于HAL库(CubeMX+MDK+Proteus)串行通信案例(中断方式接收命令)

STM32-05基于HAL库(CubeMX+MDK+Proteus)串行通信案例(中断方式接收命令) COM2发送字符a,LED1熄灭; COM2发送字符b,LED1点亮; COM2发送字符c,LED2熄灭; COM2发送字符d,LED2点亮; COM2发送字符e,LED3熄灭; COM2发送字符f,LED3点亮;

Empty_Android的博客 1617

【Simscape】用Simscape实现三维物理仿真(三)——创建一个滑块单摆系统

1 首先创建一个Simscape Multibody 模型 (方法见 【Simscape】用Simscape实现三维物理仿真(一)——创建一个自由落体小球) 2 创建四个Solid模块 (1)摆杆 Shape : Brick Dimensions : [0.1 0.05 1] m (2)摆杆轴 Shape : Cylinder Radius : 0.02 m Le...

ReadAir的专栏 9036

STM32 中断控制LED流水灯(HAL库,Proteus仿真)

本文介绍了基于STM32F103的HAL库中断控制LED流水灯实验,通过STM32CubeMX配置GPIO输出和外部中断,实现LED流水灯及外部中断启停控制。实验采用软件消抖解决按键抖动问题,并利用Proteus进行仿真验证。实验步骤包括:1)使用STM32CubeMX配置GPIO和中断参数;2)在Keil中编写中断回调函数和主循环控制代码;3)硬件连接与功能测试。实验成功实现了LED流水灯效果,并通过外部中断可靠控制流水灯的启停,验证了STM32中断系统的应用。

2303_80679756的博客 1146

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)是一种将光电耦合器和MOSFET结合在一起的器件,用于实现电气隔离和信号传输。选择合适的光耦合MOSFET时,还需要考虑具体应用的需求和环境条件,以确保最佳性能和可靠性。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。

eydj2008的专栏 1725

微信开放标签wx-open-launch-app样式失效?手把手教你正确设置点击区域(附完整代码)

本文详细解析了微信开放标签`wx-open-launch-app`样式失效和点击无响应的常见问题,提供了完整的解决方案和代码示例。通过分析标签内部实现机制,指导开发者正确设置点击区域和样式,确保跨平台兼容性和用户体验优化。

joy55的博客 320

STM32 基于HAL库的LED流水灯

功能说明包含必要的头文件main.h:包含HAL库核心头文件和项目配置gpio.h:包含GPIO外设的初始化函数声明// 0:流水灯模式, 1:全亮模式, 2:全灭模式// 当前亮的LED索引功能说明led_mode:控制程序工作模式的状态变量0 = 流水灯模式(LED依次点亮)1 = 全亮模式(所有LED同时亮)2 = 全灭模式(所有LED同时灭):记录流水灯模式下当前点亮的LED序号启动初始化→ 所有LED熄灭主循环检测→ 持续检测开关状态模式切换→ 按键触发模式循环切换。

2301_79825245的博客 1166

锐捷交换机路由器配置全攻略:从基础命令到高级功能(附常用命令速查表)

本文提供锐捷交换机路由器配置全攻略,涵盖从基础命令到高级功能的详细指南,包括VLAN划分、DHCP配置、链路聚合等实用技巧,并附常用命令速查表,帮助网络管理员快速掌握锐捷设备运维。

weixin_29285605的博客 518

实验二基于HAL库和中断的LED流水灯

一、STM32中断原理与HAL库开发实现(基于STM32CubeMX+Keil)**1. 前置准备****2. 任务1:LED流水灯(GPIO周期闪烁)****3. 任务2:开关中断控制流水灯启停**二、Proteus 8.15电路绘制与仿真**1. 前置准备****2. 任务1(LED流水灯)原理图绘制****3. 任务2(开关中断控制)原理图补充**四.实验总结1.注意事项。

2501_93446470的博客 1602

Xtract or Ucfyber的最条理的整理入门级教程

XTRACT可以对任意截面进行全过程截面分析。工程中常用来分析各种截面(如异形柱、组合截面等)的非线性特征点及承载力校核。 xtract主要思路也是根据各种材料本构关系,基于平截面假定,用fiber划分截面进行全过程非线性分析。......

→★佐佑思维★← 8395

AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘解决方案

本文主要介绍了AttributeError: module ‘lib’ has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK’解决方案,希望能对使用python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 5万+

基于STM32CubeMX与HAL库的定时器中断实现高效LED流水灯及Proteus仿真验证

本文详细介绍了基于STM32CubeMX与HAL库的定时器中断实现高效LED流水灯的方法,并通过Proteus仿真验证。相比传统延时函数,定时器中断显著提升系统效率,释放CPU资源处理多任务,适合嵌入式开发初学者和实际项目应用。

k6l7m8n9的博客 832

Claude Code 常见安装失败问题与解决办法

摘要: Claude Code安装失败通常与环境、网络和权限问题有关,而非软件本身。主要误区包括:命令未识别(需检查PATH和终端重启)、网络连接失败(终端代理配置)、权限不足(系统安全限制)及账号认证问题。首次使用应避免复杂任务,建议从基础功能测试开始。快速自检可按终端重启→命令识别→网络→代理→权限→账号状态的顺序排查。理顺终端、网络和权限后,Claude Code运行将更稳定。 (150字)

sg_knight的专栏 6695

基于HAL库与中断的STM32流水灯实战:从CubeMX配置到Proteus仿真与Keil调试

本文详细介绍了基于HAL库与中断的STM32流水灯实战开发,涵盖从STM32CubeMX工程配置、Keil代码编写与调试,到Proteus仿真验证的全流程。重点解析了外部中断配置、回调函数实现及常见问题解决方案,帮助开发者快速掌握嵌入式开发核心技能。

herb5的博客 875

大数据Alluxio面试题及参考答案

Alluxio 在大数据生态里的定位是作为数据编排层,能在不同计算框架和存储系统之间起到桥梁的作用。它的核心功能在于加速数据访问,让大数据应用能够更高效地使用数据。Alluxio 把数据存储和数据处理分离开来,使计算框架可以在不考虑底层存储细节的情况下访问数据,这样就提高了系统的灵活性和可扩展性。Alluxio 和 HDFS 既存在关联又有区别。从关联方面来看,HDFS 是一种广泛使用的分布式文件系统,很多大数据应用都将其作为主要的数据存储系统。Alluxio 可以和 HDFS 集成,把 HDFS 当作底层

大模型大数据攻城狮的专栏 861

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

从 0 到 1!STM32F103C8T6 流水灯实战:CubeMx 配置 + Keil 编程 + Proteus 仿真全流程

因为我们之前在stm32cubemx的操作,GPIO等的初始化已经自动配置好了,我们只用在main.c中进行书写代码即可。完成所有配置后,点击 “Generate Code” 按钮生成初始化代码,生成完成后可直接打开 Keil 工程。启动 STM32CubeMx 软件,创建一个全新的工程文件,作为项目开发的基础。注意设置频率,如果未进行设置可能导致仿真无法进行,频率与时钟树中的频率保持一致。完成代码编写后,在 Keil 中执行编译,生成可执行文件(.hex)。型号芯片,完成工程的初始创建。

shdbdxh的博客 2042

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)
下一篇: STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值