HI3861学习笔记(12)——GPIO输入接口使用

Posted Leung_ManWah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HI3861学习笔记(12)——GPIO输入接口使用相关的知识,希望对你有一定的参考价值。

一、简介

HI3861V100 芯片有 15 个 GPIO,引脚分布如下:

二、API说明

以下 GPIO 接口位于 base\\iot_hardware\\interfaces\\kits\\wifiiot_lite\\wifiiot_gpio.h

业务BUILD.gn中包含路径

include_dirs = [
        "//utils/native/lite/include",
        "//kernel/liteos_m/components/cmsis/2.0",
        "//base/iot_hardware/interfaces/kits/wifiiot_lite",
    ]

2.1 GpioInit

功能初始化GPIO外设
函数定义unsigned int GpioInit(void)
参数
返回错误码

2.2 GpiosetDir

功能设置GPIO输出方向
函数定义unsigned int GpioSetDir(WifiIotGpioIdx id, WifiIotGpioDir dir)
参数id:表示GPIO引脚号
dir:表示GPIO输出方向
返回错误码

2.3 GpioRegisterIsrFunc

功能启用GPIO引脚的中断功能。这个函数可以用来为GPIO pin设置中断类型、中断极性和中断回调
函数定义unsigned int GpioRegisterIsrFunc(WifiIotGpioIdx id, WifiIotGpioIntType intType, WifiIotGpioIntPolarity intPolarity, GpioIsrCallbackFunc func, char * arg)
参数id:表示GPIO引脚号
intType:表示中断类型
intPolarity:表示中断极性
func:表示中断回调函数
arg:表示中断回调函数中使用的参数的指针
返回错误码

以下扩展 GPIO 接口位于 base\\iot_hardware\\interfaces\\kits\\wifiiot_lite\\wifiiot_gpio_ex.h

2.4 IoSetFunc

功能设置GPIO引脚功能
函数定义unsigned int IoSetFunc(WifiIotIoName id, unsigned char val)
参数id:表示GPIO引脚号
val:表示IO复用功能
返回错误码

2.5 IoSetPull

功能设置GPIO的上下拉方式
函数定义unsigned int IoSetPull(WifiIotIoName id, WifiIotIoPull val)
参数id:表示GPIO引脚号
val:表示要设置的上拉或下拉
返回错误码

三、使用GPIO输入功能去读取按键状态

编译时在业务BUILD.gn中包含路径

include_dirs = [
        "//utils/native/lite/include",
        "//kernel/liteos_m/components/cmsis/2.0",
        "//base/iot_hardware/interfaces/kits/wifiiot_lite",
    ]

使用板载的两个用户按键来验证GPIO的输入功能,在BearPi-HM_Nano开发板上用户按键的连接电路图如下图所示,按键F1的检测引脚与主控芯片的GPIO_11连接,按键F2的检测引脚与主控芯片的GPIO_12连接,所以需要编写软件去读取GPIO_11和GPIO_12的电平值,判断按键是否被按下。

#include <stdio.h>
#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"

static void F1_Pressed(char *arg)
{
    (void)arg;
    GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 1);
}
static void F2_Pressed(char *arg)
{
    (void)arg;
    GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 0);
}
static void ButtonExampleEntry(void)
{
    GpioInit();

    //初始化LED灯
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_GPIO);

    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_GPIO_DIR_OUT);

    //初始化F1按键,设置为下降沿触发中断
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);

    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_IN);
    IoSetPull(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_PULL_UP);
    GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1_Pressed, NULL);

    //初始化F2按键,设置为下降沿触发中断
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);

    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_IN);
    IoSetPull(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_PULL_UP);
    GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2_Pressed, NULL);
}

APP_FEATURE_INIT(ButtonExampleEntry);

• 由 Leung 写于 2021 年 8 月 28 日

• 参考:【鸿蒙2.0设备开发教程】小熊派HarmonyOS 鸿蒙·季 开发教程

以上是关于HI3861学习笔记(12)——GPIO输入接口使用的主要内容,如果未能解决你的问题,请参考以下文章

HI3861学习笔记(14)——ADC接口使用

HI3861学习笔记(18)——UART串口使用

HI3861学习笔记(19)——WiFi接口使用(STA和AP模式)

HI3861学习笔记(16)——光强度GY-30(BH1750)使用

HI3861学习笔记——CMSIS-RTOS2接口

HI3861学习笔记(13)——PWM接口使用