美文网首页
[课程-013GPIO输入——按键检测]

[课程-013GPIO输入——按键检测]

作者: 我的梨花糕 | 来源:发表于2020-08-05 10:40 被阅读0次

一、按键检测原理

开发板上的按键1是接在了GPIOA->IDR寄存器上了,只要通过读取其寄存器状态即可。

二、 代码分析

  1. 首先构建bsp_key.hbsp_key.c两文件于/USER/KEY文件夹内;

  2. Keil MDK 工程里导入文件路径

  3. bsp_key.h文件主要写一些方便以后修改方便的、看起来简洁的宏定义,以及#incude一些必要的头文件、写在.c文件里的函数声明

    #ifndef __BSP_KEY_H__
    #define __BSP_KEY_H__
    
    #include "stm32f10x.h"
    
    #define         KEY_ON              1
    #define         KEY_OFF             0
    
    #define         KEY1_GPIO_PIN       GPIO_Pin_0              //对应的值
    #define         KEY1_GPIO_PORT      GPIOA                   //外设GPIOA
    #define         KEY1_GPIO_CLK       RCC_APB2Periph_GPIOA    //挂载时钟
    
    uint8_t Key_Scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);   //函数声明
    void KEY_GPIO_Config(void);
    
    #endif /* __BSP_KEY_H__ */
    
    
    
  1. bsp_key.c 位于/USER/KEY文件夹内。主要就是写一些关于初始化和功能的函数,供main主函数的使用。

    #include "bsp_key.h"
    
    void KEY_GPIO_Config(void)
    {
        GPIO_InitTypeDef GPIO_InitStruct;
        
        RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK,ENABLE);
        
        GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN;       
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空模式  
        
        GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStruct);
    
    }
    
    uint8_t Key_Scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
    {
        if(  GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )
        {
            while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);
            return KEY_ON;
        }
        else return KEY_OFF;
    }
    
    

附录1 C语言异或用法

  1. 符号:^

  2. 名称:异或,C语言的一个二进制运算符

  3. 功能表:相同为零;不同为一。

13.png
  1.  0⊕0=0,0⊕1=1
     1⊕0=1,1⊕1=0
    
  2.  #define LED_G_TOGGLE        {LED_G_GPIO_PORT->ODR ^= LED_G_GPIO_PIN;}
    

附录2 GPIO输出模式

相关文章

网友评论

      本文标题:[课程-013GPIO输入——按键检测]

      本文链接:https://www.haomeiwen.com/subject/baqsrktx.html