GPIO 输入—按键检测

这里要用到一定的模电知识。电容两端电压不能突变,电感两端电流不能突变。这里利用了电容的放电延时实现硬件消抖。按键按下会有抖动,波形有毛刺,使得高低电平显现不明显,而按键按下时,电容放电一下,马上又被充电,此时电容两端的电压不会突然变化,这个延时时间恰好可以达到消抖作用。

这里需要使用一个固件库函数:

/**
  * @brief  Reads the specified input port pin.
  * @param  GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F405xx/407xx and STM32F415xx/417xx devices
  *                      x can be (A..I) to select the GPIO peripheral for STM32F42xxx/43xxx devices.
  *                      x can be (A, B, C, D and H) to select the GPIO peripheral for STM32F401xx devices.
  * @param  GPIO_Pin: specifies the port bit to read.
  *         This parameter can be GPIO_Pin_x where x can be (0..15).
  * @retval The input port pin value.
  */
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint8_t bitstatus = 0x00;

  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));

  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }
  else
  {
    bitstatus = (uint8_t)Bit_RESET;
  }
  return bitstatus;
}

在第一次使用这个函数的时候,我没有理解到位,一看到定义bitstatus=0x00,就以为返回的是个八位端口的值,其实这个返回值只有0或者1两种结果。

/**
* @brief GPIO Bit SET and Bit RESET enumeration
*/
typedef enum
{
Bit_RESET = 0,
Bit_SET
}BitAction;

在这个枚举中,可以知道,读取IO的数据只可能是0或者1。

时间: 2024-07-28 12:41:15

GPIO 输入—按键检测的相关文章

第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列

第12章 ????GPIO输入-按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ? 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘述GPIO外设的概念,如您忘记了,可重读前面"GPIO框图剖析"小

第12章 GPIO输入—按键检测

第12章     GPIO输入-按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘述GPIO外设的概念,如您忘记了,可重读前面"GPIO框图剖析"小节,

GPIO输入——按键检测

当按下一个按键时,系统是如何检测到的呢? 我们通过LED灯的亮灭状态来间接完成按键检测.当按下按键时,LED灯亮,再次按下时,LED灯灭. 要完成这个实验,我们就会用到GPIO外设的基本输入功能. 查阅开发板的按键原理图,如图3-1. 图3-1 图中的K1.K2即为按键.以K1为例,当未按下按键时,其PA0引脚处于接地状态,即低电平,按下按键时,引脚接到电源,输入状态为高电平.所以只要我们检测按键对应引脚(这里是PA0)的输入电平状态,即可判断按键是否被按下.这便是按键的检测原理了. 有一点需要

第13章 GPIO输入—按键检测

本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘述GPIO外设的概念,如您忘记了,可重读前面"GPIO框图剖析"小节,STM32 HAL库中GPIO初始化结构体GPIO_TypeDef的定义与"定义引脚模式的枚举类型"小节中讲解的相同. 13.1  硬件设计 按键机械触点断开.闭合时,由于触点的弹性作用,按键开关不会

nRF51822外设应用[2]:GPIOTE的应用-按键检测

版权声明:本文为博主原创文章,转载请注明作者和出处.    作者:强光手电[艾克姆科技-无线事业部] 1. nRF51822寄存器类型 nRF51822的寄存器和一般的单片机有所差别,nRF51822的寄存器分为下面的三种类型. Task :任务寄存器,可以由程序或事件触发. Event:事件寄存器,事件可以产生中断或触发任务. Register:普通寄存器,和一般单片机的寄存器一样. Task和event使得操作片上外设十分方便简洁,只需进行少量的配置,即可轻松运用各种外设.同时,Task和e

ESP8266 LUA脚本语言开发: 外设篇-GPIO输入检测

咱使用 GPIO0 https://nodemcu.readthedocs.io/en/master/modules/gpio/#gpioread 第一种 GPIO设置为输出的状态下读取引脚状态 gpio.mode(3, gpio.OUTPUT) gpio.write(3, gpio.HIGH) if gpio.read(3) == 1 then print("GPIO0 is HIGH") end 可以检测继电器输出的状态,自行扩展! 第二种 GPIO设置为输入的状态下.检测GPIO

【iCore3 双核心板_FPGA】例程三:GPIO输入实验——识别按键输入

实验指导书及代码包下载: http://pan.baidu.com/s/1dEaDr37 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229438677

beaglebone_black_学习笔记——(8)GPIO输入之KEY

今天笔者在LED灯的基础上写了一个GPIO作为输入端口的例子.实验中笔者采用一个按键作为IO输入设备,然后用bb_black去采集当前的信息. 第一步:硬件介绍 1.按键介绍 轻触按键的结构如下图所示,按键的1,2脚,3,4脚是分别连在一起的,当按下按键是也就是将1,3(或者2,4)引脚短接,松开时两脚间开路. 2.硬件原理 注: (1)为了防止误操作时,3.3V将IO口烧掉笔者在按键与3.3V之间连接了一个限流电阻(10k): (2)本实验笔者使用了P8排座的14引脚,也就是GPIO_26引脚

单片机第6课:独立按键检测原理

将JP5的8号引脚连接到单片机的P1^0,然后P1^0和发光二极管的接正引脚相连接(加高电平,发光二极管就会亮,由于单片机上电的时候各IO口默认为高电平,所以导线接好之后,发光二极管就点亮了).当我们按下K1的时候,发光二极管熄灭,松开按键,发光二极管再次点亮.因为当你按下按键的时候,TTL电路只有两种电平的时候,呈现"线与"的关系,再次检测P1^0引脚的电平,你会发现已经是低电平了.因为高电平与上低电平等于低电平.