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 日
以上是关于HI3861学习笔记(12)——GPIO输入接口使用的主要内容,如果未能解决你的问题,请参考以下文章
HI3861学习笔记(19)——WiFi接口使用(STA和AP模式)