STM32F103入门 | 10.按键实验(上)

之前的点亮小灯实验用到了GPIO的输出模式,但是对于输入模式没有用到,这次小R给小伙伴们介绍GPIO的其中一种输入模式——上拉输入。按键出现在很多的应用场景,按键处理更是一门学问。因此,小R给小伙伴们介绍GPIO的上拉输入模式并简单应用于按键实验中,通过判断按键的状态来控制LED灯的亮灭情况。

首先,需要了解的是:当IO做输入使用时,通过调用函数GPIO_ReadInputDataBit()来读取IO口的电平状态。其次,按键是需要消抖滴。最后,既然是按键实验,就会有按键电路。按键电路如下:

电路很简单,将按键接在I/O和GND两端,

I/O配置时设置成内部的上拉输入,

这样按下按键接通GND,输入低电平;

也可以将按键接在I/O和VCC两端,

I/O配置时设置成内部的下拉输入,

按下按键I/O接通VCC,输入高电平。

#设计时一般接GND#

设计思路:采用轮询方式扫描I/O口电平状态,若按键被按下,I/O口为低电平,则LED亮,否则LED不亮。

 

1. 新建两个文件,key.c 和 key.h

 

2. 在头文件 key.h 添加下面代码:

 

3. 把 key.c 添加到工程中

4. 在 key.c 中添加以下代码:

#include "key.h"

void key_init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;                    //定义GPIO结构体
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //使能GPIOA时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;              //配置引脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;           //上拉输入
    GPIO_Init(GPIOA,&GPIO_InitStructure);                   //初始化GPIO
}

 

5. 实现按键轮询控制LED灯亮灭

 

库函数相关代码:

 /**
   * @brief  Reads the specified input port pin.
   * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
   * @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;
}

手机可以左右滑查看代码

stm32f10x_gpio.c中可以找到上述代码,实际上就是读取GPIOx_IDR寄存器。

 

欢迎关注微信公众号『OpenSSR』

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值