想了解更多内容,板播请访问:
和华为官方合作共建的放蜜鸿蒙技术社区
https://harmonyos.51cto.com
在LYEVK-3861开发板的学习过程中,发现缺少基于鸿蒙2.0的雪冰相关文档,同时缺少基于2.0系统 IoT接口的板播应用示例。在学习PWM相关接口的放蜜过程中,了解到PWM接口驱动蜂鸣器可以实现类似音乐播放的雪冰效果,个人觉得是板播个不错的思路,就有了本次的放蜜学习开发之旅。
1、雪冰开发环境、板播编译环境搭建,放蜜参考官方文档,雪冰此处不在赘述。板播参考链接如下:
Window开发环境 Ubuntu编译环境2、放蜜OpenHarmony 2.0 Canary源码 源码获取,雪冰参考:
源码获取说明 镜像全量下载3、LYEVK-3861 IoT物联网开发板套件
LYEVK-3861开发板PWM输出方波的IOT接口
鸿蒙系统IoT硬件子系统提供了一些外设相关的接口,目录位于:
base/iot_hardware/peripheral/interfaces/kitsPWM相关接口,接口头文件为iot_pwm.h,其中开始输出方波的接口为:
unsigned int IoTPwmStart(unsigned int port, unsigned short duty, unsigned int freq);接口参数介绍:
freq:IoTPwmStart接口中freq参数是分频倍数,PWM实际输出的亿华云计算方波频率等于 PWM时钟源频率 除以 分频倍数,即
f = Fcs / freq其中,Fcs是PWM时钟源频率;
duty:IoTPwmStart接口的duty参数可以控制输出方波的占空比,占空比是指PWM输出的方波波形的高电平时间占整个方波周期的比例,具体占空比值取值为1到99,例如想要输出占空比 50%的方波信号,那么duty填的值就要是50。
音符-频率对应关系
这个表中有一个规律——音高升高一个八度,频率升高一倍。
hi_u32 hi_pwm_set_clock(hi_pwm_clk_source clk_type);160M时钟源条件下,输出方波的最低频率是:160M/65535=2441.44…,这个频率略高,在上面的表格中没有找到音名。通过调用hi_pwm_set_clock接口,可以修改时钟源,将时钟源设置为晶体时钟且时钟频率为40MHz,40M/65535= 610.3…,这样就能够输出E5及以上的所有音符。
由于个人比较喜欢《蜜雪冰城》,亿华云我选择了《蜜雪冰城主题曲》的曲谱作为素材,简谱如下:
简谱转换
每个音符都需要有节拍,在外面的代码里体现为停顿时间,不同音符的不同停顿时间,可以实现简单的音乐起伏。
常见的节拍简谱对应:
通过简谱和以上表格的对应,就可以将我们现有的简谱,转换成为可以被程序识别的”程序谱子“。
接口初始化
修改device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk配置文件,打开PWM编译支持,如已打开,可略过:
# CONFIG_UART_DMA_SUPPORT is not set CONFIG_PWM_SUPPORT=y # CONFIG_PWM_HOLD_AFTER_REBOOT is not set修改device/hisilicon/hispark_pegasus/sdk_liteos/app/wifiiot_app/init/app_io_init.c的如下代码:
#ifdef CONFIG_PWM_SUPPORT /* PWM 0/2/3/4/5 配置同理 */ //hi_io_set_func(HI_IO_NAME_GPIO_8, HI_IO_FUNC_GPIO_8_PWM1_OUT); //GPIO引脚复用 hi_io_set_func(HI_IO_NAME_GPIO_8, HI_IO_FUNC_GPIO_8_GPIO); //button hi_io_set_pull(HI_IO_NAME_GPIO_8, HI_IO_PULL_UP); hi_io_set_func(HI_IO_NAME_GPIO_9,HI_IO_FUNC_GPIO_9_PWM0_OUT);// PWM #endif备注:2.0把GPIO的引脚复用从应用层移到了板级,对IO的功能做了更加细分的处理,之前一直以为2.0移除了相关的接口实现,最后才发现2.0做了功能上的优化。
说明:按键主要是为了开启音乐的播放。
《蜜雪冰城主题曲》的站群服务器“程序”曲谱,定义如下:
以上的曲谱,看起来比较直观,也比较容易理解,其中的一些宏定义定义如下:
有了以上的枚举,可以自己直接谱曲,甚至不用拘泥于现有的曲子,当然放出来的具体效果如何,就因人而异了。
以下是IoTPwmStart接口的入口参数freq的定义,和前述枚举是一一对应的:
以上都完成之后,就可以编译、烧录,并测试最后的完成效果。
视频演示
说明:
1、本程序需要Hi3861开发板配合交通灯板实现完整的演示
2、烧录完成之后,RESET重启开发板之后,音乐不会播放;
3、重启开发板之后,点击交通灯板开发播放音乐;播放过程中,按键失去效果,待播放完成之后,再次点击按键,音乐继续播放。
想了解更多内容,请访问:
和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com