美文网首页
[课程-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