当前位置:网站首页>鸿蒙系统控制LED的实现方法之经典
鸿蒙系统控制LED的实现方法之经典
2022-07-05 20:16:00 【ST小智】
今天主要和大家聊一聊,如何使用国产鸿蒙操作系统来控制led硬件。
第一:国产鸿蒙系统简介
鸿蒙系统是基于微内核的新型分布式操作系统,为所有设备和场景提供全新的用户体验,并在场景体验上更加流畅,支持设备的无缝协作。它是一个全场景,面向未来的操作系统,可以安装在手机、手表、无人机等多种设备上。
鸿蒙的开发分为两个方向,南向和北向。北向主要指的是应用开发,应用开发有专用的IDE工具;采用的主流开发语言有:java ,js 等。南向主要指的是设备开发,有基于LiteOS微内核开发的,轻量级、功耗低,可以应用在智能设备上,并可以利用软总线连接。
第二:国产鸿蒙硬件分析
既然这次是聊一聊鸿蒙系统灯的控制,先来认识一下对应的GPIO。本次实验中的用到的Hi3861芯片内部包含了GPIO模块。该模块主要可以实现芯片引脚上的数字输入或输出功能。我们知道由于机器只能识别0和1的数字量,所以平常所说的GPIO口的输入输出状态指的就是0或1状态,也就是常说的0代表低电平,1代表高电平。

上面这个原理图看完有啥感受,一个字绝,是不是很清晰

。分析如下:
J3是两根排针,默认由跳帽连接,是导通状态的,可视为直连状态的。LEDI是核心板的可编程LED灯,它的一端通过排针J3和主控芯片GPIO09引脚连接,另一端通过电阻R6连接到3V3电源。
由于LED1和主控芯片GPI009引脚相连,因此主控芯片GPIO09引脚输出不同电平即可控制LED1的状态。结合原理图分析可知,主控芯片GPI009引脚状态和LED1状态的对应关系为低电平点亮,高电平熄灭。
第三:代码实现方法
鸿蒙IOT的硬件提供了控制外设的应用程序编程接口,通俗一点也是传说中的API,GPIO可以利用相关的API函数实现控制,主控代码如下所示:
#include <stdio.h>#include <unistd.h>#include "cmsis_os2.h"#include "ohos_init.h"#include "wifiiot_gpio.h"#include "wifiiot_gpio_ex.h"#define LED_TASK_STACK_SIZE 1024#define LED_TASK_PRIO 25static void* GpioTask(const char* arg){(void)arg;GpioInit();IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);while (1) {printf(" LED_SPARK! \n");GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE0);osDelay(50);GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE1);osDelay(50);}return NULL;}static void GpioExampleEntry(void){osThreadAttr_t attr;attr.name = "GpioTask";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)GpioTask, NULL, &attr) == NULL) {printf("[GpioExample] Falied to create GpioTask!\n");}}SYS_RUN(GpioExampleEntry);
写到这里,本以为要结束了,其实万里长征才刚刚开始

。要想让代码运行起来,还需要对系统进行配置和编译如视频所示。
第四:效果演示
鸿蒙系统
边栏推荐
猜你喜欢

Leetcode brush question: binary tree 13 (the same tree)

Let's talk about threadlocalinsecurerandom

Oracle tablespace management

A solution to PHP's inability to convert strings into JSON

leetcode刷题:二叉树14(左叶子之和)

14. Users, groups, and permissions (14)

Jvmrandom cannot set seeds | problem tracing | source code tracing

leetcode刷题:二叉树10(完全二叉树的节点个数)

A way to calculate LNX

零道云新UI设计中
随机推荐
Oracle-表空间管理
ByteDance dev better technology salon was successfully held, and we joined hands with Huatai to share our experience in improving the efficiency of web research and development
CTF逆向基础
leetcode刷题:二叉树12(二叉树的所有路径)
c语言oj得pe,ACM入门之OJ~
Elk distributed log analysis system deployment (Huawei cloud)
Cocos2d-x项目总结中的一些遇到的问题
Reinforcement learning - learning notes 4 | actor critical
Four methods of random number generation | random | math | threadlocalrandom | securityrandom
B站UP搭建世界首个纯红石神经网络、基于深度学习动作识别的色情检测、陈天奇《机器学编译MLC》课程进展、AI前沿论文 | ShowMeAI资讯日报 #07.05
y57.第三章 Kubernetes从入门到精通 -- 业务镜像版本升级及回滚(三十)
[quick start of Digital IC Verification] 7. Basic knowledge of digital circuits necessary for verification positions (including common interview questions)
sort和投影
Is it safe for Galaxy Securities to open an account online?
Leetcode brush questions: binary tree 18 (largest binary tree)
Process file and directory names
随机数生成的四种方法|Random|Math|ThreadLocalRandom|SecurityRandom
DP: tree DP
Is it safe for Guosen Securities to open an account online?
【c语言】快速排序的三种实现以及优化细节