手把手从0到1教你做STM32+FreeRTOS智能家居--第3篇之蜂鸣器播放音乐

一、硬件设计

本项目用到的是一个无源蜂鸣器的模块,接到了STM32的PB7引脚,对应的是定时器4的通道2---TIM4_CH2。

蜂鸣器利用PWM输出播放音乐的相关原理,可以参考以下文章STM32CubeMx使用教程(五)—— 使用PWM控制蜂鸣器演唱孤勇者_stm32控制蜂鸣器唱歌-优快云博客,在软件部分我将贴出相关的公式,以及具体代码的实现。

二、软件设计

我们通过调整来PSC的值,来修改蜂鸣器输出的频率,从而输出不同的音符。来看一个简单的例子:

根据周期输出的公式:Tout= ((arr+1)*(psc+1))/Tclk, 频率为 F=1/Tout。

如果我们要输出一个低音DO(262hz),Tclk对应的是我们单片机的时钟总线的频率,我们的ARR值配置为1000,那么PSC就该为(72000/262),此时的Tout约为0.0038,而频率=1/周期,所以此时蜂鸣器输出的频率就约为262Hz。接下来看下面Beep.h中这些宏定义就能够明白它们的由来了。

#ifndef __BEEP_H
#define __BEEP_H	 

#include "main.h"


#define  proport          72000 	//Tclk/(arr+1)=72000000/(1000)
 
//根据Tout= ((arr+1)*(psc+1))/Tclk推出psc值就是本句define定义的值,Tout为音调频率131Hz的倒数,Tclk=72MHz                                                
#define  L1       ((proport/262)-1)//低调 do 的频率
#define  L2       ((proport/296)-1)//低调 re 的频率
#define  L3       ((proport/330)-1)//低调 mi 的频率
#define  L4       ((proport/349)-1)//低调 fa 的频率
#define  L5       ((proport/392)-1)//低调 sol 的频率
#define  L6       ((proport/440)-1)//低调 la 的频率
#define  L7       ((proport/494)-1)//低调 si 的频率
                                        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值