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库)的更多相关文章

  1. STM32—TIMx输出PWM信号驱动MG996R舵机

    文章目录 一.前言 二.MG996R舵机简介 三.TIM定时器简介 四.通用定时器TIMx 1.TIMx主要功能 2.TIMx框图 3.计数单元 4.时钟选择 5.输出比较PWM 五.TIM3输出双路 ...

  2. STM32 定时器详细篇(基于HAL库)

    l  16位的向上.向下.向上/向下(中心对齐)计数模式,支持自动重装载 l  16位的预分频器 l  每个定时器都有多个独立通道,每个通道可用于 *  输入捕获 *  输出比较 *  PWM输出 * ...

  3. 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章       STM32H7的TIM定时器基础知识和H ...

  4. STM32 HAL库学习系列第6篇---定时器TIM 级联配置

    应用情景 使用定时器配置编码器模式,发现STM32只有两个定时器是32位,16位的测量值不够用,发现是可以使用两个16位定时器级联为32位的. 我是在使用编码器计数电机转速时使用,但是最终实现的效果不 ...

  5. STM32 精确输出PWM脉冲数控制电机(转)

    STM32 精确输出PWM脉冲数控制电机 发脉冲两种目的1)速度控制2)位置控制 速度控制目的和模拟量一样,没有什么需要关注的地方发送脉冲方式为PWM,速率稳定而且资源占用少 stm32位置控制需要获 ...

  6. WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)

    一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一)  小理论 WS2812B是一种智能控制LED光源,将控制电路 ...

  7. 马化腾称春节前推出微信小程序

    腾讯马化腾在第二届深商大会“互联与时代”论坛上透露,会在2017年春节前推出微信小程序.在谈到“互联网+”.开放生态等话题时,马化腾表示,腾讯从过去5年来,从封闭的环境变成一个开放的环境,变成一个真正 ...

  8. S5PV210 PWM定时器

    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0.1.2.3有PWM功能,定时器4没有输出引脚.PWM定时器使用PCLK_PSYS作为时钟源,相关知识可 ...

  9. stm32之Cortex系统定时器(SysTick)

    转载自:http://www.21ic.com/app/mcu/201811/781135.htm   SysTick时钟,俗称“嘀嗒定时器”,它能按设定的时间产生一次中断.控制工程代码中随处可见形如 ...

随机推荐

  1. SQLFlow的几种关系

    SQLFlow的几种关系 SQLFlow可以用来分析各种数据对象之间的依赖关系,其中包含了fdd, fdr, frd, join 四种关系 fdd:表示数据从源列到目标列的关系 frd:表示结果集返回 ...

  2. Redis泛泛而谈(详细2W字)

    本文适合于刚接触redis的,文章内容比较基础,大佬请绕道. 一.NoSQL入门和概述 Ⅰ-入门概述 1.为什么用NoSQL 1)单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单 ...

  3. 国内Ubuntu16.04下载地址<其他系统可返回最首项>

     ubuntu16.04下载地址: 中科大源       http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开源镜像站       http:/ ...

  4. 攻防世界(三)Web_php_unserialize

    攻防世界系列:Web_php_unserialize 0x01.代码审计 1.类Demo中struct().destruct()函数分别在代码执行开始和结束时调用.而wakeup函数会在代码执行过程中 ...

  5. 测试 USB 存储设备读写性能(Mb/s),平均读写速度等

    1.将U盘(USB3.0)插入被测试机器,假定识别设备为sdc2.创建vfat文件系统分区/dev/sdb1分区容量大于30GBumount /dev/sdc1mkfs -t vfat /dev/sd ...

  6. CentOS 6.5新增加硬盘挂载并实现开机自动挂载

    Centos7.x请参考:https://www.cnblogs.com/himismad/p/7851548.html 在内网主机Centos 6.5新增一个50G硬盘 (搭建在CAS服务器,直接新 ...

  7. Chrome版本与chromedriver版本映射表

    chromedriver版本 支持的Chrome版本 v2.36 v64-66 v2.35 v62-64 v2.34 v61-63 v2.33 v60-62 v2.32 v59-61 v2.31 v5 ...

  8. Synchronize 和 volatile 的区别

    1. 在应用层面来讲 a. volatile是线程同步的轻量级实现,所以volatile的性能要比synchronize好: volatile只能用于修饰变量,synchronize可以用于修饰方法. ...

  9. 一:windows10开启虚拟化服务(也可用于部署docker提前准备)

    查看虚拟化已开启: 如果未启用,则需要添加虚拟化功能:控制面板 -> 启用或关闭Windows功能 选择Hyper-V的所有功能,确定: 系统会自动搜索并安装功能.安装完毕即可. 完结,撒花~~

  10. CVD-ALD前驱体材料

    CVD-ALD前驱体材料 ALD前驱体源瓶特点是什么   ALD前驱体源瓶(起泡器)用于固态.液态及气态超纯物料类的封装,涉及微正压.常压.中低压的危险化学品,对源瓶的安全性和洁净度提出严苛的要求. ...