一:项目软件背景
二:具体实现
使用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
|