STM32蜂鸣器播放音乐(代码全)

这篇具有很好参考价值的文章主要介绍了STM32蜂鸣器播放音乐(代码全)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在STM32F103ZET6板子上使用蜂鸣器播放音乐,我们可以将其分为几个模块:初始化模块、蜂鸣器控制模块、音乐播放模块和主函数模块。以下是一个简单的示例代码,使用STM32 HAL库和定时器来驱动蜂鸣器播放音乐。

首先,确保你已经配置了STM32CubeMX或STM32CubeIDE,并生成了HAL库代码。

1. 初始化模块 (stm32f1xx_hal_msp.c 和 main.c)

stm32f1xx_hal_msp.c中配置系统时钟和定时器。

main.c中初始化HAL库和配置定时器中断。

2. 蜂鸣器控制模块 (buzzer.c 和 buzzer.h)

buzzer.h:

#ifndef BUZZER_H 
#define BUZZER_H 
#include "stm32f1xx_hal.h" 

void Buzzer_Init(void); 
void Buzzer_On(void); 
void Buzzer_Off(void); 
void Buzzer_Toggle(void); 

#endif /* BUZZER_H */

buzzer.c`:

#include "buzzer.h"  
#include "stm32f1xx_hal.h"  
  
// 假设蜂鸣器连接在GPIOA的第0个引脚  
#define BUZZER_PIN GPIO_PIN_0  
#define BUZZER_PORT GPIOA  
  
void Buzzer_Init(void) 
{  
    GPIO_InitTypeDef GPIO_InitStruct = {0};  
  
    __HAL_RCC_GPIOA_CLK_ENABLE();  
  
    GPIO_InitStruct.Pin = BUZZER_PIN;  
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  
    GPIO_InitStruct.Pull = GPIO_NOPULL;  
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  
    HAL_GPIO_Init(BUZZER_PORT, &GPIO_InitStruct);  
}  
  
void Buzzer_On(void) 
{  
    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);  
}  
  
void Buzzer_Off(void) 
{  
    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);  
}  
  
void Buzzer_Toggle(void) {  
    HAL_GPIO_TogglePin(BUZZER_PORT, BUZZER_PIN);  
}


3. 音乐播放模块 (music.c 和 music.h)

music.h:

#ifndef MUSIC_H  
#define MUSIC_H  
  
#include "buzzer.h"  
  
void Play_Note(uint32_t frequency, uint32_t duration);  
void Play_Song(void);  
  
#endif /* MUSIC_H */

music.c`:

#include "music.h"  
#include "stm32f1xx_hal.h"  
  
// 使用PWM或定时器中断来控制蜂鸣器的频率  
// 这里为了简单起见,我们使用延时函数来模拟音符的时长  
  
void Play_Note(uint32_t frequency, uint32_t duration) 
{  
    // 这里只是一个简单的示例,实际中应该使用PWM或定时器中断来控制频率  
    // 这里的frequency和duration参数在实际代码中可能不会被直接使用  
    // 这里我们使用HAL库的延时函数来模拟音符的时长  
    for (uint32_t i = 0; i < duration; i++) {  
        Buzzer_On();  
        HAL_Delay(1);  // 假设每个循环代表一个短暂的蜂鸣声  
        Buzzer_Off();  
        HAL_Delay(1);  // 假设每个循环之间的间隔代表蜂鸣器的静默  
    }  
}  
  
void Play_Song(void) 
{  
    // 这里只是一个简单的示例,你可以添加更多的音符和更复杂的旋律  
    Play_Note(440, 500);  // C4音符,持续500ms  
    HAL_Delay(500);      // 间隔500ms  
    Play_Note(523, 500);  // D4音符,持续500ms  
    // ... 添加更多音符 ...  
}

main.c

#include "main.h"  
#include "stm32f1xx_hal.h"  
#include "buzzer.h"  
#include "music.h"  
  
int main(void)  
{  
    HAL_Init();  
      
    // 配置系统时钟 - 这通常在STM32CubeMX生成的代码中自动完成  
    SystemClock_Config();  
      
    // 初始化蜂鸣器  
    Buzzer_Init();  
      
    // 播放歌曲  
    Play_Song();  
      
    // 主循环,保持程序运行  
    while (1)  
    {  
        // 这里可以添加其他任务或保持空闲  
    }  
}  
  
// 系统时钟配置函数,这通常是STM32CubeMX生成的代码  
void SystemClock_Config(void)  
{  
    // ... 系统时钟配置代码 ...  
}  
  
// 如果使用中断来控制蜂鸣器,还需要配置和处理定时器中断  
// ... 定时器中断配置和处理代码 ...

请注意,上述代码中的SystemClock_Config函数和可能的定时器中断配置代码通常是STM32CubeMX工具生成的,你需要根据你的硬件配置和项目需求进行调整。此外,Play_Note函数中的频率和时长处理是非常简化的,实际项目中你可能需要使用PWM或者更精确的定时器中断来控制蜂鸣器的频率和时长。

