0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony3.0上编译C控制Hi3516开发板的LED闪烁

OpenHarmony技术社区 来源:鸿蒙技术社区 作者:亮子力 2021-09-28 09:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

OpenHarmony 分为轻量系统、小型系统、标准系统,目前对应 LiteOS-M、LiteOS-A、Linux 内核。但好像并没有说一定是按照使用内核来划分。我们这里姑且先这么区分。

本文使用的是比较新的 OpenHarmony 3.0 LTS 版本,Linux 内核,编译标准系统。

官方文档已经说明了,如何使用 DevEco Studio 开发 hap 包,并运行在开发板,但是 ACE 框架能力有限。

设备硬件开发还是需要 C,所以这篇文章,将在标准系统下编译 C 控制 Hi3516 开发板的 LED 闪烁。

环境准备

3.0 源码下载:

repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.0-LTS --no-repo-verify

repo sync -c

repo forall -c ‘git lfs pull’

区别于 2.0 需要安装 ruby,其他基本都一样。

sudo apt-get install ruby-full

编译命令:

build/prebuilts_download.sh

。/build.sh --product-name Hi3516DV300

编写 helloworld.c

在 applicationsstandard 目录下新建一个 app 目录来存放 .c 的业务代码。

比如 applicationsstandardapphelloworld.c 内容容下:

#include 《stdio.h》int main(){

printf(“Hello world.

”);

return 0;

}

然后在当前目录新建编译脚本 BUILD.gn 内容如下:

