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仿真按键即可领取源码和工程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五款软件推荐:U盘数据不小心删除了?帮你快速找回!

U盘数据不小心删除了怎么恢复?U盘是一种便携式存储设备,因其小巧轻便而广受欢迎。但是,U盘也常常会遇到数据丢失的问题。当U盘数据丢失时,需要找到一款可靠的数据恢复软件来恢复数据。 接下来为大家推荐5款好用的免费U盘数据恢复软…

Python 使用scrapy框架

1、安装scrapy 2、使用scrapy创建项目,在终端命令行 执行如下命令,会创建一个myproject项目 scrapy startproject myproject 3、创建完成后,目录结构如下 4、cd myproject进入项目 ,执行scrapy genspider weather ******,会在spiders下创建…

Incredibuild for Mac 来了!

Mac 开发者在寻找适合自己需求的工具时可能会遇到一些困难,因为 Mac 操作系统相对封闭,不像其他系统那样开放和灵活。尽管如此,Mac 开发者在开发应用程序时的需求(比如功能、效率等)和使用其他操作系统的开发者是类似的…

Linux中安装Docker,并使用Docker安装MySQL和Redis

1、安装docker 1卸载系统之前的docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、安装Docker-CE #安装必须的依赖 sudo yum install -y yum-utils \device-map…

LINUX----进程替换,exec族函数

execl族函数的作用 exel族函数用于调用一个已经存在的可执行程序,将该程序的运行需要的代码区和数据区的数据覆盖原进程,这样就可以实现在一个进程中调度另一个进程. 简单实现一个小功能来看一看 mytest.c #include <stdio.h> #include <unistd.h>int main(){print…

抽象的java入门1.3.0

前言&#xff1a; 在1.2.0版本中我们介绍了public class hello {}并从中提取出两个新概 修饰符和作用域 public class hello {public static void main(String[] args) {System.out.println("Hello World");} } 正片&#xff1a; 这一期把剩余的内容刨析出来 pub…

【Redis学习笔记04】Jedis客户端(上)

Java客户端操作Redis Java生态丰富&#xff0c;自定义的客户端非常多&#xff0c;常见的有Jedis、Lettuce、以及Spring整合后的RedisTemplate&#xff0c;但是对于初学者而言&#xff0c;从Jedis开始入门学习是非常容易上手的&#xff0c;因为Jedis中的API与原生Redis命令高度…

Android Bugreport分析工具:ChkBugReport教程

安装&#xff1a; 如果下载地址过期请看原仓库地址的wiki&#xff0c;或许会有更新&#xff1a;https://github.com/sonyxperiadev/ChkBugReport/wiki 提前下载好如下文件&#xff1a; ​​​​​​http://sonyxperiadev.github.io/ChkBugReport/download/chkbugreport (Lau…

一分钟有60秒,这个有趣的原因你知道吗?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

像素坐标系与图像坐标系

前言 在数字图像处理中&#xff0c;经常会看到使用 (x, y) 表示图像中的某个像素点。 在一些图像处理库&#xff0c;例如 Pillow 、OpenCV 、Numpy 中也会使用到坐标系处理图像的像素点。 介绍 无论是像素坐标系还是图像坐标系&#xff0c;其原理都是一样的&#xff1a; 以…

UI学习(二)

UI学习&#xff08;二&#xff09; 文章目录 UI学习&#xff08;二&#xff09;布局子视图手动布局自动布局 导航控制器导航控制器基础导航控制器的切换导航栏工具栏 分栏控制器分栏控制器协议部分的内容UITableView基础部分相关的协议函数高级协议与单元格 多界面传值 布局子视…

2024年6月9日 (周日) 叶子游戏新闻

万能嗅探: 实测 网页打开 某视频号、某音、某红薯、某站&#xff0c;可以做到无水印的视频和封面下载功能哦&#xff0c;具体玩法大家自行发挥吧。 《Funko Fusion》发布新预告 20款影视作品齐聚一堂第三人称动作游戏新作《Funko Fusion》今日发布最新实机演示。该游戏融合了整…

Linxu: Dynamic debug 简介

文章目录 1. 前言2. 什么是 Dynamic debug (dyndbg) ?3. Dynamic debug (dyndbg) 的使用3.1 开启 Dynamic debug (dyndbg) 功能3.2 使用 Dynamic debug (dyndbg) 功能 4. Dynamic debug (dyndbg) 的实现4.1 内核接口 dynamic_pr_debug() 的实现4.2 debugfs 导出控制节点 contr…

力扣hot100学习记录(十二)

94. 二叉树的中序遍历 给定一个二叉树的根节点 root&#xff0c;返回它的中序遍历。 题意 给定一个二叉树&#xff0c;返回它的中序遍历 思路 采用递归的思想&#xff0c;只要根节点不为空&#xff0c;则一直递归遍历左子树&#xff0c;然后将根节点的值存入结果&#xff0c;…

AutoCAD Mechanical机械版专业的计算机辅助设计软件安装包下载安装!

AutoCAD机械版作为一款专业的计算机辅助设计软件&#xff0c;不仅具备卓越的二维绘图功能&#xff0c;更是拥有令人瞩目的3D建模工具&#xff0c;为机械设计师们提供了前所未有的创作空间。 在AutoCAD机械版的3D建模环境中&#xff0c;用户可以借助一系列简洁明了的命令&#…

数智融通 创新发展|亚信科技携AntDB、Data OS与隐私计算产品,赋能企业高质量发展

5月21日&#xff0c;亚信科技在云端举办了一场别开生面的研讨会——“数智融通 创新发展”&#xff0c;聚焦企业数智化升级的前沿话题。资深产品经理和技术架构师们面对面深入交流&#xff0c;分享创新成果与实战案例&#xff0c;共同探索企业数智化转型的新路径。 图1&#xf…

网络安全形势与WAF技术分享

我一个朋友的网站&#xff0c;5月份时候被攻击了&#xff0c;然后他找我帮忙看看&#xff0c;我看他的网站、网上查资料&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;最近几年这网络安全形势真是不容乐观&#xff0c;在网上查了一下资料&#xff0c;1、中国信息通…

基础数据结构 -- 栈

1. 简介 堆栈又名栈&#xff08;stack&#xff09;&#xff0c;他是计算机科学中最基础的数据结构之一。可以算是一种受限制的线性结构&#xff0c;&#xff0c;具有后进先出&#xff08;LIFO&#xff0c; Last In First Out&#xff09;的特性。由于此特性&#xff0c;堆栈常用…

OPenCV的重要结构体Mat

一 Mat Mat是什么&#xff1f; Mat有什么好处&#xff1f; class CV_EXPORTS Mat{ public: ... int dims;//维数 int rows,cols;//行列数 uchar *data;//存储数据的指针 int *refcount;//引用计数 ...};二 Mat属性 三 Mat拷贝 1 Mat浅拷贝 Mat A Aimread(file,IMREAD_COLOR) …

http接口上传文件响应413:413 Request Entity Too Large

目录 一、场景简介二、异常展示三、原因四、解决 一、场景简介 1、服务端有经过nginx代理 2、上传文件超过5M时&#xff0c;响应码为413 3、上传文件小于5M时&#xff0c;上传正常 二、异常展示 三、原因 nginx限制了上传数据的大小 四、解决 扩大nginx上传数据的大小 步…