此外,STM32的HAL库提供了丰富的功能和灵活性,你可以根据具体需求进一步优化和扩展上述代码。例如,你可以使用STM32的定时器来生成PWM信号,从而更精确地控制蜂鸣器的频率和音量。你还可以在Play_Song函数中定义更复杂的旋律,甚至支持从外部源(如SD卡或网络)加载音乐数据。文章来源地址https://www.toymoban.com/news/detail-857966.html

到了这里,关于STM32蜂鸣器播放音乐(代码全)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用单片机控制蜂鸣器播放音乐的代码

    在嵌入式系统中,单片机常常被用于控制各种外设,其中包括蜂鸣器。蜂鸣器是一种能够发出声音的电子元件,可以通过单片机的控制来播放各种音乐或声效。本文将介绍如何使用单片机控制蜂鸣器播放音乐,并提供相应的源代码。 在开始编写代码之前,我们首先需要确定使

    2024年02月01日
    浏览(35)
  • 音乐播放器蜂鸣器ROM存储歌曲verilog,代码/视频

    名称:音乐播放器蜂鸣器ROM存储歌曲 软件:Quartus 语言:Verilog 代码功能:        设计音乐播放器,要求至少包含2首歌曲,使用按键切换歌曲,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件, 简谱存储在ROM中,共2首歌曲。      《茉莉花》的简谱存

    2024年02月04日
    浏览(52)
  • STM32 蜂鸣器介绍 配置 播放音节

             蜂鸣器一般被分为两类 : 有源蜂鸣器 和 无源蜂鸣器 。 其中源是振荡源 。 有源蜂鸣器内部有振荡电路,可以把直流电源转换为一定频率的脉冲信号。 因为它一直输出一定的频率,我们无法改变频率,所以声音只有一种,我们只能通过电源,控制它发不发声。

    2024年02月04日
    浏览(39)
  • STM32超级蓝牙小车——基于STM32F103C8T6的多功能蓝牙小车(PID循迹、跟踪、有源蜂鸣器播放音乐、蓝牙遥控、AD采集+DMA转运等超多元素小车)

    一、项目时间:2023.7.24~11.26 二、实现效果:通过蓝牙控制小车运动与模式转换                         模式一:循迹模式                         模式二:跟踪模式                         模式三:音乐模式                         模式四:控制运动模式 三、使

    2024年02月04日
    浏览(54)
  • 利用蜂鸣器播放音乐

            我们知道,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器内置了频率发生电路,因此其通电就能够发出声音,但是其频率是固定的,而无源蜂鸣器内部没有频率发生电路,需要外界给予频率,因此适用于单片机控制使其发出不同的音调频率。在这一点有源蜂

    2024年02月12日
    浏览(47)
  • FPGA蜂鸣器播放音乐

      最近做EDA课设,看到自己的买的板子上有蜂鸣器,所以就打算做一个FPGA控制蜂鸣器播放音乐。   这里我使用的板子是睿智助学的FPGA开发板,板子上的芯片是 EP4CE6E22C8 ,如果是你使用的是其他开发板或者是自己做的板子,就根据原理图,在写完代码时绑定相应的引脚下

    2024年02月06日
    浏览(43)
  • 【FPGA】五、蜂鸣器播放音乐

    文章目录 前言 一、蜂鸣器简介 二、音频音符简介 三、任务要求 四、程序设计 1、设计思路  2、程序代码    总结         蜂鸣器(Buzzer)是现代常用的一种电子发声器,主要用于产生声音信号。它是一种一体化结构的电子讯响器,采用直流电压供电,被广泛用于计算机、

    2024年02月11日
    浏览(47)
  • 无缘蜂鸣器——stm32定时器PWM实现控制发出“哆瑞咪发…“七个音及简单音乐

    一、有缘蜂鸣器和无缘蜂鸣器 所谓的 有源蜂鸣器 是指蜂鸣器内部内置振荡电路,一通电就能响。但发生频率固定,音色单一; 无源蜂鸣 器内部不含振荡源,内部结构相当于电磁场扬声器,可以通过给他输出一定频率的信号才能发声。人耳能听到的频率范围在20Hz–20kHz之间

    2024年02月02日
    浏览(75)
  • stm32蜂鸣器实现电子琴(原理+代码)

    许久没有摸32了,今天是培训的第一天,做个电子琴练练手。 编程难度很小,无非就是gpio控制引脚高低电平转换,比较值得注意的主要是一些乐理上的知识。 我们能听到的1 2 3 4 5 6 7的音符,实际上是一个个固定的频率,这个具体算我也不懂,问巴赫去吧 总而言之,通过百度

    2024年02月06日
    浏览(45)
  • 开源小项目 - 基于无源蜂鸣器实现的音乐播放器

    目录 一、音乐简谱相关知识 1、音符 2、音调 3、识读简谱 1. 找到简谱中C调的音符对应的蜂鸣器频率(确定音调对应的频率) 2. 确定蜂鸣器演奏一拍所需的时间(即确定一个音调对应的节拍数) 3.创建结构体确定一个音符所需的两个属性(音调频率、节拍数) 4.将《两只老虎

    2024年03月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包