系列文章目录
第一篇 外设学习之点亮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);
总结
开发板使用的是润和的核心板,代码参考的是小熊派的开源代码。