【STM32+HAL+Proteus】系列学习教程4---GPIO输入模式(独立按键)

server/2024/10/21 10:15:09/

实现目标

1、掌握GPIO 输入模式控制

2、学会STM32CubeMX配置GPIO的输入模式

3、具体目标:1、按键K1按下,LED1点亮;2、按键K2按下,LED1熄灭;2、按键K3按下,LED2状态取反;


一、STM32 GPIO 输入模式

1、按键模式选择

STM32的GPIO共有8种工作模式

  • 输入模式:模拟输入、上拉输入、下拉输入和浮空输入;
  • 输出模式:推挽输出、开漏输出、推挽复用输出和开漏复用输出。
  • 按键检测时,一般将GPIO设置为输入模式

2、按键消抖

        按下按键和松开按键的瞬间都是存在机械抖动的。这种抖动可分为前抖动(按下瞬间带来的抖动),后抖动(松开瞬间带来的抖动),如下图所示。无论是前抖动还是后抖动,持续时间大约是5~10ms。

单片机检测按键时会出现误以为按键多次按下的情况:
        当按下一次按键,可能在A点检测到一次低电平,在B点检测到一次高电平,在C点又检测到一次低电平。同时抖动是随机,不可测的。那么按下一次按键,抖动可能会误以为按下多次按键。

       因此我们可以通过软件延时来进行消抖。

二、原理图设计

说明:1、开发板上有三个按键,每个按键都设计得有上拉电阻,当按键按下时,对应单片机检测管脚电平为低电平,当没有按键按下,对应的管脚默认为高电平。

三、STM32CubeMX 配置

1.按键GPIO模式设置

配置:1、3个按键设置为输入模式GPIO_Input ,并分别取名为LED1,LED2,LED3,LED4;2、4个LED设置为输出模式Output Push  Pull  .并分别取名为S1,S2,S3 .

四、程序设计

1、在 while(1)中编写代码

		if (HAL_GPIO_ReadPin(GPIOB, S1_Pin) == 0)//按键K1按下{HAL_Delay(20);//延时消抖if (HAL_GPIO_ReadPin(GPIOB, S1_Pin) == 0){HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET);//LED1点亮}}if (HAL_GPIO_ReadPin(GPIOB, S2_Pin) == 0)//按键K2按下{HAL_Delay(20);//延时消抖if (HAL_GPIO_ReadPin(GPIOB, S2_Pin) == 0){HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_SET);//LED1熄灭}}		if (HAL_GPIO_ReadPin(GPIOB, S3_Pin) == 0)//按键K3按下{HAL_Delay(20);//延时消抖if (HAL_GPIO_ReadPin(GPIOB, S3_Pin) == 0){HAL_GPIO_TogglePin(GPIOB, LED2_Pin);//LED2状态取反}}

五、实验现象

六、仿真实现


总结


http://www.ppmy.cn/server/12319.html

相关文章

开通一个幻兽帕鲁专用服务器多少钱?阿里云挺便宜

阿里云开通一个幻兽帕鲁专用服务器多少钱?26元1个月。目前阿里云幻兽帕鲁专用服务器4核16G配置26.52元1个月、149元半年,8核32G服务器90.60元一个月、271.80元3个月,幻兽帕鲁服务器活动页面 aliyunfuwuqi.com/go/palworld 阿里云服务器网整理…

恶补《操作系统》2_1——王道学习笔记

2操作系统-进程 2.1_1 进程的定义、组成、组织方式、特征 组成:PCB(进程存在唯一的标志),程序段,数据段 组织方式:链接方式,指针指向不同的队列;索引方式,索引表 特征…

Adobe Photoshop CC 2017无法打开解决方案

Adobe Photoshop CC 2017双击无反应,右键以管理员身份运行也没有反应 解决方案: 事件查看器中查看应用程序的事件 如果找到程序报错事件,网上下载ZXPSignLib-minimal.dll文件替换错误模块路径位置的该文件即可 ZXPSignLib-minimal.dll下载地…

FPGA秋招-笔记整理(1)

一、关键路径 关键路径通常是指同步逻辑电路中,组合逻辑时延最大的路径(这里我认为还需要加上布线的延迟),也就是说关键路径是对设计性能起决定性影响的时序路径。也就是静态时序报告中WNS(Worst Nagative Slack&…

大小端解释以及如何使用程序判断IDE的存储模式

今天让我们来了解一下大小端的概念吧 什么是大小端? 大端(存储)模式:指的是数据的低位保存在内存的高地址处,而数据的高位则保存在内存的低地址处。 小端(存储)模式:指的是数据的低位…

Python Selenium无法打开Chrome浏览器处理自定义浏览器路径

问题 在使用Python Selenium控制Chrome浏览器操作的过程中,由于安装的Chrome浏览器的版本找不到对应版本的驱动chromedriver.exe文件,下载了小几个版本号的驱动软件。发现运行下面的代码是无法正常使用的: from selenium import webdriver …

阿里云域名动态解析

前景说明: 你有一个阿里云的域名,想让它解析到你家用宽带动态ip上。 解决思路: 1、定时查看宽带的ip; 2、发现变化时,通过阿里云提供的sdk修改域名解析。 一、阿里云控制台创建AccessKey 官方文档:创…

P1039 [NOIP2003 提高组] 侦探推理

注意换行符!!! 如果你使用getchar()系列函数读入,并且用换行符判定是否结束,则换行符会导致你WA掉! linux下换行符为’\n’,windows下换行符为’\r\n’,如果数据是windows下造的&a…