第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃

32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃

时间:2019-06-06 18:41:14

相关推荐

32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃

在小哈公众号上,公众号:嵌入式从0到1,小哈用鸿蒙平台做了个播放爱若琉璃歌曲的文章,写的非常详细,视频做的也非常好,伙伴们可以去看看,哈哈,说了这么多,就是为了抄点素材。。。鉴于stm32f103c8t6(便宜好用)平台应该是比较普遍的了,做个32版本的,嘿嘿 这次废话有点多,上干货!

1、音乐的音调(音符)和节拍(摘自小哈公众号) 要想实现一个乐谱,我们只要确定“音符(音调)”和“节拍”即可。音调表示一个音符响的频率,节拍表示一个音符该唱多长的时间。

音符(音调)的确定

一般钢琴键盘有88个按键:

钢琴上88按键的频率如下表所示:

比如中央C音的标准频率就是261,在上面表格中就是:音名为C4的按键。程序中定义一个音频的数组:

在系统时钟为40MHZ的情况下,输出的脉冲的最低频率为:40M / 65535 (下面有计算方法) ,即 40 * 1000 * 1000 / 65535 = 610.3608758678569‬,所以在系统时钟40MHZ下,只能产生频率610Hz以上的音,即D#5及以上的按键音,所以我们选择C6那组按键的音作为主音。所以我们预定义正常音的C6对应数组的起始索引为63。要想让蜂鸣器发出某个音只需要让PWM输出对应频率的脉冲即可。网上找个《爱若琉璃》的简谱,然后按照对应关系创建如下乐谱数组:

节拍的确定

节拍就是一个音持续的时间,这里就是PWM脉冲持续的时间,那么持续的时间如何确定呢?

基础知识算是写完(抄完)了,那么怎么在程序上实现呢,王者荣耀达摩常说的,公式才是永恒的真理,现在理论有了,来,实现它,干!

2、此次使用的可视化配置工具cubemx,不得不说,基本的配置,用这玩意还是非常省事(懒)的,由于我的蜂鸣器控制引脚接在了PB3上,也即是TIM2-CH2的通道上,配置PB3为TIM2-CH2模式

接下来是最重要的时钟配置,宛若人的心脏般,芯片工作的基本,这里选择的也是配置为了40MHZ,为什么是40MHZ,懒!配置40MHZ剩下的就直接搬运小哈的,无非是换个平台啦。然后配置定时器2的一些参数,和通道2配置为PWM模式,分频系数选择不分频,周期设为0,这里只是初始值,即使设置了,也没关系的,后面播放音符的时候,会修改的咯,所以这个不用担心具体设置什么值这里可以设置我们代码生成时候的一些设置,第一项是只添加需要的文件,用到哪些库文件添加那些,我们可以选择用到的文件添加,第二处是为每个模块生成单独的.c,.h文件,建议勾选,否则所有的东西都在main函数里面,代码可读性会比较差,小飞哥是经常勾选的。

3、代码解读

至此我们的配置就完成了,生成代码就可以啦!TIM2的初始化配置,和我们cubemx配置上一样的咯,不分频,周期为0,占空比为0,这些参数后面会用到,在进行修改这里可以看到,配置PB3引脚复用功能

在播放音乐的时候,我们主要通过不断修改频率来实现,PWM占空比设置为50%,占空比通过设置CCR寄存器的值来控制

PWM频率计算:

Fpwm=Ftimclk/(arr+1)*(psc+1)

arr:周期

psc:预分频值

比如:

Ftimclk = 40MHZ

arr=399

psc=0

Fpwm = 40/40=100000HZ

TIM2->CCR2 = 199

占空比为50%

代码实现:

大白,小飞哥给你放首音乐,嗨起来,哈哈,连接会在下面评论区,欢迎小伙伴们动手,干!

欢迎大家关注 Embeded小飞哥 ,我是小飞哥,让我快点遇到优秀的你,然后一起变得更加优秀,加油

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。