在小哈公众号上,公众号:嵌入式从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小飞哥  ,我是小飞哥,让我快点遇到优秀的你,然后一起变得更加优秀,加油

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

  1. arduino蜂鸣器音乐代码_STM32驱动蜂鸣器演奏音乐“你笑起来真好看”

    有源蜂鸣器与无源蜂鸣器的区别 这里的"源"不是指电源,而是指震荡源. 内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的. 内部没有震荡源的为无源蜂 ...

  2. 32蜂鸣器天空之城代码_32篇SCI/EI论文、多项发明专利、本科生科研导师......这个华工青年,有担当!...

    不爱逛街.不爱打游戏,但醉心科研,发表32篇SCI(<科学引文索引>)/EI(<工程索引>)论文,拥有9项授权发明专利.44项授权实用新型专利,另外60余项专利在受理中--这个 ...

  3. 32蜂鸣器天空之城代码_GitHub宣布已将所有代码永久封存!

    程序员们,激动的消息来了! GitHub最近公布了一组照片,你的代码已经被打包运往北极保存.只要你2月2日以前贡献过的开源代码,现在都已经被埋在北极的冰雪之下,保存一千年.网友炸锅了:我写的bug终于 ...

  4. python蜂鸣器天空之城频率_51单片机蜂鸣器播放音乐天空之城PPT教程+程序+Proteus仿真...

    /*************** author:zc description: 蜂鸣器播放音乐 天空之城 晶振11.0592Mhz 实现方法: while(1)循环中生成音调方波: 定时器1记录每个音 ...

  5. 树莓派蜂鸣器python代码_树莓派+蜂鸣器=整点报时器

    试了下用树莓派外加一个有源蜂鸣器,实现了一个简单的报时功能. 对于有源.无源蜂鸣器的区别,简短介绍下: 一.无源蜂鸣器: 1.无源内部不带震荡源,所以如果用直流信号无法令其鸣叫.必须用2K~5K的方波 ...

  6. STM32精英,战舰版 蜂鸣器播放菊次郎的夏天

    @STM32精英,战舰版 蜂鸣器播放菊次郎的夏天 原理 使用TIM32 PA6产生不同频率,占空比为50%的PWM波,连接到beep的PB8脚.不同的频率代表不同的音符. /* 定义音符表 */ // ...

  7. 树莓派蜂鸣器python代码_树莓派接入无源蜂鸣器

    x淘购得一无源蜂鸣器,附带文档只有Arduino的测试代码. 只有自行探索接线方式以及测试代码. 无源蜂鸣器需要脉宽调制(PWM)信号,查询得知GPIO的物理pin 12有此功能.用杜邦线连接无源蜂鸣 ...

  8. 基于鸿蒙操作系统的爱若琉璃(蜂鸣器版本)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 人工智能编程入门博客 前言 经过一段时间的分享,基于Hi3861开发板的鸿蒙开发已经完成了下面核心板 ...

  9. FPGA(4)晶振与计数器 -- 实现定时器(led定时闪烁、蜂鸣器频率控制(单响)、蜂鸣器报警(频带控制,多响))

    目录 一.FPGA的晶振与定时器 二.定时器(led闪烁.蜂鸣器频率控制) 1.时钟上升沿.复位下降沿触发 2.复位,计数器清零 3.计数满1s时,计数器清零 4-1.led闪烁(每秒) 4-2.蜂鸣 ...

最新文章

  1. 关于机器学习,不可不知的15个概念
  2. labview波形图两个游标,LabVIEW数据可视化:使用波形图表控件逐点显示曲线的方法...
  3. Pandas简明教程:八、Pandas数据透视表
  4. ORACLE基础语法学习
  5. springboot生成包含特定数字_面试必问 —— Spring Boot 是如何实现自动配置的?
  6. ansbile--playbook剧本案例
  7. 作者:​周绮凤(1976-),女,博士,厦门大学自动化系副教授。
  8. OPPO全球营销总裁沈义人宣布卸任,网友:第二天宣布入职小米?
  9. 设计灵感|资讯博客类App界面设计
  10. CSS word-wrap强制换行截断长字符串
  11. 现代计算机内补码是多少进制,二进制:关于10000000如何表示-128的问题
  12. mysql——event定时任务
  13. Win10 Powershell ssh到WSL
  14. Kafka数据迁移MaxCompute最佳实践
  15. 8000401a 错误及解决办法
  16. 二、SSD网络原理及代码讲解
  17. SketchUp插件开发(一)简介
  18. oracle按顺序新增字段,Oracle 修改字段顺序的两种方法
  19. 一个 pcie 插槽损坏的 h77n-wifi(BIOS添加nvme模块实现pcie启动操作系统)
  20. PNP型三极管是不是要发射极接正电压,基极和集电极接地才能工作?能给张图不?

热门文章

  1. Windows 8(Windows Developer Preview)先体验
  2. shutdown 命令参数介绍
  3. Leetcode 100.相同的树
  4. ValueError: Duplicate plugins for name projector解决
  5. tensorflow LSTM:张量变形,5维变4维,4维变5维
  6. windows 7 netsh wlan命令连接wifi
  7. 使用PHP脚本远程部署git项目
  8. L2-008. 最长对称子串
  9. 弹窗样式 idialog,purebox,artdialog4.1.2,jquery.alert.v1.2
  10. tomcat 部署指南