土木本科生的STM32探索之旅:按键控 LED 的 “亮灭 + 翻转” 实战

发布时间:2026/10/24 5:15:14
土木本科生的STM32探索之旅:按键控 LED 的 “亮灭 + 翻转” 实战 一、从 “单纯亮灯” 到 “交互控制”作为系列文章里的“土木跨界STM32选手”上一篇刚搞定了“点亮板载LED小灯或者是使小灯闪烁”的基础实验——当时不过是让STM32的IO口输出高低电平像给LED下了个“固定指令”亮或灭都由代码写死算是和STM32的“输出功能”打了个照面。但实际项目里哪有这么“单向”的控制比如后续想做土木监测里的“传感器触发报警灯”就得让硬件“接收输入信号→做出对应反应”。而这次的实验就是把“按键输入”和“LED输出”连起来从“单纯亮灯”升级到“交互控制”不是我写死LED的状态而是按键按下去LED才听指令——按下按键aLED0跟着亮松开按键aLED0跟着灭按一下按键bLED1还能自己“切换状态”。对我这个土木生来说这步是从“会让硬件‘动起来’”到“能让硬件‘听指令动’”的小突破也是后续做更复杂的“输入-输出联动”比如传感器触发设备的基础。二、实战准备硬件 软件软硬件都是延用之前几次实验的东西硬件STM32F103VET6 开发板、st-link、杜邦线若干软件STM32 Cube IDE其他准备原理图已经连接好st-link的白羊座板子STM32 Cube IDE原理图网址如下DRG ST-2白羊座原理图V1.0.pdf三、原理按键与 LED 的 “控制逻辑”实验目标1、按下按键aled0亮起而松开按键aled0熄灭2、按一下按键bled1的亮灭状态实现翻转由亮转灭或者由灭转亮图片取自高博士的ppt白羊座-STM32F103VET6 开发板的相关ppt链接如下1 课件pptx · gaoyanzeng/drg_st_2_f103vet6 - 码云 - 开源中国下面我将会从我个人学习以后的角度来讲一讲原理如果大家没有听明白的地方也可以去看专业人员录制的相关视频视频链接如下高博士-白羊座-STM32F103VET6[04-03]实验1_按键控制LED亮灭_哔哩哔哩_bilibilikeysking对应白色板子白羊座-STM32F103C8T6芯片和部分代码略有不同但是原理是相同的【STM32入门教程-2025】第4集 按键控制小灯 GPIO输入 | keysking的stm32教程_哔哩哔哩_bilibili下面我将对按键的原理图进行简单的讲解。从我提供的网站中打开STM32F103VET6的原理图找到按键A和按键B的原理图。图里有 2 个独立的按键电路分别对应 “按键 A” 和 “按键 B”。 “按键 A” 和 “按键 B”原理是相同的所以就以按键A为例。按键 A对应 K1 按键连接的STM32F103VET6引脚是pa0通过 K1 按键接GND也就是低电平。工作逻辑简单地来说就是如果pa0是高电平3.3v当按键按下时引脚通过按键直接连到GND就导通了1234全部是低电平0若是按键没有按下1和2那里还是高电平只有3和4是低电平0。那要怎么实现按下按键aled0亮起而松开按键aled0熄灭大白话按键A按下即k1位置处的拨片连通了pa0连通到了地一条线导通了对应的led0小灯亮起也就是pb0变为低电平。pa0由高电平变为低电平pb0也为低电平此时的led0小灯亮起。本括号里面的解释是为了等会软件上面做判定使用按键A松开即k1位置处的拨片断开了pa0连通到了地一条线导通了对应的led0小灯亮起也就是pb0变为低电平。pa0由低电平变为高电平pb0也为高电平此时的led0小灯熄灭。本括号里面的解释是为了等会软件上面做判定使用那怎么实现按一下按键bled1的亮灭状态实现翻转由亮转灭或者由灭转亮这里的原理会和上一个原理类似在软件的操作中用时翻转高电平的函数即可以是原来的高电平输出低电平原来是低电平的地方输出高电平。哈哈可能原理这里我自己讲的也许会有一些错误会导致大家听了以后还会有点懵。看看网课或者咨询一下AI也行不好意思啦我个人的专业性可能还不够从学习中遇到了更难的专业性内容暂时会听不明白就比如在高博士的讲解视频中涉及到了寄存器的东西很多原理性知识听不明白可以先放一放先跟着做学会用会用了以后再回过头来看一看理论的讲解兴许就能明白了一些东西。四、软件上的实战可以使用AI指导实验1、按键无消抖的情况打开cubeide软件新建项目。使用已经收藏过的点击星星⭐找到目前使用的芯片或者在框框中搜索STM32F103VET6 项目名称Key_Control_LED为了避免f103芯片被锁设置debug模式。两个led小灯的gpio设置我这里是选择led0pb0、led1pb1。将我们的实验目标选择的引脚和原理图发送给AI它给出了参数的设置建议。由于是参考了AI给定的指导我这里失败了一次按键b按下并未成功实现小灯的翻转原因是设置错了gpio mode都应该修改为pull-up上拉输入。可见有时候对原理的理解不够准确AI会带偏我们。在图形化配置中重新修改gpio的模式如下图所示。根据AI的指导过程我们设好gpio后保存并生成代码。在while循环中增加我们自己的代码可以使用AI辅助代码的编写修改存在的问题代码解析。/* USER CODE BEGIN WHILE */ while (1) { // ---------- 按键aPA0控制LED0PB0按下亮、松开灭 ---------- if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) GPIO_PIN_RESET) // 检测按键a是否按下PA0配置为上拉输入如果读到按键a被按下也就是PA0被拉为低电平 { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 点亮LED0就给PB0引脚写入低电平原理图可知pb0低电平点亮 } else // 否则按键a松开 { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 熄灭LED0给PB0引脚写入高电平原理图可知pb0高电平熄灭 } // ---------- 按键bPC13控制LED1PB1按下翻转无消抖 ---------- if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) GPIO_PIN_RESET) // 检测按键b是否按下PC13上拉输入按下bpc13低电平GPIO_PIN_RESET { while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) GPIO_PIN_RESET){} // 一直等待着直到按键松开 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1); // 翻转pb1的高低电平来实现LED1的亮灭状态变化 } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */编译下载观察实验的效果。烧录好了以后我们会发现按键a这里按下led0亮起松开熄灭没有问题。但是按键b按下小灯亮起有时候按下两次小灯才熄灭又或者是按下以后闪了一下迅速熄灭等情况出现。这里就是涉及到了物理按键消抖的问题了可以在软件上面使用代码来延时消抖。2、软件消抖的情况消抖的原理可以在哔哩哔哩上面观看高博士或者是keysking的视频。[04-04]实验2_按键的软件消抖_哔哩哔哩_bilibili由于我不是这个专业的学生可能在原理的理解上会有些吃力或者滞后我就不讲原理了暂时就不耽误大家的时间了我这里直接提供相关的代码吧。只需要在while循环中加入按键b的消抖代码可以用延迟的方式消抖。详细的代码如下重新编译并下载观察实验的效果// ---------- 按键bPC13控制LED1PB1按下翻转无消抖 ---------- if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) GPIO_PIN_RESET) // 检测按键b是否按下PC13上拉输入按下bpc13低电平GPIO_PIN_RESET { HAL_Delay(10); // 软件消抖延时10毫秒或者20毫秒也可以过滤按键机械抖动 // 二次确认按键是否真的按下避免抖动误触发 if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) GPIO_PIN_RESET) { while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) GPIO_PIN_RESET){} // 一直等待着直到按键松开 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1); // 翻转pb1的高低电平来实现LED1的亮灭状态变化 } }相比之下加入延时以后实验的效果好了很多。五、总结与思考1、致谢keysking、高博士_嵌入式的助力2、作为一个土木背景的嵌入式新手这次实验算是把 “GPIO 输入输出” 的逻辑从 “纸面概念” 落地到了实际至少实验是成功了有些明白了上拉 / 下拉输入的电平逻辑之前总搞反 “按下 高 / 低电平”直到实际调代码才明白 —— 上拉输入的按键按下是低电平GPIO_PIN_RESET必须和代码判断条件对应摸清了 “硬件和软件的绑定关系”LED 点亮逻辑得看原理图PB0/PB1 是低电平点亮不能盲目写代码里的高低电平理解了软件消抖的本质一开始没加消抖时按键按一次 LED 翻好几次加了 10ms 延时 二次确认后才稳定这才懂 “机械按键的物理抖动会影响软件逻辑”。这次实验踩的坑其实是嵌入式 “硬件 软件” 联动的典型问题3、由于近期临近期末考试本期文章相关的视频将会哔哩哔哩视频逐步更新敬请期待。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询