【春节歌曲回味 | 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无源蜂鸣器定时器_stm32定时器实现PWM输出控制无源蜂鸣器(HAL)
(一)PWM概念和原理 脉冲宽度调制(PWM),是英文"Pulse Width Modulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 ...
- stm32无源蜂鸣器定时器_STM32无源蜂鸣器播放音乐
1.STM32产生PWM波驱动无源蜂鸣器使其发声 1)查看原理图,找到对应引脚(我这里时PA1) 2)打开CubeMax,输入自己芯片的类型确定后,配置好系统时钟RCC,我这里是80Mhz,找到相应引 ...
- 【STM32H7教程】第63章 STM32H7的高分辨率定时器HRTIM基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第63章 STM32H7的高分辨率定时器HRTIM ...
- 高级定时器的各种框图和HAL库重要结构
高级定时器的各种框图和HAL库重要结构 死区控制其实就是让高电平延迟输出
- STM32机器人控制开发教程No.1驱动电机(基于HAL库)
01 前言 本教程使用的机器人控制板拥有4个带编码器的电机接口,4个舵机接口,串口通信接口.SWD下载调试接口.航模遥控接口.USB5V输出接口以及方便与树莓派直接连接的40PIN接口等,板载资源丰富 ...
- STM32—TIM3输出PWM信号驱动MG996R舵机(按键控制)
文章目录 一.前言 二.MG996R舵机简介 三.通用定时器TIMx 四.TIM3输出PWM信号代码详解 上传代码 一.前言 利用STM32的TIM3的通道1输出PWM信号,驱动MG996R舵机,按键 ...
- (学习)基于STM32的PWM控制直流电机转速(CubeMX+HAL库)
使用到的各元件: 1.12V电源一个 2.单片机:STM32F103C8T6 3.直流电机4个 4.电机驱动模块:L298N 5.降压模块两个 6:杜邦线若干 对于直流电机的转动控制如下表 两边电平 ...
- 基于STM32的简易示波器项目(含代码)——HAL库
前言:本文基于STM32的简易示波器项目,示波器作为嵌入式开发中必不可少的器件,其使用方式和工作原理是必须被掌握的.巧妙利用STM32可以实现媲美度非常高的示波器,本文中的简易示波器主 ...
- PWM波启动无源蜂鸣器——基于STM32MP157A
一:原理解析 在编写代码前,首先要明白,PWM方波是怎么产生的. 当定时器启动后,自动重载计数器中的值会自动加载到递减计数器中.递减计数器在CK_CNT时钟驱动下进行工作.每过一个时钟周期,递减计数器 ...
最新文章
- 【python教程入门学习】PyCharm 如何使用
- python基础练习(一)
- ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)
- MapReduce Java API-多输入路径方式
- Android学习—补间动画(渐变动画)
- 腾讯牌番茄,新鲜上市!
- php识别地址,实现地址自动识别实例(PHP)
- 【计算机视觉】基于OpenCV的人脸识别
- Java类class cast()方法及示例
- jpa mysql 配置文件_Spring+JPA+MySQL的配置文件
- 漂浮式半潜风机(二)环境荷载
- 16种系统测试方法概念+测试要点
- 极客时间java高级(第二次课程)
- 美丽的秋天秋天是多么美丽呀!
- python程序设计论文_浅谈初中Python程序设计教学的实践与体会
- OTT发展背后的融合通讯
- 费马小定理、欧拉定理与扩展欧拉定理(含证明)
- RTOS与linux区别
- python蜂鸣器天空之城频率_用python来一首钢琴solo天空之城
- 【基于obs插件-10】-鼠标,键盘,游戏柄展示插件
热门文章
- HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码)
- python自动化验证部署_Python selenium自动化测试环境安装部署
- 关于songtaste网页版在线播放器不能使用的解决法方
- http://www.cnblogs.com/end/archive/2011/04/12/2013805.html
- 《超级时间整理术——每天多出一小时》读书笔记
- 打开html自动修改URL,通过html选择更改URL
- nginx reload命令_nginx:Failed to start nginx.service:unit not found
- 【C语言数组】一维数组,二维数组详解,数组传参,变长数组,这篇文章让你更全面的认识数组。
- yocto(七)——添加layer、添加内核模块、修改源码、制作补丁
- 老男孩Day2作业:编写购物车程序