IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南 -> 正文阅读

[系统运维]HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南

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.5
    34052, // 2 1174.7
    30338, // 3 1318.5
    28635, // 4 1396.4
    25511, // 5 1568
    22728, // 6 1760
    20249, // 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征文大赛”活动】
活动页面链接.

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章           查看所有文章
加:2021-07-22 14:38:04  更:2021-07-22 14:41:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:46:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码