鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

概述

OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。本文介绍如何通过调用OpenHarmony的NDK接口,实现对GPIO控制,达到LED闪烁的效果。其他的IOT外设控制,开发者可根据API指导文档完成,此处不逐一介绍。

开发

  1. 请先完成轻量系统快速入门

    LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led\_example.c文件中。

  2. 实现IOT外设控制,首先需要通过查阅原理图明确接线关系。经过查阅,hispark pegasus的LED与芯片的9号管脚相连。

鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

define LED_TEST_GPIO 9


说明: 开发板原理图,请开发者联系Hi3861购买渠道客服获取。

  1. 使用GPIO前,需要完成GPIO管脚初始化,明确管脚用途,并创建任务,使LED周期性亮灭,达到闪烁的效果。

    cpp 复制代码
    static void LedExampleEntry(void)
    {
        osThreadAttr_t attr;
    
        /* 管脚初始化 */
        IoTGpioInit(LED_TEST_GPIO);
        /* 配置9号管脚为输出方向 */
        IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);
    
        attr.name = "LedTask";
        attr.attr_bits = 0U;
        attr.cb_mem = NULL;
        attr.cb_size = 0U;
        attr.stack_mem = NULL;
        attr.stack_size = LED_TASK_STACK_SIZE;
        attr.priority = LED_TASK_PRIO;
    
        /* 启动任务 */
        if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
            printf("[LedExample] Failed to create LedTask!\n");
        }
    }
  2. 在循环任务中通过周期性亮灭形式实现LED闪烁。

    cpp 复制代码
    static void *LedTask(const char *arg)
    {
        (void)arg;
        while (1) {
            switch (g_ledState) {
                case LED_ON:
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 1);
                    usleep(LED_INTERVAL_TIME_US);
                    break;
                case LED_OFF:
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 0);
                    usleep(LED_INTERVAL_TIME_US);
                    break;
                case LED_SPARK:
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 0);
                    usleep(LED_INTERVAL_TIME_US);
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 1);
                    usleep(LED_INTERVAL_TIME_US);
                    break;
                default:
                    usleep(LED_INTERVAL_TIME_US);
                    break;
            }
        }
    }
  3. 在代码最下方,使用OpenHarmony启动恢复模块接口SYS\_RUN()启动业务。(SYS\_RUN定义在ohos\_init.h文件中)

    cpp 复制代码
    SYS_RUN(LedExampleEntry);
  4. 修改applications/sample/wifi-iot/app/BUILD.gn文件,使led\_example.c参与编译。

    cpp 复制代码
    import("//build/lite/config/component/lite_component.gni")
    lite_component("app") {
        features = [
            "iothardware:led_example"
        ]
    }

验证

编译过程请参考轻量系统快速入门的编译章节,烧录过程请参考轻量系统快速入门的烧录章节

完成以上两步后,按下RST键复位模组,可发现LED在周期性闪烁,与预期相符,验证完毕。

图 1 LED闪烁图

相关推荐
学渣6765643 分钟前
正点原子 迷你 miniSTM32用ST link烧录后程序不运行(已解决)
stm32·单片机·嵌入式硬件
逆鱼_041 小时前
ARM-外部中断,ADC模数转换器
arm开发·单片机·嵌入式硬件
【云轩】2 小时前
青铜与信隼的史诗——TCP与UDP的千年博弈
嵌入式硬件
niuTaylor2 小时前
大学生机器人比赛实战(二)软件篇
单片机·嵌入式硬件·机器人
天天爱吃肉82182 小时前
TSMaster在新能源汽车研发测试中的硬核应用指南
单片机·嵌入式硬件·汽车·学习方法
电手2 小时前
纯国产系统,首款鸿蒙电脑下月发布
华为·电脑·harmonyos
番茄老夫子3 小时前
小动物多导生理记录仪产品需求定义
单片机·嵌入式硬件
仙灵灵4 小时前
前端的同学看过来,今天讲讲jwt登录
前端·后端·程序员
陈随易4 小时前
VSCode v1.99发布,王者归来,Agent和MCP正式推出
前端·后端·程序员
amagi6001 天前
关于我在大学学编程之后一些学习思维的杂谈
程序员