外设学习之读取GPIO电平

系列文章目录

第一篇 外设学习之点亮LED灯
第二篇 外设学习之驱动蜂鸣器
第三篇 外设学习之读取GPIO电平



前言

本案例主要目的是读取按键输入电平和LED输出电平,通过学习此实验可以通过判断一个外设的电平来去控制另一个外设,比如按键控制LED灯。除了读取电平以外,输入输出方向等属性也能通过同样的方式读取。


提示:以下是本篇文章正文内容,下面案例可供参考

一、电路原理

按键连接的IO为GPIO5,LED灯连接的IO为GPIO9

二、使用步骤

1.代码流程

// 初始化GPIO
GpioInit();
// 设置GPIO_9的复用功能为普通GPIO,设置GPIO_5的复用功能为普通GPIO
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
// 设置按键IO上拉,设置按键的上拉可以让按键的io电平保持稳定。
IoSetPull(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_PULL_UP);
// 设置GPIO_9为输出模式,设置GPIO_5为输入模式
GpioSetDir(WIFI_IOT_GPIO_IDX_9, WIFI_IOT_GPIO_DIR_OUT);
GpioSetDir(WIFI_IOT_GPIO_IDX_5, WIFI_IOT_GPIO_DIR_IN);
// 读取IO方向
WifiIotGpioDir val = {0};
GpioGetDir(WIFI_IOT_GPIO_IDX_9, &val);
printf(“GPIO_9 Dir is %d\r\n”, val);
// 读取按键输入电平GPIO5
WifiIotGpioValue InputVal = {0};
GpioGetInputVal(WIFI_IOT_GPIO_IDX_5, &InputVal);
printf(“GPIO_5 InputVal is %d\r\n”, InputVal);
// 读取LED的输出电平
WifiIotGpioValue OutputVal = {0};
GpioGetOutputVal(WIFI_IOT_GPIO_IDX_9, &OutputVal);
printf(“GPIO_9 OutputVal is %d\r\n”, OutputVal);
系统初始化时调用函数并执行
APP_FEATURE_INIT(my_read);

2.代码示例

代码如下(示例):

#include "wifiiot_gpio_ex.h"
#include "wifiiot_gpio.h"
#include "ohos_init.h"
// 打印函数
#include <stdio.h>
// 延时函数
#include <unistd.h>
static void my_read(void)
{
    // 初始化GPIO
    GpioInit();
    // 设置GPIO_9的复用功能为普通GPIO,设置GPIO_5的复用功能为普通GPIO
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
    // 设置按键IO上拉,设置按键的上拉可以让按键的io电平保持稳定。
    IoSetPull(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_PULL_UP);
    // 设置GPIO_9为输出模式,设置GPIO_5为输入模式
    GpioSetDir(WIFI_IOT_GPIO_IDX_9, WIFI_IOT_GPIO_DIR_OUT);
    GpioSetDir(WIFI_IOT_GPIO_IDX_5, WIFI_IOT_GPIO_DIR_IN);
    // 读取IO方向
    WifiIotGpioDir val = {0};
    GpioGetDir(WIFI_IOT_GPIO_IDX_9, &val);
    printf("GPIO_9 Dir is %d\r\n", val);
    WifiIotGpioValue OutputVal = {0};
    WifiIotGpioValue InputVal = {0};
    while (1) {
        // 读取按键电平GPIO5
        GpioGetInputVal(WIFI_IOT_GPIO_IDX_5, &InputVal);
        printf("GPIO_5 InputVal is %d\r\n", InputVal);
        // 设置GPIO_9输出高电平点亮LED灯
        GpioSetOutputVal(WIFI_IOT_GPIO_IDX_9, 1);
        // 读取LED的输出电平
        GpioGetOutputVal(WIFI_IOT_GPIO_IDX_9, &OutputVal);
        // printf("GPIO_9 OutputVal is %d\r\n", OutputVal);
        // 延时1s
        // usleep(1000000);
        // 设置GPIO_9输出低电平熄灭LED灯
        GpioSetOutputVal(WIFI_IOT_GPIO_IDX_9, 0);
        GpioGetOutputVal(WIFI_IOT_GPIO_IDX_9, &OutputVal);
        // printf("GPIO_9 OutputVal is %d\r\n", OutputVal);
        // 延时1s
        usleep(1000000);
    }
}
APP_FEATURE_INIT(my_read);

总结

开发板使用的是润和的核心板,代码参考的是小熊派的开源代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值