import(“//build/ohos.gni”)

import(“//drivers/adapter/uhdf2/uhdf.gni”)

ohos_executable(“helloworld”) {

sources = [

“helloworld.c”

subsystem_name = “applications”

part_name = “prebuilt_hap”

}

然后添加到编译框架 applicationsstandardhapohos.build 增加如下内容。

“//applications/standard/app:helloworld”

最后执行编译命令即可,开发板使用的是 Hi3516,在不指定 out 目录时,缺省生成在 /system/lib64 或 /system/lib 下。

6d1eed6c-1fc1-11ec-82a8-dac502259ad0.png

点亮开发板 LED

能打印 helloworld 说明环境是没问题的,接下来尝试点亮开发板的 LED。查看 Hi3516DV300 原理图:

6dcc264e-1fc1-11ec-82a8-dac502259ad0.png

6e664ac6-1fc1-11ec-82a8-dac502259ad0.png

Hi3516DV300 共有 4 层板,由原理图可知:最上层板的红外补光灯接在 GPIO5_1,绿色 LED 指示灯在 GPIO2_3,核心板的红色 LED 在 GPIO3_4。

接下来参考 OpenHarmony GPIO 驱动说明:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-platform-gpio-des.md

确定GPIO管脚号:不同SOC芯片由于其GPIO控制器型号、参数、以及控制器驱动的不同,GPIO管脚号的换算方式不一样。

①Hi3516DV300:控制器管理 12 组 GPIO 管脚,每组 8 个。

GPIO 号 = GPIO 组索引 (0~11) * 每组 GPIO 管脚数(8) + 组内偏移

举例:GPIO10_3 的 GPIO 号 = 10 * 8 + 3 = 83。

②Hi3518EV300:控制器管理 10 组 GPIO 管脚,每组 10 个。

GPIO 号 = GPIO 组索引 (0~9) * 每组 GPIO 管脚数(10) + 组内偏移

举例:GPIO7_3 的 GPIO 管脚号 = 7 * 10 + 3 = 73

由此可以得出:

GPIO5_1 = 5 * 8 + 1;

GPIO2_3 = 2 * 8 + 3;

GPIO3_4 = 3 * 8 + 4;

然后新建 applicationsstandardappledtest.c,内容如下:

#include 《stdlib.h》 // standard library 标准库函数头文件#include 《stdio.h》 // standard input output 标准输入输出函数#include 《stdint.h》 // 定义了扩展的整数类型和宏#include 《unistd.h》 // POSIX 系统 API 访问功能的头文件#include 《fcntl.h》 // unix标准中通用的头文件 define O_WRONLY and O_RDONLY // #include 《string.h》#define GPIO_DIR_IN “in”#define GPIO_DIR_OUT “out”#define GPIO_VAL_LOW 0#define GPIO_VAL_HIGHT 1int32_t GpioSetDir(uint16_t gpio, char* dir){

char path[100] = {0};

sprintf(path,“echo %d 》 /sys/class/gpio/export”,gpio);

system(path);

printf(“info:%s

”,path);

char direction[100] = {0};

sprintf(direction,“echo %s 》 /sys/class/gpio/gpio%d/direction”,dir,gpio);

system(direction);

printf(“info:%s

”,direction);

return 0;

}

int32_t GpioWrite(uint16_t gpio, uint16_t val)

{

char path[100] = {0};

sprintf(path,“echo %d 》 /sys/class/gpio/gpio%d/value”,val,gpio);

system(path);

printf(“info:%s

”,path);

return 0;

}

int main(){

uint16_t GPIO5_1 = 5 * 8 + 1;

uint16_t GPIO2_3 = 2 * 8 + 3;

uint16_t GPIO3_4 = 3 * 8 + 4;

printf(“LED test start

”);

int32_t ret;

// uint16_t val;

ret = GpioSetDir(GPIO5_1,GPIO_DIR_OUT);

if (ret != 0) {

printf(“GpioSerDir: failed, ret %d

”, ret);

return 0;

}

ret = GpioSetDir(GPIO2_3,GPIO_DIR_OUT);

if (ret != 0) {

printf(“GpioSerDir: failed, ret %d

”, ret);

return 0;

}

ret = GpioSetDir(GPIO3_4,GPIO_DIR_OUT);

if (ret != 0) {

printf(“GpioSerDir: failed, ret %d

”, ret);

return 0;

}

while(1)

{

GpioWrite(GPIO5_1, GPIO_VAL_HIGHT);

usleep(1000000);

GpioWrite(GPIO5_1, GPIO_VAL_LOW);

usleep(1000000);

GpioWrite(GPIO2_3, GPIO_VAL_HIGHT);

usleep(1000000);

GpioWrite(GPIO2_3, GPIO_VAL_LOW);

usleep(1000000);

GpioWrite(GPIO3_4, GPIO_VAL_HIGHT);

usleep(1000000);

GpioWrite(GPIO3_4, GPIO_VAL_LOW);

usleep(1000000);

}

return 0;

}

将业务代码添加到 BUILD.gn:

import(“//build/ohos.gni”)

import(“//drivers/adapter/uhdf2/uhdf.gni”)

ohos_executable(“helloworld”) {

sources = [

“helloworld.c”

subsystem_name = “applications”

part_name = “prebuilt_hap”

}

ohos_executable(“ledtest”) {

sources = [

“ledtest.c”

subsystem_name = “applications”

part_name = “prebuilt_hap”

}

applicationsstandardhapohos.build:

“//applications/standard/app:ledtest”

之后将程序烧录到开发板,执行 。/system/bin/ledtest:

6ee87c1c-1fc1-11ec-82a8-dac502259ad0.png

就可以看到 LED 闪烁起来了。

本来是打算使用鸿蒙的 GPIO 接口来实现这个功能的,不过调试了很久也没调通,最后无奈还是用的 system 自己实现的 GPIO 函数。

有没使用 OpenHarmony 的 GPIO 成功的小伙伴可以留言一起交流啊。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    243

    文章

    24438

    浏览量

    687465
  • 开发板
    +关注

    关注

    25

    文章

    6125

    浏览量

    113371
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2642

    浏览量

    69345
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20723

原文标题:OpenHarmony 3.0上点亮开发板LED

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3506开发板QT Creator开发手册,交叉编译工具链与QT应用示例,入门必备

    本文基于触觉智能RK3506核心/开发板介绍QTCreator交叉编译配置与QT应用示例。如需购买开发板进行评估验证简介QTCreatorQtCreator‌是由TheQtCompa
    的头像 发表于 09-30 16:26 3365次阅读
    RK3506<b class='flag-5'>开发板</b>QT Creator<b class='flag-5'>开发</b>手册,交叉<b class='flag-5'>编译</b>工具链与QT应用示例,入门必备

    迅为Hi3516CV610开发板强劲内核-海思Hi3516CV610核心

    迅为Hi3516CV610开发板强劲内核-海思Hi3516CV610核心
    的头像 发表于 09-30 15:19 1701次阅读
    迅为<b class='flag-5'>Hi3516</b>CV610<b class='flag-5'>开发板</b>强劲内核-海思<b class='flag-5'>Hi3516</b>CV610核心<b class='flag-5'>板</b>

    【创龙TLT113-MiniEVM开发板试用体验】T113开发板LED闪烁控制终极教程

    _blink.sh 总结 本教程提供了四种在T113开发板实现LED闪烁的方法,各有优势: 方法 优点 适用场景 Shell脚本 简单易用,无需
    发表于 08-06 13:56

    贝启BQ3568HM 开发板被选用为 OpenHarmony 明星开发板

    经开放原子开源基金会OpenHarmony社区官方测评评选,贝启科技BQ3568HM开源鸿蒙开发板被正式选用为OpenHarmony明星开发板。BQ3568HM开源鸿蒙
    的头像 发表于 05-25 00:22 1198次阅读
    贝启BQ3568HM <b class='flag-5'>开发板</b>被选用为 <b class='flag-5'>OpenHarmony</b> 明星<b class='flag-5'>开发板</b>

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制FLASH外设

    1、实验简介本实验将演示如何在小凌派-RK2206开发板使用IOT库的FLASH接口,进行FLASH编程开发。例程将创建一个任务,实现FLASH读写操作。例程源代码:https
    的头像 发表于 04-22 14:49 687次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口<b class='flag-5'>控制</b>FLASH外设

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制UART外设

    1、实验简介本实验将演示如何在小凌派-RK2206开发板使用IOT库的UART接口,进行UART编程开发。例程将创建一个任务,通过配置UART引脚,实现UART读写操作。例程源代码:https
    的头像 发表于 04-22 14:22 796次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口<b class='flag-5'>控制</b>UART外设

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制GPIO中断

    1、实验简介本实验将演示如何在小凌派-RK2206开发板使用IOT库的GPIO中断模式,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚为中断模式,实现GPIO中断操作。例程源代码
    的头像 发表于 04-21 10:39 892次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口<b class='flag-5'>控制</b>GPIO中断

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制GPIO外设

    1、案例简介本案例主要是如何在小凌派-RK2206开发板使用IOT库的GPIO接口,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚,实现GPIO读写操作。例程源代码:https
    的头像 发表于 04-11 15:36 1615次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口<b class='flag-5'>控制</b>GPIO外设

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制ADC外设

    1、案例简介本案例主要讲解如何在小凌派-RK2206开发板使用IoT库的ADC接口,进行ADC编程开发。例程内容为创建一个任务,读取按键的ADC值,并打印到串口。例程源代码:https
    的头像 发表于 04-10 16:00 711次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口<b class='flag-5'>控制</b>ADC外设

    北京迅为iTOP-RK3568开发板OpenHarmony系统南向驱动开发实操-HDF驱动配置LED

    北京迅为iTOP-RK3568开发板OpenHarmony系统南向驱动开发实操-HDF驱动配置LED
    的头像 发表于 03-14 14:41 1105次阅读
    北京迅为iTOP-RK3568<b class='flag-5'>开发板</b><b class='flag-5'>OpenHarmony</b>系统南向驱动<b class='flag-5'>开发</b>实操-HDF驱动配置<b class='flag-5'>LED</b>

    迅为RK3568开发板OpenHarmony实操HDF驱动控制LED-添加内核编译

    编译内核时将该 HDF 驱动编译到镜像中,接下来编写驱动编译脚本 Makefile,代码如下所示: 加入编译体系,填加模块目录到 drivers/hdf_core/adapter/kh
    发表于 01-22 10:35

    迅为RK3568开发板OpenHarmony实操HDF驱动控制LED-编写内核 LED HDF 驱动程序

    接下来编译 LED 驱动,该驱动用于在基于华为设备框架(HDF)的系统中控制 LED 灯的开关,完整代码如下所示: 更多内容可以关注:迅为RK3568
    发表于 01-17 15:13

    迅为RK3568开发板OpenHarmony配置HDF驱动控制LED-新增 topeet子系统

    目录 ├── led_driver.c:内核 LED HDF 驱动程序 └── Makefile:内核 LED HDF 驱动编译脚本 更多内容可以关注:迅为RK3568
    发表于 01-13 15:59

    OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示

    本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程,触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持开
    的头像 发表于 12-30 10:08 1514次阅读
    <b class='flag-5'>OpenHarmony</b>源码<b class='flag-5'>编译</b>后烧录镜像教程,RK3566鸿蒙<b class='flag-5'>开发板</b>演示

    OpenHarmony怎么修改DPI密度值?触觉智能RK3566鸿蒙开发板演示

    开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新开源鸿蒙
    的头像 发表于 12-24 11:46 1083次阅读
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?触觉智能RK3566鸿蒙<b class='flag-5'>开发板</b>演示