历史上的今天
返回首页

历史上的今天

今天是:2024年12月07日(星期六)

2020年12月07日 | STM32——按键

2020-12-07 来源:elecfans

一、GPIO工作模式

1、当I/O端口配置为输入时:

输出缓冲器被禁止


施密特触发输入被激活

根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接

出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器

对输入数据寄存器的读访问可得到I/O状态


2、当I/O端口被配置为输出时:

输出缓冲器被激活

  ─ 开漏模式:输出寄存器上的’0’激活 N-MOS,而输出寄存器上的’1’将端口置于高阻状态(P-MOS 从不被激活)。

  ─ 推挽模式:输出寄存器上的’0’激活 N-MOS,而输出寄存器上的’1’将激活 P-MOS。


施密特触发输入被激活

弱上拉和下拉电阻被禁止

出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器

在开漏模式时,对输入数据寄存器的读访问可得到I/O状态

在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。


二、库函数GPIO_ReadInputDataBit


typedef enum

{

  Bit_RESET = 0,

  Bit_SET

} BitAction;

 

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; // 按键没被按下返回1

  }

  else

  {

    bitstatus = (uint8_t)Bit_RESET; // 按键按下返回0

  }

  return bitstatus;

}


三、按键【消抖】


#ifndef _KEY_H_

#define _KEY_H_

 

#include "stm32f10x.h"

/*******

*按键按下标置

KEY_ON 0

KEY_OFF 1

********/

#define KEY_ON  0

#define KEY_OFF 1

 

void KeyGPIOConfig(void);

uint8_t KeyScan(GPIO_TypeDef *GPIOx, u16 GPIO_Pin);

 

#endif /* _KEY_H_ */

#include "key.h"

 

void Delay(__IO u32 count)

{

  while(count--);

}

 

void KeyGPIOConfig(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

 

  /*开启按键端口(PE5)的时钟*/

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

 

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; // GPIO输入模式时,不用配置速率

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

 

  GPIO_Init(GPIOE, &GPIO_InitStructure);

}

 

 

uint8_t KeyScan(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)

{

  /*检测是否有按键按下 */

  if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON )

  {

    /*延时消抖*/

    Delay(10000);

    if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON )

    {

      /*等待按键释放 */

      while(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON);

      return  KEY_ON;

    }

    else

    {

      return KEY_OFF;

    }

  }

  else

  {

    return KEY_OFF;

  }

}


1、利用 GPIO_ReadInputDataBit() 读取输入数据,若从相应引脚读取得的数据等于 0 (KEY_ON),低电平,表明可能有按键按下,调用延时函数。否则返回 KEY_OFF,表示按键没有被按下。


2、 延时之后再次利用 GPIO_ReadInputDataBit() 读取输入数据,若依然为低电平,表明确实有按键被按下了。否则返回 KEY_OFF,表示按键没有被按下。


3、 循环调用 GPIO_ReadInputDataBit()一直检测按键的电平,直至按键被释放,被释放后,返回表示按键被按下的标志 KEY_ON。

推荐阅读

史海拾趣

Digital View公司的发展小趣事

随着数字化技术的不断进步和应用领域的不断扩大,Digital View公司也加快了数字化转型和升级的步伐。公司加大了对云计算、大数据、人工智能等前沿技术的研发和应用力度,推出了一系列智能化、数字化的产品和服务。这些产品和服务不仅提高了客户的运营效率和管理水平,还为公司带来了新的增长点。

Hsuan Mao Technology Co公司的发展小趣事

为了进一步提升品牌影响力和市场竞争力,Digital View公司开始实施国际化战略。公司积极参加国际展览和论坛,与全球同行建立合作关系,引进先进技术和管理经验。同时,公司还在海外设立研发中心和生产基地,以便更好地服务全球客户。通过国际化战略的实施,Digital View的品牌知名度和市场份额均得到了显著提升。

General Magnetics Inc公司的发展小趣事
长时间高负荷运行、散热不良或内部元件短路等都可能引起过热。
Greenwich Instruments Ltd公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,Greenconn Corp积极推动智能制造转型。公司引进先进的生产设备和技术,优化生产流程和管理模式,提高生产效率和产品质量。同时,公司还加强与高校、科研机构的合作,共同研发智能制造关键技术,推动智能制造技术在连接器生产领域的应用。这些努力不仅提升了Greenconn Corp的竞争力,还为公司的可持续发展奠定了坚实基础。

Electronic Concepts Inc公司的发展小趣事

随着市场的竞争加剧,ECI意识到只有不断创新才能在行业中立足。在总经理张女士的领导下,公司投入大量资源进行研发,成功推出了一系列具有竞争力的新产品。其中,一款集成了先进算法的智能传感器,因其高精度和低功耗特性,在市场上大受欢迎。这一创新不仅提升了ECI的品牌形象,也为公司带来了丰厚的利润。

岑科(CENKER)公司的发展小趣事

岑科公司成立于2001年,初期主要从事电子元器件的贸易业务。在创始人蔡旌章的带领下,岑科以优质的服务和灵活的运营策略,在国内外市场上赢得了良好的口碑。这一时期,岑科的服务对象主要是海内外的电子元器件需求商,通过精准把握市场需求和优质的产品供应,逐渐在电子元器件贸易领域站稳了脚跟。随着业务的不断拓展,岑科开始思考如何进一步提升自身的竞争力,以实现更长远的发展。

问答坊 | AI 解惑

倒计时程序有问题

《无线电》2004年第9期(带光盘)有一个99分钟89C2051倒计时程序,2个数码管显示,我按其作了一个,并将其光盘上的程序拷入,实际运行结果出现这样一个问题:     就是十位和个位到0后并没有停止(停止时显示‘--’2个负号),而是继续显示‘ ...…

查看全部问答>

ARM与嵌入式linux入门的建议

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 ARM与嵌入式linux入门的建议  …

查看全部问答>

射频电路板设计技巧

成功的RF设计必须仔细注意整个设计过程中每个步骤及每个细节,这意味着必须在设计开始阶段就要进行彻底的、仔细的规划,并对每个设计步骤的进展进行全面持续的评估。而这种细致的设计技巧正是国内大多数电子企业文化所欠缺的。     近几 ...…

查看全部问答>

如何控制LED静电死灯?

replyreload += \',\' + 380148;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

供S5PC100开发板 ARMcortex A8 core

供S5PC100开发板 ARMcortex A8 core iPhone 3GS 采用Samsung S5PC100主控拥有720p高清视频engineering, 在iPhone中Apple特意降低了处理器运行频率为600MHz,以减少功耗。 显然S5PC100的拥有很强大的处理功能,包括3D engineering S5PC100集多 ...…

查看全部问答>

嵌入式软件开发工程师

汉王科技股份有限公司 嵌入式软件开发工程师-OCR软件部 电子邮箱:          yinsg@hanwang.com.cn 发布日期:         2007-03-21         工作地 ...…

查看全部问答>

iar442不能设置断点是怎么回事啊?

                                 rt…

查看全部问答>

有什么好办法解决STM32RTC不起振么

                                 最近焊了一批板子,那个RTC的晶振死活不起振,十个里面只有一个能起来,其他的怎么弄都起不来。原来在别的板子上好 ...…

查看全部问答>

PR788应用于LED路灯设计

简介:德州仪器电源管理产品经理Pietro Scalia为您简述一款LED路灯板。通过分析PR788参考设计电路图使你更清楚的了解到这个设计是如何实现更节能的目的的   $(\'swf_cT7\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'4 ...…

查看全部问答>

三极管电路分析

请大虾们帮忙分析下,怎么理解?…

查看全部问答>