STM32 proteus + STM32Cubemx仿真教程(第二课按键教程)

文章目录

  • 前言
  • 一、STM32按键的原理
  • 二、STM32Cubemx创建工程
  • 三、proteus仿真电路图
  • 四、程序代码编写
    • 4.1函数介绍
    • 4.2使用按键点亮LED灯
  • 总结


前言

本篇文章开始带大家学习如何使用proteus和STM32Cubemx来完成STM32的学习,第二节课我们先来学习按键的用法。

proteus使用8.9版本。

STM32Cubemx使用6.3版本。

一、STM32按键的原理

GPIO引脚配置为输入模式

首先,需要将STM32的某个GPIO引脚配置为输入模式,以便读取按键的状态。通常情况下,按键有两种连接方式:

上拉电阻连接方式:按键一端接地,另一端接GPIO引脚,同时GPIO引脚内部启用上拉电阻。当按键未按下时,GPIO引脚为高电平;按键按下时,GPIO引脚为低电平。

下拉电阻连接方式:按键一端接电源(如3.3V),另一端接GPIO引脚,同时GPIO引脚内部启用下拉电阻。当按键未按下时,GPIO引脚为低电平;按键按下时,GPIO引脚为高电平。

二、STM32Cubemx创建工程

在这里的话我们可以把之前的工程复制过来就行了,在原来的基础上我们对他进行修改即可。

在这里插入图片描述
选择一个引脚作为输入引脚

在这里插入图片描述

三、proteus仿真电路图

找到按键:
在这里插入图片描述
放置按键:

这里需要注意按键的使用的时候需要加上上拉或者是下拉电阻,防止按键处于悬空状态。

在这个电路图中当按下按键时PC6接地表现出低电平,当松开按键时PC6通过上拉电阻连接到了电源,所以此时按键表现为高电平。
在这里插入图片描述

四、程序代码编写

4.1函数介绍

HAL_GPIO_ReadPin函数
HAL_GPIO_ReadPin函数用于读取指定GPIO引脚的电平状态。

函数原型

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

参数说明

GPIOx: 指定GPIO端口基地址,具体可以是GPIOA, GPIOB, GPIOC等。
GPIO_Pin: 指定GPIO引脚,使用宏定义,如GPIO_PIN_0, GPIO_PIN_1等。

返回值

GPIO_PIN_RESET(低电平)
GPIO_PIN_SET(高电平)

4.2使用按键点亮LED灯

在这里插入图片描述

这里需要注意在使用按键的时候需要进行消抖处理:

按键在机械结构上的设计导致了其在按下和释放时可能会产生抖动现象。抖动是指在按键触点闭合或断开时,触点会在短时间内快速地多次接触和断开,导致检测到的按键信号在短时间内出现多次高低电平的变化。消抖处理的主要原因包括以下几个方面:

  1. 抖动的原因
    机械结构的自然特性:按键的触点在按下和释放的过程中并不是立即稳定在某个位置,而是会发生短时间的颤动。
    弹簧或金属片回弹:按键内部的弹簧或金属片在按压和松开过程中会回弹,这会导致触点短时间内多次接触和断开。
  2. 抖动的影响
    多次检测按键按下:如果不进行消抖处理,当按键按下一次时,系统可能会检测到多次按下信号,导致按键事件被误认为是多次按下。
    误触发:抖动可能会导致不正确的按键事件触发,比如在抖动期间误认为按键已经松开。
    系统稳定性:频繁的抖动信号会增加系统的处理负担,影响系统的稳定性和可靠性。
  3. 消抖处理的方法
    消抖处理的方法主要有硬件消抖和软件消抖。

3.1 硬件消抖
硬件消抖是通过硬件电路来过滤掉按键抖动信号,常用的方法包括:

电容消抖:在按键电路中并联一个电容,利用电容的充放电特性来平滑按键信号。
施密特触发器:使用施密特触发器电路将抖动信号转换为稳定的高低电平信号。

