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

实现目标

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.hqwc.cn/news/643477.html

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

相关文章

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具:uniapp开发小程序 1.3原型图 功能:.点击体验官带看跳转小程序的体验官带看页面 功能:点击立即咨询唤起小程序弹窗打电话 2.…

生成式AI原理技术详解(一)——神经网络与深度学习

本文主要介绍了生成式AI的最新发展,提到了GPT-5和AI软件工程师在行业中的影响,指出AI技术进步对国家竞争和个人职业发展的潜在影响。 未来已来 最近有两则新闻: sam altman自曝GPT-5细节,公开宣称GPT-5提升将非常大,任…

Shadowsocks PAC模式自定义规则

Shadowsocks PAC模式自定义规则 关键词:Shadowsocks, PAC自动模式, 编辑PAC用户自定规则, PAC规则 Shadowsocks使用PAC自动模式时,访问一个网站要不要走代理,需要用户手动进行干预。 编辑PAC规则 点击菜单栏shadowsocks图标,在…

如何在 Flutter 中制作多种颜色的 TextField

TextField widget 本身并不施加任何样式。相反,它会要求 TextEditingController 生成一个样式化的 TextSpan 对象,即一段带有样式的文本。 TextField 将其样式传递给 TextEditingController ,默认实现只是将其放入 TextSpan 对象中&#xff0…

Linux c++ onvif客户端开发(8):GetServices

本文是Linux c onvif客户端开发系列文章之一: Linux c onvif客户端开发(1): 根据wsdl生成cpp源文件Linux c onvif客户端开发(2): 获取摄像头H264/H265 RTSP地址Linux c onvif客户端开发(3): 扫描设备Linux c onvif客户端开发(4): 扫描某个设备是否支持onvifLinux c…

解决VSCode中“#include错误,请更新includePath“问题

目录 1、问题原因 2、解决办法 1、问题原因 在编写C程序时,想引用头文件但是出现如下提示: (1)首先检查要引用的头文件是否存在,位于哪里。 (2)如果头文件存在,在编译时提醒VSCo…

路由引入,路由过滤,路由策略实验

1,配置IP地址 R1: [R1]dis ip interface brief Interface IP Address/Mask Physical Protocol GigabitEthernet0/0/0 100.1.1.1/24 up up LoopBack0 …

自动化爬虫工具:you-get安装与使用

Windows下的安装命令: pip install you-get linux下的安装命令: pip3 install you-get 下载完成后,我们可以看到如下的警告,意思就是这个工具并未被添加到环境变量中,如果我们想在命令行中直接调用,需要…

WebSocket的原理、作用、常见注解和生命周期的简单介绍,附带SpringBoot示例

文章目录 WebSocket是什么WebSocket的原理WebSocket的作用全双工和半双工客户端【浏览器】API服务端 【Java】APIWebSocket的生命周期WebSocket的常见注解SpringBoot简单代码示例 WebSocket是什么 WebSocket是一种 通信协议 ,它在 客户端和服务器之间建立了一个双向…

ESLint 、 e2e test 学习

Lint和Format的区别: Lint只会告诉你代码中的错误或者不符合规范的地方,而Format是用来对格式作调整的 HTML/tpl:HTMLLint CSS/SCSS:Stylelint JS/JSX:Eslint JSLint:古老,不能配置和扩展JSHin…

Opencv_11_通道的分离与合并

void ColorInvert::channels_demo(Mat& image) { std::vector<Mat> mv; split(image, mv); imshow("蓝色", mv[0]); imshow("绿色", mv[1]); imshow("红色", mv[2]); Mat dst; mv[0] 0; merge(mv, dst);…

《ElementPlus 与 ElementUI 差异集合》el-select 显示下拉列表在 Cesium 场景中无法监听关闭

前言 仅在 Element UI 时有此问题&#xff0c;Element Plus 由于内部结构差异较大&#xff0c;不存在此问题。详见《el-select 差异点&#xff0c;如&#xff1a;高、宽、body插入等》&#xff1b; 问题 点击空白处&#xff0c;下拉列表可监听并关闭&#xff1b;但在 Cesium…