打印
[STM32F4]

stm32F4播放简单音乐

[复制链接]
614|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-6-25 12:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一:项目软件背景
二:具体实现

使用STM32定时器产生PWM波形,通过该波形驱动无源蜂鸣器,调整PWM波的频率即可改变蜂鸣器的发声频率。
2.1新建工程模板
2.2 初始化gpio引脚和和tim定时器中断的应用
2.2 STM32按照简谱输入对应频率的PWM波即可。
2.2.1 独立按键设置

2.2.1.2延迟函数设立
2.2.2 调用编写简单音乐

2.2.3在原有基础上再添加几首乐曲



2.2.4效果

2.2.5反思与总结
三:总结提升

Keil5是一款由Keil公司推出的嵌入式开发工具,专为嵌入式系统开发者所设计。它以其强大的功能和丰富的特性,在嵌入式系统开发领域占据了重要的地位。以下是关于Keil5软件的详细介绍:

一、版本与特点

Keil5包括了MDK、DS-MDK和MDK-Lite三个版本,其中MDK是最全面的版本,支持最多的器件和功能。Keil5提供了一个完整的开发环境,包括编辑器、编译器、调试器等。它支持多种处理器架构,如ARM、Cortex-M、Cortex-A、8051等。

二、功能特点

嵌入式开发支持:Keil5 MDK专门为嵌入式系统开发设计,提供了广泛的单片机和微处理器支持。
综合工具链:Keil5 MDK集成了编译器、调试器、仿真器和系统分析等工具,提供全面的开发环境。
高效的代码优化:Keil5 MDK的编译器具有优秀的代码优化能力,可生成高效、紧凑的目标代码。
直观的用户界面:Keil5 MDK提供了直观、易用的用户界面,简化了开发流程,提高了开发效率。



2.1新建工程模板右键user选中ADDNEW ltem



然后可以在这里添加.c和.h文件



然后点击三个物品堆进行添加




再点击魔术棒确定是否添加成功



2.2 初始化gpio引脚和和tim定时器中断的应用

首先我们看一下这块f4开发板结构图




所以门要先打开时钟初始化引脚



然后我们在初始化定义tim计时器以及打开中断




初始化引脚



2.2 STM32按照简谱输入对应频率的PWM波即可

PWM信号保持高电平的时间百分比称为占空比。如果信号始终为高电平,则它处于100%占空比,如果它始终处于低电平,则占空比为0%。如图1所示,T1为占空比,T为一个PWM周期。播放声音我们让占空比为50%即可,主要是调整周期T



对tim中断周期进行设置



2.2.1 独立按键设置




独立按键原理图



2.2.1.2延迟函数设立

void play1() {  static uint16_t i = 0;  static uint16_t delay = 0;    //delay等于0表示开始播放这个音符    if(delay == 0)      PWM_SetFrequency(music1[0]); //播放该音符    //计算该音符已经播放的时间    delay+=10;    //如果该音符播放时间达到设置的时间    if(delay>=music1[1])    {      //清空统计时间的变量      delay = 0;      //播放下一个音符      i++;      if(i>4)    //乐曲一共有4个音符        i = 0;    } }

2.23编写

简答音乐



为了方便首先我们宏定义音符和时间一遍写程序



写一首简单歌曲两只老虎为例子



主函数运行2.2.3效果按下按键音乐播放再次按下音乐暂停一按一开一停



在原有基础上再次添加两首乐曲

宏定义高音符



上网查找乐谱小星星和晴天根据高低音符进行编写



最后编写成功



2.2.4总结与反思

总结:大体总结思路与经验

硬件连接:

将STM32的某个支持PWM功能的GPIO引脚连接到无源蜂鸣器的一端,蜂鸣器的另一端连接到地线(GND)。
确保STM32的供电电压足够驱动蜂鸣器。
配置定时器:

选择一个定时器(如TIM1、TIM2等),并确保其PWM模式被启用。
配置定时器的预分频器(PSC)和自动重装载值(ARR),以控制PWM波的频率。预分频器用于设置定时器的时钟频率,而自动重装载值则决定了PWM波的周期。
设置PWM模式和占空比。对于无源蜂鸣器,通常只需要关注频率,因此占空比可以设置为一个固定值(如50%)。
初始化PWM输出:

配置选定的GPIO引脚为输出模式,并启用其PWM功能。
将定时器的PWM输出通道与该GPIO引脚关联起来。
调整PWM频率:

通过修改定时器的预分频器(PSC)和自动重装载值(ARR)来调整PWM波的频率。增加PSC或ARR的值将降低PWM频率,反之则提高频率。
可以在程序中编写一个函数,该函数接受一个频率参数,并计算出相应的PSC和ARR值。

反思

音质问题

使用PWM或DAC输出音频时,可能会遇到音质不佳的问题。这可能是由于PWM分辨率不足、DAC噪声或音频放大电路的不完善导致的。为了改善音质,可以考虑使用更高分辨率的PWM或更先进的音频放大电路。
. 资源占用

在播放复杂乐曲时,STM32F4的资源可能会变得紧张。这可能会导致播放速度变慢、中断延迟或其他性能问题。为了解决这个问题,可以考虑使用更强大的微控制器或优化代码以减少资源占用。

可扩展性

虽然本项目实现了简单的乐曲播放功能,但它仍然具有很大的扩展空间。例如,可以添加和弦播放、节奏调整、音量控制等更高级的功能。此外,还可以将项目与其他传感器或执行器结合使用,以实现更复杂的音乐交互系统。
学习与成长

通过这个项目,我深入了解了STM32F4微控制器的编程和音频处理的基础知识。我不仅学会了如何使用PWM和DAC输出音频信号,还掌握了定时器中断、中断优先级和代码优化等关键技术。这些经验将对我未来的嵌入式系统开发项目产生积极的影响。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/x687898797/article/details/139770944

使用特权

评论回复
沙发
LOVEEVER| | 2024-6-25 19:11 | 只看该作者
很好的demo样例程序

使用特权

评论回复
板凳
hehhehee| | 2024-7-26 15:07 | 只看该作者
如何在Keil5中配置和使用定时器产生PWM波形,并且在此基础上播放简单的音乐

使用特权

评论回复
地板
过期的塔头| | 2024-7-30 15:01 | 只看该作者
通过使用STM32的定时器产生PWM信号,并通过调整PWM波的频率来控制无源蜂鸣器的发声频率。

使用特权

评论回复
5
过期的塔头| | 2024-7-30 15:01 | 只看该作者
确定每个音符的频率,并计算PWM的频率和占空比。可以使用一个音符频率表来转换简谱到具体的PWM频率。
例如,C4的频率是261.63 Hz,你需要根据定时器的时钟频率和预分频器来设置Period和Pulse。

使用特权

评论回复
6
米多0036| | 2024-8-31 13:06 | 只看该作者
通过调整PWM波的频率,可以改变蜂鸣器的发声频率,进而播放简谱音乐。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15614

帖子

12

粉丝