【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)




l STM32通过PWM与定时器方式控制无源蜂鸣器鸣响
l STM32小音乐盒,歌曲进度条图形显示与百分比显示,歌曲切换
l 编程使用STM32 HAL库
l IIC OLED界面编程,动画实现
PWM+TIME驱动无源蜂鸣器,最大的好处就是可以释放主循环,不让程序卡主去播放音乐,这类型操作系统的线程一样,音乐在后台播放,主循环可以随时切换或者关闭音乐或者其它功能操作
视频演示:https://www.bilibili.com/video/BV1M54y1Y72G
一、 基础认识
一切的声音都来源于振动,声音之所以千变万化各不相同,是因为他们的振动各不相同。
所谓的频率就是一秒钟振动几次,如300HZ,就是每秒振动300次
频率对比表

男低音80-320Hz
男中音96-387Hz
男高音122-488Hz
女低音145-580Hz
女高音259-1034Hz
二、音符、音调、节拍
(一) 音符
决定了发音基本单元
1 2 3 4 5 6 7
哆 中 咪 发 字 索 拉 西
(二) 音调
决定了发音的高低
C,D,E,F,G,A,B,调式从小到高排列的
一般大调听上去比较阳光、幸福、祥和,小调则有些悲伤、忧郁、有时甚至是阴暗的感觉在里面。
调号→升降记号标注→调内音级→关系小调(自然小调)
C → 无升降号→ 1 2 3 4 5 6 7 →a小调
G → 1升(#4)→ 5 6 7 1 2 3 #4 →e小调
D → 2升(#4 #1)→2 3 #4 5 6 7 #1 →b小调
A → 3升(#4 #1 #5)→ 6 7 #1 2 3 #4 #5 →#f小调
E → 4升(#4 #1 #5 #2)→ 3 #4 #5 6 7 #1 #2 →#c小调
B → 5升(#4 #1 #5 #2 #6)→ 7 #1 #2 3 #4 #5 #6 →#g小调
#F→ 6升(#4 #1 #5 #2 #6 #3)→ #4 #5 #6 7 #1 #2 #3 →#d小调
#C→ 7升(#4 #1 #5 #2 #6 #3 #7)→ #1 #2 #3 #4 #5 #6 #7 →#a小调
F → 1降(b7)→ 4 5 6 b7 1 2 3 →d小调
bB→ 2降(b7 b3)→ b7 1 2 b3 4 5 6 →g小调
bE→ 3降(b7 b3 b6)→ b3 4 5 b6 b7 1 2 →c小调
bA→ 4降(b7 b3 b6 b2)→ b6 b7 1 b2 b3 4 5 →f小调
bD→ 5降(b7 b3 b6 b2 b5)→ b2 b3 4 b5 b6 b7 1 →bb小调
bG→ 6降(b7 b3 b6 b2 b5 b1)→ b5 b6 b7 b1 b2 b3 4 →be小调
bC→ 7降(b7 b3 b6 b2 b5 b1 b4)→ b1 b2 b3 b4 b5 b6 b7 →ba小调

注意:1# (升半音)和2b (降半音)的频率相同
音调识别:

,数字下面带点,低音
,不带任何点,基本音
,数字上方带点,高音
(三) 节拍
决定了音符的时间长短
1/4拍,16分音符
半拍,8分音符
一拍,4分音符
两拍,
三拍
四拍
组合


每拍多长时间没有固定的说法,
可以参考:
https://wenku.baidu.com/view/78393de517fc700abb68a98271fe910ef12daeba.html
三、 编程思路
定时器与PWM方式,这样可以解放主循环,让程序可以做更多的事情。
l 定时器把握节拍
l PWM把握音调和音符
PWM周期由定时器分频系数和重装载值共同决定,STM32F103C8T6的主频为72MHZ,设置分频为9,所以最大是8MHZ。我们所需要的最小频率是262HZ,我们只需要计算得到的重装载值不大于定时器的重装载最大值(65535)即可。
公式:
PWM周期(HZ) = 主频(HZ) / (重装载值+1)/(分频系数+1)
262=8000000/x
x=30,534<65535
所以每次转换音符时,动态修改重装载值即可实现PWM输出频率的变化,进而控制无源蜂鸣器发声。
定时器将进行ms中断,判断每拍时间是否到达,到达则播放下一拍。
四、参考乐谱
两只老虎

春节序曲:

难忘今宵

视频演示:https://www.bilibili.com/video/BV1M54y1Y72G
五、 个人导航
【B站 | 东小东bili】 https://space.bilibili.com/162091292
【博客园 | 东小东 】https://www.cnblogs.com/dongxiaodong/
【CSDN | 东小东博客】https://blog.csdn.net/dongxiaodongvip
【微信 | 东小东】dongxiaodongwx

【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)的更多相关文章
- STM32—TIMx输出PWM信号驱动MG996R舵机
文章目录 一.前言 二.MG996R舵机简介 三.TIM定时器简介 四.通用定时器TIMx 1.TIMx主要功能 2.TIMx框图 3.计数单元 4.时钟选择 5.输出比较PWM 五.TIM3输出双路 ...
- STM32 定时器详细篇(基于HAL库)
l 16位的向上.向下.向上/向下(中心对齐)计数模式,支持自动重装载 l 16位的预分频器 l 每个定时器都有多个独立通道,每个通道可用于 * 输入捕获 * 输出比较 * PWM输出 * ...
- 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章 STM32H7的TIM定时器基础知识和H ...
- STM32 HAL库学习系列第6篇---定时器TIM 级联配置
应用情景 使用定时器配置编码器模式,发现STM32只有两个定时器是32位,16位的测量值不够用,发现是可以使用两个16位定时器级联为32位的. 我是在使用编码器计数电机转速时使用,但是最终实现的效果不 ...
- STM32 精确输出PWM脉冲数控制电机(转)
STM32 精确输出PWM脉冲数控制电机 发脉冲两种目的1)速度控制2)位置控制 速度控制目的和模拟量一样,没有什么需要关注的地方发送脉冲方式为PWM,速率稳定而且资源占用少 stm32位置控制需要获 ...
- WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)
一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一) 小理论 WS2812B是一种智能控制LED光源,将控制电路 ...
- 马化腾称春节前推出微信小程序
腾讯马化腾在第二届深商大会“互联与时代”论坛上透露,会在2017年春节前推出微信小程序.在谈到“互联网+”.开放生态等话题时,马化腾表示,腾讯从过去5年来,从封闭的环境变成一个开放的环境,变成一个真正 ...
- S5PV210 PWM定时器
第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0.1.2.3有PWM功能,定时器4没有输出引脚.PWM定时器使用PCLK_PSYS作为时钟源,相关知识可 ...
- stm32之Cortex系统定时器(SysTick)
转载自:http://www.21ic.com/app/mcu/201811/781135.htm SysTick时钟,俗称“嘀嗒定时器”,它能按设定的时间产生一次中断.控制工程代码中随处可见形如 ...
随机推荐
- 消息队列之 RabbitMQ【验证通过】
消息队列之 RabbitMQ 预流 关注 22.9 2017.05.06 16:03* 字数 4884 阅读 284691评论 41喜欢 618赞赏 2 关于消息队列,从前年开始断断续续看了些资料, ...
- SPECCPU2006 Spec2006 使用说明
http://www.vimlinux.com/lipeng/author/penglee5.html Spec2006使用说明 五 10 十月 2014 By penglee 工具介绍 SPEC C ...
- Linux进阶之VMware Linux虚拟机运行提示“锁定文件失败 虚拟机开启模块snapshot失败”的解决办法
问题1:VMware Linux虚拟机运行提示"锁定文件失败 虚拟机开启模块snapshot失败"的解决办法 非正常关闭虚拟机(例如开关机过程中关掉VMware等操作),再次启动虚 ...
- C++的构造函数为何不能为虚函数
1. 存储空间角度:虚函数对应一个vtable,vtable存储于对象的内存空间 若构造函数是虚的,则需要通过 vtable来调用,若对象还未实例化,即内存空间还没有,无法找到vtable 2. 使用 ...
- dd命令详解-(转自dkcndk)
Linux-dd命令详解 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换.名称: dd 使用权限: 所有使用者dd 这个指令在 ...
- 物联网技术nbiot与LoRa的区别有哪些
http://zixun.258.com/1870021.html 物联网技术nbiot与LoRa的区别有哪些 万物物联是大趋势,在中国nbiot与LoRa是热门的低功耗广域网技术,这两者作为最典型的 ...
- SUSE12 网卡配置、SSH远程配置、解决CRT密钥交换失败,没有兼容的加密程序
安装好SUSE系统后发现网卡配置与Centos有些差异,多网卡的同学可以参考一下(我的是双网卡) SUSE系统默认第一块网卡自动获取IP,如果是多网卡,需要手动配置,由于我的第一个网卡获取正确无需更改 ...
- sublime使用与配置
目录 Download Markdown转浏览器显示 1. 简单版本 2. 有MD全格式版本 Install Package Control 删除文本空行 1. Ctrl + H 2. Find \s ...
- 源码篇:Flutter Provider的另一面(万字图文+插件)
前言 阅读此文的彦祖,亦菲们,附送一枚Provider模板代码生成插件! 我为啥要写这个插件呢? 此事说来话短,我这不准备写解析Provider源码的文章,肯定要写这框架的使用样例啊,然后再哔哔源码呀 ...
- DDD兴起的原因以及与微服务的关系
DDD为什么能火起来? 我们先不讨论DDD的定义, 先梳理一下DDD火起来的背景, 根据我学习的套路, 永远是为什么为先,再是解决什么问题,是什么东西, 最后如何使用.我们都知道这些年随着设备以及技术 ...