润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯 原创

料峭春风Z
发布于 2022-5-14 16:52
浏览
1收藏

前言

本文学习参照润和软件HarmonyOSIoT设备开发一书,但由于版本迭代,书中很多代码无法编译,笔者在此进行补充更改,如有错误,请各位大佬多多指正。更多细节可购买此书进一步了解。
注:本文源代码版本:OpenHarmony v3.0.1LTS(2022-01-12)
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区

代码变动

  • 1.0版本的头文件"wifiiot_gpio.h"和”wifiiot_gpio_ex.h"现在已经合并
    为"iot_gpio.h"。

  • 函数名的变化大多都是在原名前加上IOT,
    例如:GpioSetDir()改为IOTGpioSetDir()。

  • 部分函数放在了其他文件中并且名字发生了变化,
    比如IoSetPull(id,val)现在放在了"hi_io.h"中,函数名变为hi_io_set_pull();

  • 其他:
    WifiIotGpioValue -> IotGpioValue (注意:这里的Iot的t是小写)

    WIFI_IOT_GPIO_VALUE0 ->IOT_GPIO_VALUE0

    IosetFunc() -> hi_io_set_func()

可以通过查找它的头文件,了解各个函数的具体定义。方法:在vscode中打开源码目录,然后ctrl+p,在输入框中输入要查找的头文件,它就能自动定位到头文件所在位置并打开。
例如输入hi_io.h,就能定义到device\hisilicon\hispark_pegasus\sdk_liteos\include\hi_io.h这个位置,里面有描述各个函数的功能。

通过查询GPIO状态控制LED灯

1.在源码application/sample/wifi-iot/app下新建gpio_demo文件夹,在gpio_demo文件夹中新建gpio_input_set.c文件。

代码目录如下:
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区
内容如下:

#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "hi_io.h"

#define WIFI_IOT_IO_NAME_GPIO_9 9 // for hispark_pegasus
#define WIFI_IOT_IO_NAME_GPIO_5 5

static void GpioTask(void *arg)
{
    (void) arg;
     //初始化GPIO
    IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_9);
    IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_5);

    //将GPIO09设置普通IO
    hi_io_set_func(HI_IO_NAME_GPIO_9,HI_IO_FUNC_GPIO_9_GPIO);
    //将GPIO09引脚方向设置为输出
    IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_9,IOT_GPIO_DIR_OUT);
    //将GPIO05设置普通IO
    hi_io_set_func(HI_IO_NAME_GPIO_5,HI_IO_FUNC_GPIO_5_GPIO);
     //将GPIO05引脚方向设置为输入
    IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_5,IOT_GPIO_DIR_IN);
    //IoSetPull(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_IO_PULL_UP);
    //将GPIO05引脚设置上拉状态,上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平
    hi_io_set_pull(WIFI_IOT_IO_NAME_GPIO_5,HI_IO_PULL_UP);

    while(1){
        IotGpioValue value = IOT_GPIO_VALUE0;
        //获取GPIO05引脚状态
        IoTGpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5,&value);
        //获取GPIO09引脚状态
        //当GPIO09输出高电平时,LED处于熄灭状态
        IoTGpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9,value);
    }
}

static void GpioEntry(void)
{
        osThreadAttr_t attr={0};
        attr.name = "GpioTask";
        attr.stack_size = 4096;
        attr.priority = osPriorityNormal;

         if (osThreadNew((osThreadFunc_t)GpioTask, NULL, &attr) == NULL) {
        printf("[GpioEntry] Falied to create GpioTask!\n");
    }
}
SYS_RUN(GpioEntry);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.

2.在gpio_demo文件夹中新建BUILD.gn文件,

目录如下:
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区
内容如下:

static_library("gpiodemo") {
    sources = [
        "gpio_input_get.c"
    ]

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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

3.修改app文件夹下的BUILD.gn文件,

目录如下:
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区
修改后内容如下:

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "gpio_demo:gpiodemo",
    ]
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

原理图

user按键原理图:
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区
LED原理图:
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区
user按键与引脚GPIO05相连,当按键按下时,GPIO05引脚接地,处于低电平状态。由于我们设置了读取GPIO05状态的函数,所以此时GPIO09也会被设置为低电平状态,LED灯亮起。而又因为右边的显示屏下方的按键1和按键2也同样接的是GPIO05引脚,所以按下它们也会有同样的效果。

效果演示

润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区
润和Hi3861学习笔记(一)——通过查询GPIO状态控制LED灯-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-5-16 17:00:33修改
1
收藏 1
回复
举报
1
1
1
1条回复
按时间正序
/
按时间倒序
wx66262f5e2a104
wx66262f5e2a104

使用小熊派成功搞定, 感谢分享。

回复
2024-4-22 20:10:18


回复
    相关推荐