当前位置: 首页 > news >正文

STM32 CubeMX按键点灯

本文代码使用 HAL 库。

文章目录

  • 前言
  • 一、按键原理图
  • 二、CubeMX 创建工程
  • 三、代码讲解:
      • 1. GPIO的输入HAL库函数:
      • 2. 消抖:
      • 3. 详细代码
  • 四,实验现象:
  • 总结


前言

我们继续讲解 stm32 f103,这篇文章将详细 为大家讲解 如何 使用 按键点亮 RGB 灯。


一、按键原理图

参考手册:

可以 看到 板子有 4 个按键 :KEY1, KEY2, KEY3, KEY4

对应的 io 端口分别是 :PA0, PG15, PC13, PE3.
在这里插入图片描述

以 KEY1 为例 分析:

该电路接了一个 3V 的电压。
当 按键 按下时,电流 流向按键,然后接地,则 PA0 为 低电平 0。
当按键 松开时,电流流向 PA0 ,则 PA0 是 高电平 1。

所以:
PA0 为 低电平 0 时,按键 按下
PA0 为 高电平1 时,按键 松开

二、CubeMX 创建工程

  1. 选择芯片。
    在这里插入图片描述
  2. 选择 Debug 模式。
    在这里插入图片描述
  3. 选择外部时钟。
    在这里插入图片描述
  4. 配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好。
    在这里插入图片描述
  5. 配置 io 引脚 为 输入引脚。
    在这里插入图片描述在这里插入图片描述
  6. 配置引脚。
    在这里插入图片描述
  7. 设置工程模式和版本。
    在这里插入图片描述
  8. 选取加入.c /.h文件(便于编写代码)。
    在这里插入图片描述
  9. 创建工程。
    在这里插入图片描述

三、代码讲解:

由于我们采用 封装的方法来写程序,所以 我们将 key 程序用一个.c .h文件封装起来,这样便于我们对代码进行修改与移植。

对于 led 的代码可以参考我之前的文章:STM32f103 CubeMX封装 led程序

1. GPIO的输入HAL库函数:

功能:读取一个GPIO引脚的电平。

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

例如: 读取 K1 的电平,将其重定义。

#define  K1   HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)

2. 消抖:

在这里插入图片描述

抖动产生原因: 按键按下的 瞬间 引脚的 电平 不是马上 从 高电平 变为 低电平 或者从 低电平 变成 高电平,而是有一个抖动。

解决方法: 可以使用加 延时 判断的办法消除这个抖动。

例如:按下 K1 点亮 led

    #define  K1   HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)#define Red_ON()  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)if(K1 == 0)  {HAL_Delay(100);  //消抖,延时 100 msif(K1 == 0)     //如果按键 真的 按下{Red_ON();  //led 亮}else Red_OFF();   //led 熄灭}

3. 详细代码

key.h 文件:

#include "main.h"#define  K1   HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)  //读取 K1 电平
#define  K2   HAL_GPIO_ReadPin(K2_GPIO_Port, K2_Pin) //读取 K2 电平
#define  K3   HAL_GPIO_ReadPin(K3_GPIO_Port, K3_Pin) //读取 K2 电平
void Key(void);

key.c 文件:

#include "key.h"
#include "led.h"void Key(void)
{if(K1 == 0){HAL_Delay(100);if(K1 == 0)Red_ON();else Red_OFF();}else if(K2 == 0){HAL_Delay(100);if(K2 == 0)Green_ON();else Green_OFF();}else if(K3 == 0){HAL_Delay(100);if(K3 == 0)BlUE_ON();else BlUE_OFF();}
}

四,实验现象:

对于按键 让 RGB 闪烁的实验结果我发在了 B占,有兴趣的可以看看:

实验现象


总结

下一篇 讲 OLED 显示。

相关文章:

STM32 CubeMX按键点灯

本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解:1. GPIO的输入HAL库函数:2. 消抖:3. 详细代码四,实验现象:总结前言 我们继续讲解 stm32 f103,这篇文章将详细 为大家讲…...

2023链动2+1模式到底是什么?带你了解核心规则

2023链动21模式到底是什么?带你了解核心规则 2023-02-24 梦龙 大家好,我是你们熟悉而又陌生的好朋友梦龙,一个创业期的年轻人 传统的直销模式产品低价高卖,消费者难以接受。虽然直销省去了传统流通渠道的中间环节,但…...

【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day14

大家好,我是陶然同学,软件工程大三今年实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…...

K8S篇-搭建kubenetes集群

