嘟嘟_eKNI1E · 2021年12月24日

【XR806开发板试用】 PWM播放<<铃儿响叮当>>

PWM播放<<铃儿响叮当>>

参考OpenHarmony LYEVK-3861开发板播放《蜜雪冰城》
收到XR806开发板了,之前在公众号看到有人用开发板播放蜜雪冰城,快到圣诞节了,今天试下播放<<铃儿响叮当>>。

环境搭建

  1. WSL2 Ubuntu 20.04 LTS开发环境搭建

感觉和正常的Ubuntu环境配置没啥区别,区别有以下几个

a.在 安装必要的库和工具的时候把libc6-dev-amd64替换为libc6-dev就成,这个方法参考github上边wsl给的遇到E: Unable to locate package libc6-dev-amd64的解决方案

b.我没装LLVM也可以烧录

  1. XR806开发板、无源蜂鸣器

    开发

    曲谱

    微信截图_20211224153024.png

    流程

    流程图.png

代码编写

cd device/xradio/xr806/ohosdemo
mkdir beeperMusic

目录如下

.
├── BUILD.gn
├── beeperMusic
│   ├── BUILD.gn
│   └── src
│       └── main.c
├── hello_demo
├── iot_peripheral
└── wlan_demo

源代码

//main.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "kernel/os/os.h"
#include "iot_pwm.h"
#include "ohos_init.h"

static OS_Thread_t g_main_thread;
// 音符对应的频率
static const uint16_t g_tuneFreqs[] = {523,587,659,698,784,880,988};

// 曲谱音符
static const uint8_t g_scoreNotes[] = {
  3,3,3, 3,3,3, 3,5,1,2, 3, 4,4,4, 4,4,3,3,
  3,2,2,1, 2,5,
  3,3,3, 3,3,3, 3,5,1,2, 3, 4,4,4, 4,4,3,3,
  5,5,4,2, 1,
};

// 曲谱时值
static const uint8_t g_scoreDurations[] = {
  4,4,8, 4,4,8, 4,4,4,4, 16, 4,4,4, 4,4,4,8,
  4,4,4,4, 8,8,
  4,4,8, 4,4,8, 4,4,4,4, 16, 4,4,4, 4,4,4,8,
  4,4,4,4, 16,
};


static void BeeperMusicTask(const char *arg)
{
    (void)arg;
    printf("BeeperMusicTask start!\r\n");
    IoTPwmInit(0);
    unsigned int pwm_duty_ratio = 30;
    for (size_t i = 0; i < sizeof(g_scoreNotes)/sizeof(g_scoreNotes[0]); i++) {
        unsigned int pwm_delay_cnt = 0;
        uint32_t tune = g_scoreNotes[i]; // 音符
        uint16_t freqDivisor = g_tuneFreqs[tune];
        uint32_t tuneInterval = g_scoreDurations[i] * 10; // 音符时间
        printf("%d %d %d %d\r\n", tune,freqDivisor, pwm_duty_ratio,tuneInterval);
        IoTPwmStart(0,30,freqDivisor);
        OS_MSleep(tuneInterval*5);
        IoTPwmStop(0);
    }
    IoTPwmDeinit(0);
}

void MusicTestMain(void)
{
    printf("Music Test Start\n");  
    if (OS_ThreadCreate(&g_main_thread, "MainThread", BeeperMusicTask, NULL,
                OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK) {
        printf("[ERR] Create MainThread Failed\n");
    }
}

SYS_RUN(MusicTestMain);

beeperMusic目录的BUILD.gn

import("//device/xradio/xr806/liteos_m/config.gni")

static_library("app_music") {
   configs = []

   sources = [
      "src/main.c",
   ]

   cflags = board_cflags

   include_dirs = board_include_dirs
   include_dirs += [
      "//kernel/liteos_m/kernel/arch/include",
      "include",
      "//base/iot_hardware/peripheral/interfaces/kits",
   ]
}

主目录BUILD.gn

group("ohosdemo") {
    deps = [
        #"hello_demo:app_hello",
        #"iot_peripheral:app_peripheral",
        #"wlan_demo:app_WlanTest",
        "beeperMusic:app_music"
    ]
}

效果

https://www.bilibili.com/vide...

MobaXterm显示问题解决

参考

1 Setting->Configuration->Terminal->Terminal features 取消Paste using right-click

2 终端内右键选择"Change Terminal Settings"

3勾选"Implicit CR in every LF"

缺点是每次关了终端,配置就丢了,要重新配

推荐阅读
关注数
13823
内容数
139
全志XR806开发板相关的知识介绍以及应用专栏。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息