STM32F407学习笔记(一) CubeMX、CubeIDE配置按键控制PWM波使蜂鸣器播放音乐

这篇博客介绍了如何利用STM32F407的通用定时器TIM13生成PWM波,通过设置ARR和CCR寄存器控制PWM频率和占空比,从而控制蜂鸣器播放音乐。博主详细阐述了PWM生成原理,并通过CubeMX配置定时器和GPIO,接着在CubeIDE中编写代码实现《天空之城》的音乐播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PWM生成及歌曲实现原理

STM32F407有两类定时器:基础定时器和通用定时器(关于定时器可以看这里)。

通用定时器具有生成PWM波的功能,因此本例中使用通用定时器中的TIM13生成PWM波。

在定时器中时基单元有三种寄存器:计数寄存器(CNT)、 预分频寄存器(PSC)、自动重载寄存器(ARR)。

PWM波生成,通过设置ARR寄存器和CCR寄存器的值,在计数器的值CNT变化过程中,输出PWM波。PWM波的频率由ARR寄存器决定,占空比由CCR寄存器决定。

单片机输出高低不同的脉冲信号来控制蜂鸣器发音,要想产生音频脉冲信号,需要算出某音频的周期(1/频率)关键是每个音阶对应频率的方波如何求.在歌曲中,音调就是PWM波的频率(ARR),音量是其占空比(CCR),节拍通过delay延时函数实现。

f P W M = f 时 钟 频 率 ( P S C + 1 ) ( A R R + 1 ) f_{PWM}=\frac{f_{时钟频率}}{(PSC+1)(ARR+1)} fPWM=(PSC+1)(ARR+1)

STM32中,可以使用PWM输出控制蜂鸣器播放音乐PWM(脉冲宽度调制)是种通过改变脉冲的宽度来控制电平的技术。通过改变PWM的频率和占空比,可以产生不同的音调和音乐效果。 在你提供的代码中,可以看到以下几个函数用于控制蜂鸣器发声: - `TIM_SetTIM1Compare1`函数用于设置TIM1通道2的比较值,即脉冲的宽度。 - `TIM_SetTIM1Autoreload`函数用于设置TIM1的自动重装载值,即PWM的频率。 - `buzzerQuiet`函数用于停止发声,将脉冲宽度设置为0。 - `buzzerOpen`函数用于开始发声,使能PWM输出。 - `buzzerSound`函数用于控制蜂鸣器发声模块,根据输入的频率和音量级别来设置脉冲宽度和频率。 通过调用这些函数,你可以实现在STM32使用PWM输出控制蜂鸣器播放音乐。具体的实现细节可以参考你提供的代码和STM32学习笔记中的PWM介绍和应用实例。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *2* [基于STM32制作的音乐播放器,用PWM控制蜂鸣器](https://blog.youkuaiyun.com/weixin_69250798/article/details/125709863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32-PWM驱动无源蜂鸣器播放音乐(附网盘代码)](https://blog.youkuaiyun.com/MOS_JBET/article/details/130051643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值