HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南

特别说明:本文章与卡片开发无关,想看卡片开发的不用往下读了

最近学习鸿蒙设备开发的过程中遇到了很多问题,因为目前几乎所有设备开发教程都是针对OpenHarmony1.x的,用OpenHarmony2.0的过程中遇到了很多问题,于是想写一篇文章蹭一下卡片开发的热度,让更多人看到帮大家避坑。

1.wifi iot套件的专用sdk目录和数量变了

harmonyos1.0:

harmonyos2.0:

我猜测可能时还没有来得及封装的原因, 我在用Openharmony2.0写一个简单的按键程序的时候我发现iot开头的头文件居然没有拉高电平的函数

但是在openharmony1.0的代码里面有相关函数的封装

最后通过看源码发现无论是新的sdk还是旧的sdk其实都是基于更底层的hi开头的sdk封装的,所以如果发现没有相应函数的时候可以直接调用这些hi开头的头文件

2.usr_config.mk文件位置改变

玩过OpenHarmony1.0的人应该都知道在使用某些功能的时候需要在配置文件把对应的选项写上才能使用该功能否则会报错。
openharmony1.0:

但是Open Harmony2.0里面这个文件的位置变了:

目前我在学习过程中也只发现这两个问题,后面遇到问题再补充吧, 这个好像不写够1000字还不让发,那我再附一个hi3861开发板用蜂鸣器放歌的鸿蒙2.0版本教程吧。

3.PWM播放音乐,基于hispark wifi套件采用harmony os 2.0全量代码

一、看原理图确定硬件电路

本例采用红绿灯扩展版上的蜂鸣器

注:可以发现由于红绿灯的蜂鸣器与GPIO9相连而核心板上的led也是与GPIO9相连的,所以控制蜂鸣器时核心板板载的led也会发生变化。

二、在源码中建立demo文件

在app下建立pwmdemo文件夹并创建BUILD.gn和pwm_buz_music.c文件

三、编写代码

在pwmdemo/pwm_buz_music.c中写入

#include <stdio.h>#include "ohos_init.h"
#include "cmsis_os2.h"#include "hi_gpio.h"
#include "hi_io.h"
#include "hi_pwm.h"
#include "hi_time.h"// 音符对应的分频系数
static const uint16_t g_tuneFreqs[] = {0, //40MHz时钟源38223, // 1 1046.534052, // 2 1174.730338, // 3 1318.528635, // 4 1396.425511, // 5 156822728, // 6 176020249, // 7 1975.5
};//曲谱音符
static const uint8_t g_scoreNotes[] = {// 《两只老虎》简谱1, 2, 3, 1,    1, 2, 3, 1,   3, 4, 5,  3, 4, 5,5, 6, 5, 4, 3, 1,  5, 6, 5, 4, 3, 1,   1, 5, 1,  1, 5, 1,
};// 曲谱时值
static const uint8_t g_scoreDurations[] = {4, 4, 4, 4,    4, 4, 4, 4,   4, 4, 8,  4, 4, 8,3, 1, 3, 1, 4, 4,  3, 1, 3, 1, 4, 4,   4, 4, 8,  4, 4, 8,
};static void PwmGpioTask(void *arg){(void)arg;uint32_t tune;uint16_t freqDivisor;uint32_t tuneInterval;for (size_t i = 0; i < sizeof(g_scoreNotes)/sizeof(g_scoreNotes[0]); i++){tune = g_scoreNotes[i];freqDivisor = g_tuneFreqs[tune];tuneInterval = g_scoreDurations[i] * (125 * 1000); // 时间printf("%d %d %d\r\n", tune, freqDivisor, tuneInterval);hi_pwm_start(HI_PWM_PORT_PWM0, freqDivisor/2, freqDivisor);hi_udelay(tuneInterval);hi_pwm_stop(HI_PWM_PORT_PWM0);}
}static void PwmGpioEntry(void){osThreadAttr_t attr;hi_gpio_init();hi_io_set_func(9, HI_IO_FUNC_GPIO_9_PWM0_OUT);hi_pwm_init(HI_PWM_PORT_PWM0);hi_pwm_set_clock(PWM_CLK_XTAL);attr.name = "PwmGpioTask";attr.attr_bits = 0U;attr.cb_mem = NULL;attr.cb_size = 0U;attr.stack_mem = NULL;attr.stack_size = 1024;attr.priority = 25;if (osThreadNew(PwmGpioTask, NULL, &attr) == NULL) {printf("[LedExample] Falied to create LedTask!\n");}
}SYS_RUN(PwmGpioEntry);

这里的pwm相关函数用法参考源码
在pwmdemo/BUILD.gn中写入

static_library("pwmdemo") {sources = ["pwm_buz_music.c"]include_dirs = ["//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//base/iot_hardware/peripheral/interfaces/kits","//device/hisilicon/hispark_pegasus/sdk_liteos/include"]
}

在上级目录的app/BUILD.gn中写入

import("//build/lite/config/component/lite_component.gni")lite_component("app") {features = ["pwmdemo",]
}

注:为了保证编译通过请修改配置文件
修改device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk
加上

CONFIG_PWM_SUPPORT=y

四、在Linux下使用hb工具进行编译

root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb set
[OHOS INFO] Input code path: .
OHOS Which product do you need?  wifiiot_hispark_pegasus
root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb build

如果曾经设置过hb set就不需要再设置了,直接这样就可以了

root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb build

看到success字样即为编译成功

五、将编译好的固件烧录到开发板

将linux中的源码文件夹中的out拷贝到Windows下替换原有out文件夹就可以了,但是要先删除原有out文件夹
打开vscode使用DevEco Device Tool打开源码文件夹
选择对应的开发板型号
这里选择的是hi3861
然后在项目设置中按照实际端口情况进行如下设置

保存项目并打开

点击upload进行烧录,烧录时需要根据提示按下开发板的rst键,稍等片刻,看到success代表烧录成功。

按下rst键重启开发板,可以听到蜂鸣器播放儿歌两只老虎

【本文正在参与“有奖征文 | HarmonyOS征文大赛”活动】
活动页面链接.

HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南相关推荐

  1. JPBC库(基于配对的密码学)入门和避坑指南

    视频地址:https://www.bilibili.com/video/BV1o5411Y77r/ 1. JPBC简介 Java Pairing-Based Cryptography Library ...

  2. ASP.NET Core 3.0 迁移避坑指南

    一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core ...

  3. HarmonyOS 开发避坑指南

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

  4. Hi3861开发环境搭建 ||避坑指南|| [适用于几乎所有以Hi3861为主控的开发板]

    Hi3861开发环境搭建 ||避坑指南|| [适用于几乎所有以Hi3861为主控的开发板] 前言: 这几天为了搭建Hi3861的开发环境,看了不少官方文档和视频,但是依然折腾了很久才配置好编译.上传都 ...

  5. 项目从0到1避坑指南

    背景: 物流行业,老板信息化意识弱,不是现有的TMS而是一个新的方向,目前市场上竞品较少 前言: 一个项目从0到1,有相关的固定的考虑事项.然而,由于公司环境.项目涉及的行业等一些实际条件的约束,会在 ...

  6. Ununtu 18.04 安装Carla 0.9.13 以及Carla ros bridge 超级避坑指南(更新于2022.10.20)

    Carla0.9.13 以及Carla ros bridge 超级避坑指南 Carla0.9.13 以及Carla ros bridge 超级避坑指南 站在巨人肩膀前进 显卡驱动问题 首先就是虚幻4的 ...

  7. 虚拟服务器windows硬盘30t,避坑指南:基于Windows系统的NAS通过NFS将硬盘空间共享给Hyper-V黑群晖...

    避坑指南:基于Windows系统的NAS通过NFS将硬盘空间共享给Hyper-V黑群晖 2019-07-08 07:30:00 64点赞 601收藏 91评论 方案选择 首先感谢矿难,性价比超高的蜗牛 ...

  8. 问题定位 | XtraBackup 8.0 数据重建避坑事件始末

    作者:卢文双 资深数据库研发工程师 目前负责青云云数据库的研发工作,热衷于研究主流数据库架构.源码,对关系型数据库 MySQL/PostgreSQL 及分布式数据库有深入研究. 前言 在为 Xenon ...

  9. 基于Hi3861芯片的鸿蒙开发(二烧录)

    我要烧录的是Py4OH-v1.1.0-Beta-Hi3861.bin 准备工作: 1)下载CH340芯片相关驱动 点击下面地址,直接下载windows版 https://www.wch.cn/down ...