安装环境 这里使用pve虚拟机搭建三台centos机器,搭建过程参考: Centos篇-Centos Minimal安装 此次安装硬件配置 CPU:2C 内存:2G 存储:64G 环境说明 操作系统:Centos 7.9 内核版本:6.2.0-1.el7.elrepo…...

文本生成图像简述4——扩散模型、自回归模型、生成对抗网络的对比调研

基于近年来图像处理和语言理解方面的技术突破,融合图像和文本处理的多模态任务获得了广泛的关注并取得了显著成功。 文本生成图像(text-to-image)是图像和文本处理的多模态任务的一项子任务,其根据给定文本生成符合描述的真实图像…...

财务共享建设,为什么需要电子影像系统?

某集团作为投资性集团公司,业务遍布全国20多个省市,控股公司200余家,业务范围涉及火电、供热、风电、天然气天然气、水务、铁路、港口、酒店、地产等20多个细分行业。 伴随着集团企业的快速发展,某集团在管理中面临“点多、面广、…...

「RISC-V Arch」SBI 规范解读(下)

第六章 定时器扩展(EID #0x54494D45"TIME") 这个定时器扩展取代了遗留定时器扩展(EID #0x00),并遵循 v0.2 中定义的调用规约。 6.1 函数:设置定时器(FID #0) struct sbi…...

Android framework socketpair

简述 在Linux中,socketpair函数可以用于创建一对相互连接的、通信域为AF_UNIX的套接字,其中一个套接字可用于读取,另一个套接字可用于写入。可以使用这对套接字在同一进程内进行进程间通信(IPC)。 以下是使用socketp…...

腾讯在海外游戏和短视频广告领域的新增长机会

来源:猛兽财经 作者:猛兽财经 腾讯(00700)的收入在过去几个季度一直在下降,部分原因是由于新冠疫情导致的经济放缓以及中国监管机构对大型科技公司的监管收紧导致游戏行业萎缩造成的。 然而,猛兽财经认为,这些不利因素…...

查找该学号学生的成绩。

从键盘输入某班学生某门课的成绩(每班人数最多不超过40人),当输入为负值时,表示输入结束,试编程从键盘任意输入一个学号,查找该学号学生的成绩。**输入格式要求:"%ld"(学号) "%l…...

为Webpack5项目引入Buffer Polyfill

前言 最近在公司的一个项目中使用到了Webpack5, 然而在使用某个npm包的时候,出现了Buffer is not defined 这个问题,原因很明显了,因为浏览器运行时没有Buffer这个API,所以需要为浏览器引入Buffer Polyfill. Webpack5…...

【人工智能 AI 】您可以使用机器人流程自动化 (RPA) 实现自动化的 10 个业务流程:Robotic Process Automation (RPA)

摘:人类劳动正在被机器(例如在工业中)或计算机程序(适用于所有行业)所取代。 目录 10 processes you can robotise in your company您可以在公司中实现自动化的 10 个流程 Human employees or robotic workers?人类员工还是机器人工人? Robots take over headhunting…...

VMware ESXi 8.0b - 领先的裸机 Hypervisor (Dell HPE Custom Image update)

本站发布 Dell 和 HPE 定制版 ESXi 8.0b 镜像 请访问原文链接:https://sysin.org/blog/vmware-esxi-8/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 产品简介 VMware ESXi:专门构建的裸机 Hyper…...

Java:SpringBoot 整合Spring-Retry实现错误重试

SpringBoot 整合Spring-Retry可以实现错误重试 目录引入依赖开启spring-retry使用重试注解Retryable 注解Backoff 注解测试参考引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactI…...

MyBatis学习笔记(二) —— 搭建MyBatis项目

2、搭建MyBatis 2.1、开发环境 IDE&#xff1a;idea 2019.2 构建工具&#xff1a;maven 3.5.4 MySQL版本&#xff1a;MySQL 8 MyBatis版本&#xff1a;MyBatis 3.5.7 MySQL不同版本的注意事项 1、驱动类 driver-class-name MySQL 5版本使用jdbc5驱动&#xff0c;驱动类使用…...

linux服务器上Docker中安装jenkins

前言 Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插件来支持构建、部署、自动化&#xff0c; 满足任何项目的需要。 本文主要提供通过docker安装jenkins镜像&#xff0c;并配置nginx反向代理页面配置和使用。通过jenkins完成项目的自动部署。 我在安装之前…...

自考都有哪些科目?怎么搭配报考?

第一次自考科目搭配 先报理论课&#xff0c;熟悉学习和考试套路 参考搭配模式&#xff1a; 一、全报考公共课 公共课难度较低&#xff0c;通过率高&#xff0c;复习起来比较轻松。对于不确定考什么专业&#xff0c;后期想换专业的同学&#xff0c;考过公共课&#xff0c…...

HIVE --- 高级查询

目录 CTE和嵌套查询 嵌套查询 关联查询&#xff08;join&#xff09; MapJoin MapJoin操作在Map端完成 开启MapJoin操作 MAPJOIN不支持的操作 union 数据交换&#xff08;import/export&#xff09; 数据排序 order by sort by distribute by cluster by CTE和嵌…...

【手撕源码】vue2.x双向数据绑定原理

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…...

Allegro如何显示层叠Options和Find操作界面

Allegro如何显示层叠Options和Find操作界面 Allegro常规有三大操作界面,层叠,Options和Find,如下图 软件第一次启动的时候,三大界面是关闭的,下面介绍如何把它们打开,具体操作步骤如下 点击菜单上的View点击Windows...

KityMinder:可视化思维的协作引擎 | 高效工作者必备工具

KityMinder&#xff1a;可视化思维的协作引擎 | 高效工作者必备工具 【免费下载链接】kityminder 百度脑图 项目地址: https://gitcode.com/gh_mirrors/ki/kityminder 在信息爆炸的时代&#xff0c;如何将零散的想法系统化、复杂的项目结构化&#xff1f;作为一款开源免…...

ai辅助开发c语言:如何利用快马智能编程助手精通数据结构与算法

今天想和大家分享一个特别实用的学习经验——如何用AI辅助工具高效学习C语言的数据结构与算法。作为一个刚接触数据结构的小白&#xff0c;我在实现单链表时遇到了不少坑&#xff0c;但通过InsCode(快马)平台的AI编程助手&#xff0c;整个过程变得轻松多了。 链表创建与节点插入…...

windows java jar 包后台运行

使用 javaw 实现后台运行&#xff08;简单场景&#xff09;这是最简单的方法。Java 自带的 javaw.exe 是 java.exe 的变体&#xff0c;它运行程序时不会打开任何控制台窗口。操作步骤&#xff1a;创建一个新的文本文件&#xff0c;命名为 start.bat。在文件中写入以下内容&…...

Phi-4-mini-reasoning快速部署:Conda环境+PyTorch2.8适配避坑指南

Phi-4-mini-reasoning快速部署&#xff1a;Conda环境PyTorch2.8适配避坑指南 1. 项目概述 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、低延迟&quo…...

世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作&#xff0c;需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释&#xff08;因业务实际需要存储大数值关联字段&#xff09;。 表的核心特性为Java 多线程密集读写&#xff0c;业务请求持续…...

LeagueAkari:如何用数据驱动你的英雄联盟竞技水平提升

LeagueAkari&#xff1a;如何用数据驱动你的英雄联盟竞技水平提升 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在英雄联盟这款全球热门的竞…...

cool-admin(midway版)前端路由缓存:include与exclude配置策略

cool-admin(midway版)前端路由缓存&#xff1a;include与exclude配置策略 【免费下载链接】cool-admin-midway &#x1f525; cool-admin(midway版)一个很酷的后台权限管理框架&#xff0c;模块化、插件化、CRUD极速开发&#xff0c;永久开源免费&#xff0c;基于midway.js 3.x…...

遥感小白别慌!ENVI 5.6 基础操作保姆级教程:从打开文件到剖面图显示,一篇搞定

遥感新手实战指南&#xff1a;ENVI 5.6 从零到剖面分析的完整工作流 第一次打开ENVI时&#xff0c;那个布满英文按钮的界面和密密麻麻的菜单栏&#xff0c;是不是让你瞬间想起了大学时被专业课支配的恐惧&#xff1f;别担心&#xff0c;三年前的我也是这样——面对一幅Landsat…...

Phi-4-mini-reasoning真实案例:GPT-4对比测试中更优的确定性推理表现

Phi-4-mini-reasoning真实案例&#xff1a;GPT-4对比测试中更优的确定性推理表现 1. 模型介绍 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型&#xff0c;特别擅长处理需要多步逻辑推导的问题。与通用聊天模型不同&#xff0c;它被设计用来解决数学题、逻辑题等需…...

为什么选择Zabbix而不是Prometheus?K8s监控工具深度对比与实战配置

Zabbix与Prometheus在Kubernetes监控中的技术决策指南 当企业级容器平台需要构建监控体系时&#xff0c;技术选型往往成为困扰架构师的核心难题。作为当下最主流的两个开源监控解决方案&#xff0c;Zabbix与Prometheus在Kubernetes生态中的表现各有千秋。本文将基于实际生产环境…...