OpenHarmony Neptune开发板PWM驱动 播放《小星星》

开发 前端
本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的PWM接口 驱动蜂鸣器 播放音乐。

[[422879]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的PWM接口 驱动蜂鸣器 播放音乐。

一、环境准备

1.1 开发环境、编译环境搭建,参考官方文档,参考链接如下:

Neptune开发板的环境搭建及使用

1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取:

  1. git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git 

二、材料准备

1、Neptune HarmonyOS物联网 IOT模组

2、无源蜂鸣器模块

3、杜邦线若干

三、相关基础知识介绍

鸿蒙系统IoT硬件子系统提供了一些外设相关的接口,目录位于:

  1. base/iot_hardware/peripheral/interfaces/kits 

PWM相关接口,接口头文件为iot_pwm.h,其中用PWM输出方波的API:

  1. unsigned int IoTPwmStart(unsigned int port, unsigned short duty, unsigned int freq); 

接口参数介绍:(这里与HI3861不相同,其适配是使用W800 SDK中PWM接口,若需要了解可自行查看)

freq:IoTPwmStart接口中freq参数就是PWM实际输出的方波频率(频率范围0~65535)

duty:IoTPwmStart接口的duty参数是控制输出方波的占空比的参数,占空比是指PWM输出的方波波形的高电平时间占整个方波周期的比例,具体占空比值是 duty /256的比值,,例如想要输出占空比50%的方波信号,那么duty填的值就要是128。

四、音符-频率对应关系

OpenHarmony Neptune开发板PWM驱动 播放《小星星》-鸿蒙HarmonyOS技术社区

五、准备曲谱

为了代码实现起来简单,我选择了《小星星》的曲谱作为素材,在简谱网找到了简谱:

OpenHarmony Neptune开发板PWM驱动 播放《小星星》-鸿蒙HarmonyOS技术社区

六、简谱说明------参考许思维老师用鸿蒙OS在蜂鸣器上播放一曲《两只老虎》

七、编写代码

有了以上知识,我们就可以编写代码了,关键代码如下:

  1. #define PWM_DUTY 128 
  2. static const uint16_t g_tuneFreqs[] = { 523,587,659,698,784,880,988}; 
  3.  
  4. // 曲谱音符 
  5. static const uint8_t g_scoreNotes[] = { 
  6.   1,1,5,5, 6,6,5, 4,4,3,3,  2,2,1, 5,5,4,4, 3,3,2, 
  7.   5,5,4,4, 3,3,2, 1,1,5,5,  6,6,5, 4,4,3,3, 2,2,1, 
  8. }; 
  9.  
  10. // 曲谱时值 
  11. static const uint8_t g_scoreDurations[] = { 
  12.   4,4,4,4,  4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 
  13.   4,4,4,4,  4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 
  14. }; 
  15.  
  16. static void *BeeperMusicTask(const char *arg) 
  17.     (void)arg; 
  18.     printf("BeeperMusicTask start!\r\n"); 
  19.  
  20.     for (size_t i = 0; i < sizeof(g_scoreNotes)/sizeof(g_scoreNotes[0]); i++) { 
  21.         uint32_t tune = g_scoreNotes[i]; // 音符 
  22.         uint16_t freqDivisor = g_tuneFreqs[tune]; 
  23.         uint32_t tuneInterval = g_scoreDurations[i] * (1000 *100); // 音符时间 
  24.         printf("%d %d %d %d\r\n", tune,freqDivisor, PWM_DUTY,tuneInterval); 
  25.         IoTPwmStart(0,PWM_DUTY,freqDivisor); 
  26.         tls_os_time_delay(tuneInterval/1000); 
  27.         IoTPwmStop(0); 
  28.     } 
  29.     return NULL

八、功能展示

​ 以上都完成之后,就可以编译、烧录,并测试最后的完成效果。

文章相关附件可以点击下面的原文链接前往下载:

https://harmonyos.51cto.com/resource/1091

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-09-13 10:03:35

鸿蒙HarmonyOS应用

2021-09-08 15:44:56

鸿蒙HarmonyOS应用

2021-10-11 14:14:42

鸿蒙HarmonyOS应用

2011-08-25 18:04:33

iPad应用Little Star亲子应用

2022-04-01 15:54:01

DHCP网络协议开发板

2021-05-10 09:40:29

鸿蒙HarmonyOS应用

2022-01-07 21:11:27

鸿蒙HarmonyOS应用

2022-10-14 15:55:24

环境搭建鸿蒙

2021-12-16 15:14:54

鸿蒙HarmonyOS应用

2021-08-17 14:40:43

鸿蒙HarmonyOS应用

2023-09-14 15:49:42

PWM鸿蒙

2023-03-02 20:52:11

​ PWM脉冲宽度调制

2020-12-29 09:59:01

鸿蒙HarmonyOS智能家居

2022-03-03 19:21:50

Harmony鸿蒙操作系统

2021-06-25 15:32:13

鸿蒙HarmonyOS应用

2022-02-24 16:39:41

OpenHarmonNiobe开发鸿蒙

2020-12-16 10:05:48

鸿蒙开发板Onenet平台

2022-08-19 10:54:47

操作系统鸿蒙

2022-04-14 11:44:25

LiteOS线程鸿蒙
点赞
收藏

51CTO技术栈公众号