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

news/2024/11/20 21:25:17/

概述

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点击或者复制转到。

搜狗高速浏览器截图20240326151547.png

define LED_TEST_GPIO 9

  说明:  开发板原理图,请开发者联系Hi3861购买渠道客服获取。
  1. 使用GPIO前,需要完成GPIO管脚初始化,明确管脚用途,并创建任务,使LED周期性亮灭,达到闪烁的效果。

    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闪烁。

    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文件中)

    SYS_RUN(LedExampleEntry);

  4. 修改applications/sample/wifi-iot/app/BUILD.gn文件,使led\_example.c参与编译。

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

验证

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

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

图 1 LED闪烁图


http://www.ppmy.cn/news/1439793.html

相关文章

网络安全实训Day22

网络空间安全实训-渗透测试 CSRF 定义:跨站伪造请求攻击 攻击者透过诱骗受害者点击攻击者提前构造的恶意链接,从而以受害者的身份向网站服务器发起请求,达到攻击的目的 通过CSRF在网站后台创建管理员 1.搭建创建管理员账号的站点 1.将对方网…

【MongoDB】--MongoDB的组合索引

目录 一、前言二、Query查询条件转换shell输入命令1、常用shell输入命令2、explain()解析计划三、组合索引的说明一、前言 本文章主要介绍Mongodb的组合索引的使用。 二、Query查询条件转换shell输入命令 1、常用shell输入命令 Query: {"tenantsid": {"$num…

MAC系统升级问题记录

一、 场景 新购置一台MAC mini盒子作为开发使用,系统版本为macOS Sonoma 14.2, 由于是新机器,从新开始安装开发工具,从AppStore中获取XCode 15.3 版本,编译现有工程项目,报如下错误: SDK does not contai…

AI数字人给网络安全带来新的威胁

随着人工智能技术的快速发展,AI数字人已经成为我们日常生活和工作中的一部分。它们以其高度的智能化和仿真性,为我们提供了许多便利。与此同时,AI数字人也给网络安全带来了新的威胁。在这一背景下,使用SSL证书显得尤为重要&#x…

Zookeeper集群部署和单机部署

Zookeeper集群部署和单机部署 Zookeeper单机部署 cd /data/softwarewget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gztar -zxvf zookeeper-3.4.12.tar.gz mv zookeeper-3.4.12 /data/apps/zookeeper-3.4.12cd /data/apps/zookeeper…

时间序列预测:基于PyTorch框架的循环神经网络(RNN)实现销量预测

之前随手一写,没想到做预测的同学还挺多,但是之前那个效果并不好,于是在之前的基础上重新修改完善,到了现在这一步才感觉预测算是初步能应用。 上文地址:LSTM模型预测时间序列:根据历史销量数据预测商品未…

金三银四,备战数据结构与经典算法面试

随着春招季节的临近,面试备战成为许多求职者的痛点。如何在激烈的竞争中脱颖而出,成为众多求职者思考的问题。学习Python编程与算法内容,成为面试开发、测试开发等热门岗位的基础。 为了帮助大家更好地应对技术类面试挑战,霍格沃…

面试题:判断一个完全平方数

面试题:判断一个完全平方数 方法一:平方根法 bool isPerfectSquare(int n) {int sqrt_n int(sqrt(1.0 * n));return sqrt_n * sqrt_n n; }方法二:连续奇数和法 // 一个完全平方数可以表示为前n个连续奇数的和,如1 3 5 // 不…