OpenHarmony Neptune开发板PWM驱动 播放《小星星》
想了解更多内容,板P播放请访问:
和华为官方合作共建的驱动鸿蒙技术社区
https://harmonyos.51cto.com
本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的小星星PWM接口 驱动蜂鸣器 播放音乐。
一、板P播放环境准备
1.1 开发环境、驱动编译环境搭建,小星星参考官方文档,板P播放参考链接如下:
Neptune开发板的驱动环境搭建及使用
1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取:
git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git二、材料准备
1、小星星Neptune HarmonyOS物联网 IOT模组
2、板P播放无源蜂鸣器模块
3、驱动杜邦线若干
三、小星星相关基础知识介绍
鸿蒙系统IoT硬件子系统提供了一些外设相关的板P播放接口,目录位于:
base/iot_hardware/peripheral/interfaces/kitsPWM相关接口,驱动接口头文件为iot_pwm.h,小星星其中用PWM输出方波的API:
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。
四、音符-频率对应关系

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

六、简谱说明------参考许思维老师用鸿蒙OS在蜂鸣器上播放一曲《两只老虎》
七、编写代码
有了以上知识,我们就可以编写代码了,关键代码如下:
#define PWM_DUTY 128 static const uint16_t g_tuneFreqs[] = { 523,587,659,698,784,880,988}; // 曲谱音符 static const uint8_t g_scoreNotes[] = { 1,1,5,5, 6,6,5, 4,4,3,3, 2,2,1, 5,5,4,4, 3,3,2, 5,5,4,4, 3,3,2, 1,1,5,5, 6,6,5, 4,4,3,3, 2,2,1, }; // 曲谱时值 static const uint8_t g_scoreDurations[] = { 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, }; static void *BeeperMusicTask(const char *arg) { (void)arg; printf("BeeperMusicTask start!\r\n"); for (size_t i = 0; i < sizeof(g_scoreNotes)/sizeof(g_scoreNotes[0]); i++) { uint32_t tune = g_scoreNotes[i]; // 音符 uint16_t freqDivisor = g_tuneFreqs[tune]; uint32_t tuneInterval = g_scoreDurations[i] * (1000 *100); // 音符时间 printf("%d %d %d %d\r\n", tune,freqDivisor, PWM_DUTY,tuneInterval); IoTPwmStart(0,PWM_DUTY,freqDivisor); tls_os_time_delay(tuneInterval/1000); IoTPwmStop(0); } return NULL; }八、功能展示
以上都完成之后,就可以编译、烧录,并测试最后的完成效果。
文章相关附件可以点击下面的原文链接前往下载:
https://harmonyos.51cto.com/resource/1091
想了解更多内容,请访问:
和华为官方合作共建的源码库鸿蒙技术社区
https://harmonyos.51cto.com