CH573-02-GPIO-按键——RISC-V内核BLE MCU快速开发教程

在这里插入图片描述

1. GPIO输入相关API

  1) 引脚配置为输入模式

void GPIO{
    
    x}_ModeCfg(uint32_t pin, GPIOModeTypeDef mode);

  GPIO{x}_ModeCfg 函数用于完成GPIO{x}端口引脚模式配置,其中:
  {x}为端口选择,如A\B\C等;
  pin:引脚编号,如GPIO_Pin_0、GPIO_Pin_1等
  mode:引脚模式,包括
    GPIO_ModeIN_Floating浮空输入、
    GPIO_ModeIN_PU上拉输入、
    GPIO_ModeIN_PD下拉输入、
    GPIO_ModeOut_PP_5mA推挽输出最大5ma、
    GPIO_ModeOut_PP_20mA推挽输出最大20ma

示例:

GPIOA_ModeCfg(GPIO_Pin_22, GPIO_ModeIN_PU);// GPIO_Pin_22上拉输入

  2) 读取引脚电平状态

GPIO{
    
    x}_ReadPortPin(pin) ;

读取引脚电平状态,0-引脚低电平,(!0)-引脚高电平
示例:

u_char key1_v=GPIOA_ReadPortPin(KEY1_PIN);

2. 创建工程

  1) 拷贝led工程

    将上一讲的LED工程复制粘贴
在这里插入图片描述

  2) 设置名称

        粘贴后重命名为“CH573_02_key”


  3) 编译检查无错误无警告


3. 按键工程

  1) 新建key.h

      在上一讲创建的个人驱动文件夹“MyDriver”中右键“NEW/Header File”,并命名为“key.h”
在这里插入图片描述

  2) 新建key.c

      在上一讲创建的个人驱动文件夹“MyDriver”中右键“NEW/Scource File”,并命名为“key.c”
在这里插入图片描述

  3) 补充代码

    a) key.h

    /*
 * key.h
 *
 *  Created on: Mar 7, 2023
 *      Author: WeChat official accounts "IOT趣制作"
 *  -------------------------------------------
 *      ch573   按键
 *      PB22    KEY1
 *      PB23    KEY2
 *  -------------------------------------------
 */

#ifndef MYDRIVER_KEY_H_
#define MYDRIVER_KEY_H_

//头文件包含区

/***************************************************/
//宏定义区
#define KEY1_PIN     GPIO_Pin_22
#define KEY2_PIN     GPIO_Pin_23
//端口修改请在KEY_init()实体区进行调整
#define KEY_NOPressed   0
#define KEY1_Pressed    1
#define KEY2_Pressed    2
/***************************************************/
//变量声明区

/***************************************************/
//函数声明区
void KEY_init(void);
u_char KEY_SCANN(void);

/***************************************************/

#endif /* MYDRIVER_KEY_H_ */

    b) key.c

/*
 * led.c
 *
 *  Created on: Mar 7, 2023
 *      Author: WeChat official accounts "IOT趣制作"
 */
//头文件包含区
#include "CH57x_common.h"
#include "key.h"
/***************************************************/
//宏定义区

/***************************************************/
//变量声明区

/***************************************************/
//函数声明区

/***************************************************/
//函数实体区
/*
 * 函数名:KEY_init
 * 参数:无
 * 返回值:无
 * 功能说明:按键初始化
 */
void KEY_init(void)
{
    
    
    GPIOB_ModeCfg(KEY1_PIN, GPIO_ModeIN_PU);//KEY1_PIN上拉输入
    GPIOB_ModeCfg(KEY2_PIN, GPIO_ModeIN_PU);//KEY2_PIN上拉输入
}
/*
 * 函数名:KEY_SCANN
 * 参数:无
 * 返回值:KEY1_Pressed/KEY2_Pressed/KEY_NOPressed
 * 功能说明:按键扫描
 */
u_char KEY_SCANN(void)
{
    
    
    if(GPIOA_ReadPortPin(KEY1_PIN)==0)
    {
    
    
        DelayMs(10);
        if(GPIOA_ReadPortPin(KEY1_PIN)==0)
            return KEY1_Pressed;
    }
    else if(GPIOA_ReadPortPin(KEY2_PIN)==0)
    {
    
    
        DelayMs(10);
        if(GPIOA_ReadPortPin(KEY2_PIN)==0)
            return KEY2_Pressed;
    }
    return KEY_NOPressed;
}
/***************************************************/

    c) main.c

/********************************** (C) COPYRIGHT *******************************
 * File Name          : Main.c
 * Author             : FUNIOT.XYZ
 * Version            : V1.0
 * Date               : 2023/05/06
 * Description        : 实验02-按键控制LED
 * Copyright          : WeChat official accounts "IOT趣制作"
 * SPDX-License-Identifier: Apache-2.0
 *******************************************************************************/

#include "CH57x_common.h"
#include "led.h"
#include "key.h"
/*********************************************************************
 * @fn      main
 *
 * @brief   主函数
 *
 * @return  none
 */
int main()
{
    
    
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    LED_init();//LED初始化
    KEY_init();//按键初始化
    while(1)
    {
    
    
        if(KEY_SCANN()==KEY1_Pressed)
        {
    
    
            LED_turnon();
        }
        else if(KEY_SCANN()==KEY2_Pressed)
        {
    
    
            LED_turnoff();
        }
        DelayMs(50);
    }
}

4. 编译烧录运行

  1) 编译烧录

在这里插入图片描述

  2) 运行

    这里我们使用一个杜邦线连接按键引脚与GND引脚,来回插拔模拟按键,运行结果:按键KEY1按下LED点亮,按键KEY2按下LED熄灭。

    如果串按键控制LED正常,即达到本实验的目的,如果异常(按键消抖的问题属正常现象),请检查源代码,如有疑问,可关注公众号 “IOT趣制作”,将您遇到的问题描述出来,平台收到您的留言后会第一时间进行解决。

猜你喜欢

转载自blog.csdn.net/weixin_43351158/article/details/131140501