鸿蒙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闪烁图

相关推荐
慧海灵舟几秒前
鸿蒙南向开发教程 Day 11:GPIO 按键中断与 LED 状态机
华为·harmonyos
LEO1111020 分钟前
HarmonyOS应用开发实战:猫猫大作战-HUD 拆成独立子组件、用 `@Prop` 接收父组件得分/时间为锚点,把 @Prop 声明与传递、单向只
harmonyos·鸿蒙
yaoyaoxingzhe29 分钟前
HarmonyOS应用开发实战:猫猫大作战-`ForEach` 的双层嵌套、`keyGenerator` 密钥、`width` 百分比响应式格子
harmonyos·鸿蒙
echohelloworld111 小时前
HarmonyOS应用开发实战:猫猫大作战-Row 横向布局、Spacer 占位、Button 双态样式(暂停灰 / 重新开始红)、底部 paddin
harmonyos·鸿蒙
臼犀1 小时前
大语言模型响应延迟对软件工程师尿液浓缩程度的影响 —— 一项基于水杯见底速度的观察性研究
程序员·ai编程·vibecoding
西城微科方案开发1 小时前
LCD智能婴儿秤方案
单片机·嵌入式硬件
程序员cxuan2 小时前
OpenAI 把 Hugging Face 打穿了,然后 GLM 5.2 当了救火队长?
人工智能·后端·程序员
爱写代码的森2 小时前
鸿蒙三方库 | harmony-utils之ObjectUtil对象拷贝与合并详解
华为·harmonyos·鸿蒙·huawei
三佛科技-134163842123 小时前
灭蚊灯MCU方案开发,FT60E112-RB作为灭蚊灯主控芯片优势
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
起床学FPGA3 小时前
I2C、SPI
单片机·嵌入式硬件