3.2 软件消抖
软件消抖是通过编程手段在软件层面过滤掉按键抖动信号,常用的方法包括:

延时法:检测到按键状态变化后,延时一段时间(如10ms),再次检测按键状态,如果状态没有变化,则认为按键状态有效。
计数法:连续多次读取按键状态,只有在连续多次读取到相同状态时,才认为按键状态有效。
状态机法:使用状态机来管理按键状态的变化,只有在状态稳定时才进行按键处理。

总结

本篇文章就讲解到这里,大家有什么疑问都可以留言。

本篇文章代码和工程将放在微信公众号中。

回复 STM32仿真按键即可领取源码和工程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/694065.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

景区ar互动大屏游戏化体验提升营销力度

从20世纪60年代的初步构想,到如今全球范围内无数企业的竞相投入,AR增强现实技术已成为引领科技潮流的重要力量。而在这一浪潮中,中国的AR公司正以其独特的魅力和创新力,崭露头角。 中国的AR市场正在迎来前所未有的发展机遇。如今&…

qmt量化交易策略小白学习笔记第16期【qmt编程之获取北向南向资金(沪港通,深港通和港股通)】

qmt编程之获取北向南向资金 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 北向南向资金(沪港通,深港通和港股通) #北向南向资金交易日历 获取交易日列表…

UltraEditUEStudio软件最新版下载及详细安装教程

UEStudio简介: UEStudio建立在上文本编辑器UltraEdit的功能基础上,并为团队和开发人员提供了其他功能,例如深度Git集成。您可以直接在UEStudio中克隆,签出,更新,提交,推入/拉入等操作&#xff…

SpringBoot整合钉钉实现消息推送

前言 钉钉作为一款企业级通讯工具,具有广泛的应用场景,包括但不限于团队协作、任务提醒、工作汇报等。 通过Spring Boot应用程序整合钉钉实现消息推送,我们可以实现以下功能: 实时向指定用户或群组发送消息通知。自定义消息内容…

知识图谱的应用---智慧交通

文章目录 智慧交通典型应用 智慧交通 现代城市发展过程中的一大问题是交通拥堵,为解决城市发展中的这一顽疾,有必要以现代化高科技技术为支撑,建造城市中的智慧交通系统,从源头入手缓解城市拥挤问题。当前,“智慧交通”…

如何获取当前dll或exe模块所在路径?

有时我们需要在当前运行的dll或exe模块中去动态加载当前模块同路径中的另一个库,或者启动当前模块同路径中的另一个exe程序,一般需要获取当前模块的路径,然后去构造同路径下目标模块的绝对路径,然后通过该绝对路径去加载或启动该目…

java自学阶段二:JavaWeb开发50(Spring和Springboot学习)

Spring、Springboot基础知识学习 目录 学习目标Spring基础概念IOC控制反转DI依赖注入事务管理AOP面向切面编程Spring案例说明(Postman使用、Restful开发规范、lombok、Restful、nginx了解) 一:学习目标: 1)了解Sprin…

海洋日特别活动—深海来客——可燃冰

深海中有一种神奇的物质,似冰又不是冰。 别看它其貌不扬,但本领不小,遇火即燃,能量巨大,可谓是能源家族的新宠。它就是被国务院正式批准列为我国第173个矿种的“可燃冰”! 可燃冰到底是个啥?它…

C++ | Leetcode C++题解之第133题克隆图

题目&#xff1a; 题解&#xff1a; class Solution { public:Node* cloneGraph(Node* node) {if (node nullptr) {return node;}unordered_map<Node*, Node*> visited;// 将题目给定的节点添加到队列queue<Node*> Q;Q.push(node);// 克隆第一个节点并存储到哈希…

Java Web学习笔记31——Maven介绍

Maven&#xff1a;Java项目的构建工具。 Maven&#xff1a; Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建Java项目的工具。 Apache软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&#xff0c;也是一个专…

手把手带你做一个自己的网络调试助手(2) - TCP服务器完善

