文章目录

  • 按键检测
  • 什么是按键检测
  • 按键硬件电路
  • 编程步骤
  • 1. 使能GPIO端口时钟
  • 2. 初始化 GPIO 目标引脚为输入模式;
  • 3. 检测GPIO引脚的输入,并判断按键状态
  • 3.1 GPIO电平检测函数
  • 3.1.1 GPIO_ReadInputDataBit函数
  • 3.1.2 GPIO_ReadInputData函数
  • 4. 显示按键状态

按键检测

学习按键检测的应用,可以让我们学会检测输入。
注:输入是相对于芯片而言,即是由外设向芯片输入信号。

什么是按键检测

此处按键检测是:检测按键的状态,按下 / 松开 。

按键硬件电路

、、由下图可知,这些按键在没有被按下的时候,GPIO 引脚的输入状态为低电平 (按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为高电平 (按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。

该按键电路在按键两端并联了一个电容,并串联了一个电阻接地,以达到消抖(滤波)的作用。若硬件电路未消抖,则需要进行软件消抖,即延时后再判断按键状态。

软件消抖参考链接:软件消抖

那为什么要消抖呢?
如下图,按下按键会产生短暂的抖动信号。若不进行消抖则较难以判断按键的状态。

编程步骤

  1. 使能 GPIO 端口时钟
  2. 初始化 GPIO 目标引脚为输入模式;
  3. 检测GPIO引脚的输入,并判断按键状态;
  4. 显示按键状态,如点灯。

1. 使能GPIO端口时钟

参考:时钟设置

2. 初始化 GPIO 目标引脚为输入模式;

参考:初始化GPIO

注:需修改输出模式为输入模式,同时结构体中的速度无需赋值,

输入模式参考:STM32的四种输入模式

注:按键检测需设置为浮空输入。

3. 检测GPIO引脚的输入,并判断按键状态

举按键K1为例:
由前文可知,当PA0端口检测为高电平时,则K1按下;低电平则松开。

3.1 GPIO电平检测函数

3.1.1 GPIO_ReadInputDataBit函数

3.1.2 GPIO_ReadInputData函数

上述两个函数参考:电平检测函数

4. 显示按键状态

参考点灯程序:点灯

注:需要初始化两个GPIO,即LED接口和KEY接口。

固件库应用之按键检测相关推荐

  1. STM32F411核心板固件库开发(三) 按键检测

    对于自己手上的这款核心板,考虑到还有一个外部外设没有使用,为了比较充分地用好板上的资源,在这里使用一个按键检测. (一)按键外设 1.核心板 2.核心板原理图 按键上端和PA0引脚相连,按键下端接地. ...

  2. srm32f4按键蜂鸣器_stm32 用中断实现按键点灯和蜂鸣器鸣叫(固件库版)

    引言 这是这篇博文的升级版本 https://blog.csdn.net/qq_44885018/article/details/103050388 上面轮询的方法,今天主要讲中断的方法.为了方便不要 ...

  3. linux 按键检测 防抖,GPIO输入——按键检测

    当按下一个按键时,系统是如何检测到的呢? 我们通过LED灯的亮灭状态来间接完成按键检测.当按下按键时,LED灯亮,再次按下时,LED灯灭. 要完成这个实验,我们就会用到GPIO外设的基本输入功能. 查 ...

  4. STN32单片机学习笔记(五)-按键检测

    写在前面:本系列内容均为自学笔记,参考资料为野火指南者开发板资料及芯片参考手册等,使用野火指南者开发板进行学习,该系列内容仅用于记录笔记,不做其他用途,笔记的内容可能会存在不准确或者错误等,如有大佬看 ...

  5. STM32F103 GPIO之按键检测

    1.直接上代码 #include "stm32f10x.h" #include "led.h" #include "key.h"void K ...

  6. STM32——GPIO输入——按键检测

    硬件介绍 当按键置空时,IO接地 按键按下之后,IO口接通3.3V高电压,电流比较大,为了避免损坏IO,这里需要加装一个限流电阻.可以看到IO口是默认低电平,按键按下后产生一个上升沿,和平常的电路设计 ...

  7. stm32实现GPIO输入按键检测

    1.硬件设计 按键机械触点断开.闭合时,由于按键触点的弹性作用,按键开关不会马上稳定接通或一下就断开,使用按键时就会产生下图中的带纹波信号,需要软件消抖处理滤波 由于用软件消抖处理滤波不方便输入检测, ...

  8. 串口初始化结构体和固件库讲解

    串口初始化结构体和固件库讲解 常用的6个函数,结构体: USART 初始化结构体(USART_InitTypeDef) USART 时钟初始化结构体(USART_ClockInitTypeDef) 串 ...

  9. stm32固件库assert_param()

     在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用.如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个 ...

最新文章

  1. 软件工程 - 团队博客第二阶段成绩
  2. springboot启动自动关闭_App自动化测试用例格式和App的启动与关闭
  3. 0x00000000指令引用的内存不能为written_变量和内存访问
  4. [转]STL(容器)与DEBUGNEW运算符冲突的解决
  5. Uncaught ReferenceError: jie is not defined
  6. 解决在DHCP环境下私自指定IP和私自搭建DHCP服务器的方法
  7. PHP连数据库生成数据字典
  8. ShellShock 攻击实验
  9. Spring框架的本质:4那些高曝光率的Annotation
  10. Win10设置定时关机命令简单介绍
  11. 30套后台管理界面分享
  12. origin双y轴数据散点图显示
  13. Simulink选择器模块(Selector)
  14. Android Home键按键事件监听
  15. 计算机集群 -- Linux 集群技术概述
  16. fast无线网卡linux驱动,fast无线网卡驱动,详细教您fast无线网卡驱动
  17. php正负数都转成正数,PHP将数组中负数全部变为正数的方法
  18. 四边形围栅栏c语言长度,不同结构围油栏拦油特性数值的研究.pdf
  19. python正则表达式——区间的表达方式
  20. 【PTA】2022年蓝桥杯及天梯赛赛前训练(C++练习)

热门文章

  1. fullcalendar日历插件的使用并动态增删改查(转载)
  2. 网络电台(WIZ550io)
  3. 华为“天才少年”有多牛?入职不到一年,算法就用于千万台华为手机
  4. 一日多餐的增肌、增重饮食计划
  5. 银行前端面试高频基础问题——var、let和const到底有哪些区别?讲不清楚当场发感谢信!?
  6. 屏蔽计算机电缆套什么定额,DJYPVRP计算机电缆套什么定额
  7. php项目简介,一、项目简介 · ThinkPHP5项目开发“填坑”实录 · 看云
  8. linux wc -l命令
  9. DVBBS7.0变量列表
  10. 计算机的应用形态有哪些,经典的四种使用形态 内置应用有所升级