zoukankan      html  css  js  c++  java
  • STM32 GPIO输入 按键 初学笔记

    • 按键的硬件电路

    默认是高电平,按键按下是低电平,所以是下降沿输入。

    电容是硬件消抖,按下时产生抖动电流流向电容,电流稳定后电容释放电给GND,产生低电平。

    浮空就是 浮在空中.也就是没有什么把他拉下来,也没有什么把它拉上去. 浮空最大的特点就是电压的不确定性,它可能是0V,也可能是VCC,还可能是介于两者之间的某个值(最有可能). 浮空一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响。

    • 读取GPIO输入库函数

    • GPIO_ReadInputDataBit:读取某位输入

    GPIOx(A...E)的IDR寄存器与上对应引脚(例如GPIO_Pin_5就是100000,对应寄存器第5位,与操作后第5位保留,其他位为0)

    • GPIO_ReadInputData:读取全部16个位的输入

    • 代码

    /*********************************************************************************************************
    * 函数名称: ConfigKeyOneGpio
    * 函数功能: 配置KEYONE的GPIO 
    * 输入参数: void 
    * 输出参数: void
    * 返 回 值: void
    * 创建日期: 2020年04月11日
    * 注    意:
    *********************************************************************************************************/
    static  void  ConfigKeyGpio(void)
    {
        GPIO_InitTypeDef GPIO_InitStruct;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能时钟
        
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    
        GPIO_Init(GPIOB,&GPIO_InitStruct);  //PB3 LED1
    }
    
    /*********************************************************************************************************
    *                                              API函数实现
    *********************************************************************************************************/
    /*********************************************************************************************************
    * 函数名称: InitKeyOne
    * 函数功能: 初始化KeyOne
    * 输入参数: void
    * 输出参数: void
    * 返 回 值: void
    * 创建日期: 2020年04月11日
    * 注    意:
    *********************************************************************************************************/
    void InitKeyOne(void)
    {
        ConfigKeyGpio();
    }
    
    /*********************************************************************************************************
    * 函数名称: ScanKeyOne
    * 函数功能: 按键扫描
    * 输入参数: 
    * 输出参数: void
    * 返 回 值: void
    * 创建日期: 2020年04月11日
    * 注    意:
    *********************************************************************************************************/
    uint8_t ScanKeyOne(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
    {
        if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_DOWN)
        {
            while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_DOWN);
            return KEY_DOWN;
        }
        else
        {
            return KEY_UP;
        }
    }
  • 相关阅读:
    为系统添加语言包
    除掉任务栏上的隐藏小按钮
    叠加多个无线网络
    在win7中通过手机投放媒体
    开关WI-Fi显示列表
    hibernate(二)对象的三种状态、一级缓存、多对一、inverse、cascade
    hibernate(一)helloworld、api、事务、配置文件、映射文件
    SQL Server2019安装
    Windows server2012搭建FTP服务器
    Gradle的使用教程
  • 原文地址:https://www.cnblogs.com/XIEjm/p/13255397.html
Copyright © 2011-2022 走看看