服务器指定客户端发送 自定义控件comboBox - 刷新客户端列表 目的&#xff1a; 自定义控件&#xff0c;当鼠标点击这个comboBox控件的时候去刷新客户端列表 mycombobox.h #ifndef MYCOMBOBOX_H #define MYCOMBOBOX_H#include <QComboBox> #include <QWidget>cl…

服务部署:.NET项目使用Docker构建镜像与部署

前提条件 安装Docker&#xff1a;确保你的Linux系统上已经安装了Docker。如果没有&#xff0c;请参考官方文档进行安装。 步骤一&#xff1a;准备项目文件 将你的.NET项目从Windows系统复制到Linux系统。你可以使用Git、SCP等工具来完成这个操作。如何是使用virtualbox虚拟电…

SpringCloud Gateway中Filters详细说明

前面 https://blog.csdn.net/J080624/article/details/139494909 我们研究了GateWay中各种路由断言的使用。SpringCloud GateWay 还提供了各种过滤器用来对请求和响应进行处理。 官网地址&#xff1a;SpringCloud Gateway Filter 【1】GatewayFilter Factories 路由过滤器允…

20240609如何查询淘宝的历史价格

20240609如何查询淘宝的历史价格 2024/6/9 18:39 百度&#xff1a;淘宝历史价格 淘宝历史价格查询网站 https://zhuanlan.zhihu.com/p/670972171 30秒学会淘宝商品历史价格查询&#xff01; https://item.taobao.com/item.htm?id693104421622&pidmm_29415502_2422500430_1…

排序-读取数据流并实时返回中位数

目录 一、问题描述 二、解题思路 1.顺序表排序法 2.使用大根堆、小根堆 三、代码实现 1.顺序表排序法实现 2.大根堆、小根堆法实现 四、刷题链接 一、问题描述 二、解题思路 1.顺序表排序法 &#xff08;1&#xff09;每次读取一个数就对列表排一次序&#xff0c;对排…

python-微分方程计算

首先导入数据 import numpy as np from scipy.integrate import odeint from scipy.optimize import minimize import matplotlib.pyplot as pltdata np.array([[30, 4],[47.2, 6.1],[70.2, 9.8],[77.4, 35.2],[36.3, 59.4],[20.6, 41.7],[18.1, 19],[21.4, 13],[22, 8.3],[2…

初识 peerDependencies

目录 初步认识 peerDependencies semver 介绍 # 摘要 # 简介 # 语义化版本控制规范&#xff08;SemVer&#xff09; # 合法语义化版本的巴科斯范式语法 # 为什么要使用语义化的版本控制&#xff1f; # FAQ 示例讲解&#xff1a;vue-router 插件 # 说明 声明 验证 初…

电子阅览室有何作用

随着互联网的快速发展&#xff0c;电子阅览室逐渐成为人们获取知识的新方式。它为读者提供了便捷、高效的阅读体验&#xff0c;具有诸多作用。首先&#xff0c;电子阅览室拥有丰富的电子书籍资源&#xff0c;涵盖了各个领域的知识。无论是文学作品还是学术论文&#xff0c;读者…

商城项目【尚品汇】08异步编排-01基础篇

文章目录 1.线程的创建方式1.1继承Thread类&#xff0c;重写run方法1.2实现Runnable接口&#xff0c;重写run方法。1.3实现Callable接口&#xff0c;重新call方法1.4以上三种总结1.5使用线程池创建线程1.5.1线程池创建线程的方式1.5.2线程池的七大参数含义1.5.3线程池的工作流程…

探索 Docker:容器化技术的未来

1. 引言 在传统的软件开发和部署过程中&#xff0c;经常会遇到诸如“开发环境和生产环境不一致”、“依赖环境冲突”、“部署困难”等问题。为了解决这些问题&#xff0c;容器化技术应运而生。Docker 作为最受欢迎的容器平台之一&#xff0c;已经在业界得到广泛应用。它不仅简化…