最新文章

  1. 如何优雅的使用和理解线程池
  2. ajax提交表单,导致浏览器卡死
  3. POJ 1001 Exponentiation C++解题报告 JAVA解题报告
  4. linux tomcat连接mysql步骤_linux系统下tomcat的安装步骤
  5. 南瑞变压器保护装置说明书_电力试验:变压器感应耐压试验(二)
  6. windbg分析dmp蓝屏文件_手把手教你分析漏洞 : CVE-2018-8120
  7. 共享马扎的火爆,原来是一场营销!
  8. MVC3.0 将网站设为首页和加为收藏的实现(IE/Firefox)
  9. 何时、何地应用何种窗函数?
  10. tensorflow 显存 训练_tensorflow手动指定GPU以及显存大小
  11. python循环语句笔记
  12. 给js对象定义属性的方法
  13. Conflux人物志 | 柠檬树上柠檬果,柠檬树下他和他
  14. udacity 学java_刷完udacity的JavaScript,我想说……
  15. 你知道怎么给客户朋友圈点赞吗?
  16. 腾达无线打印服务器,(原创)腾达PA + PA3电力猫扩展无线信号 路由器LAN口智能扩展...
  17. 弱网测试之NEWT(Network Emulator Toolkit)
  18. SqlServer-STUFF理解基础知识
  19. 1、安装Vmware
  20. Java: 两个虚数的加减法

热门文章

  1. pads铺铜不能开启drp_PADS常见问题全集
  2. 三步集成美图软件背景虚化景深效果【iOS篇】
  3. 计算机毕业设计之android平台的出租打车软件app(源码+系统+mysql数据库+Lw文档)
  4. 契约锁助力大型能源组织“产-运-储-销-交易”文件电子签
  5. PHP实现提交表单发送邮件
  6. Python多线程,大杂烩
  7. JavaScript sort 方法 默认排序顺序为按字母升序-数组常用方法
  8. Weex 初体验(1)
  9. qt5.5实现 记事本程序
  10. 项目经理如何做好项目进度管理