当前位置:网站首页>鸿蒙系统控制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 25
static 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 questions: binary tree 11 (balanced binary tree)
- [quick start of Digital IC Verification] 1. Talk about Digital IC Verification, understand the contents of the column, and clarify the learning objectives
- 解决php无法将string转换为json的办法
- leetcode刷题:二叉树18(最大二叉树)
- 基础篇——配置文件解析
- JVMRandom不可设置种子|问题追溯|源码追溯
- MySql的root密码忘记该怎么找回
- Leetcode: binary tree 15 (find the value in the lower left corner of the tree)
- leetcode刷题:二叉树15(找树左下角的值)
- Scala基础【HelloWorld代码解析,变量和标识符】
猜你喜欢
走入并行的世界
Leetcode brush questions: binary tree 11 (balanced binary tree)
leetcode刷题:二叉树18(最大二叉树)
IC科普文:ECO的那些事儿
Securerandom things | true and false random numbers
Debezium series: record the messages parsed by debezium and the solutions after the MariaDB database deletes multiple temporary tables
Elk distributed log analysis system deployment (Huawei cloud)
leetcode刷题:二叉树14(左叶子之和)
微信小程序正则表达式提取链接
Convolution free backbone network: Pyramid transformer to improve the accuracy of target detection / segmentation and other tasks (with source code)
随机推荐
【愚公系列】2022年7月 Go教学课程 004-Go代码注释
How to retrieve the root password of MySQL if you forget it
Guidelines for application of Shenzhen green and low carbon industry support plan in 2023
Debezium series: modify the source code to support UNIX_ timestamp() as DEFAULT value
y57.第三章 Kubernetes从入门到精通 -- 业务镜像版本升级及回滚(三十)
Practical demonstration: how can the production research team efficiently build the requirements workflow?
selenium 元素信息
Wechat applet regular expression extraction link
sort和投影
【数字IC验证快速入门】6、Questasim 快速上手使用(以全加器设计与验证为例)
【c语言】快速排序的三种实现以及优化细节
js实现禁止网页缩放(Ctrl+鼠标、+、-缩放有效亲测)
【数字IC验证快速入门】3、数字IC设计全流程介绍
C langue OJ obtenir PE, ACM démarrer OJ
Interviewer: what is the internal implementation of set data types in redis?
【数字IC验证快速入门】7、验证岗位中必备的数字电路基础知识(含常见面试题)
强化学习-学习笔记4 | Actor-Critic
Reinforcement learning - learning notes 4 | actor critical
SecureRandom那些事|真伪随机数
【数字IC验证快速入门】8、数字IC中的典型电路及其对应的Verilog描述方法