/** * @file buzzer.h * @brief 蜂鸣器设备驱动头文件 * @details 提供蜂鸣器音频播放功能,支持单音符播放和预设音乐播放 * @author Generated by STM32CubeMX * @date 2025年10月23日 */ #pragma once #ifdef __cplusplus extern "C" { #endif /* Includes ----------------------------------------------------------------- */ #include "bsp/pwm.h" // PWM底层硬件抽象层 #include "device.h" // 设备通用头文件 #include // 标准定义 #include // 标准整型定义 /* USER INCLUDE BEGIN */ /* USER INCLUDE END */ /* Exported constants ------------------------------------------------------- */ /* USER DEFINE BEGIN */ /* USER DEFINE END */ /* Exported types ----------------------------------------------------------- */ /** * @brief 音符枚举类型 * @details 定义标准十二平均律音符,用于音乐播放 */ typedef enum { NOTE_C = 0, ///< Do音符 NOTE_CS = 1, ///< Do#音符 (升Do) NOTE_D = 2, ///< Re音符 NOTE_DS = 3, ///< Re#音符 (升Re) NOTE_E = 4, ///< Mi音符 NOTE_F = 5, ///< Fa音符 NOTE_FS = 6, ///< Fa#音符 (升Fa) NOTE_G = 7, ///< Sol音符 NOTE_GS = 8, ///< Sol#音符 (升Sol) NOTE_A = 9, ///< La音符 NOTE_AS = 10, ///< La#音符 (升La) NOTE_B = 11, ///< Si音符 NOTE_REST = 255 ///< 休止符 (无声音) } NOTE_t; /** * @brief 音调结构体 * @details 定义一个完整的音调信息,包括音符、八度和持续时间 */ typedef struct { NOTE_t note; ///< 音符名称 (使用NOTE_t枚举) uint8_t octave; ///< 八度 (0-8,通常使用3-7) uint16_t duration_ms; ///< 持续时间,单位毫秒 } Tone_t; /** * @brief 预设音乐枚举类型 * @details 定义可播放的预设音乐类型 */ typedef enum { /* USER MUSIC MENU BEGIN */ MUSIC_RM, ///< RM战队音乐 MUSIC_NOKIA, ///< 诺基亚经典铃声 /* USER MUSIC MENU END */ } MUSIC_t; /** * @brief 蜂鸣器设备结构体 * @details 蜂鸣器设备的完整描述,包含设备头信息和PWM通道 */ typedef struct { DEVICE_Header_t header; ///< 设备通用头信息 (在线状态、时间戳等) BSP_PWM_Channel_t channel; ///< PWM输出通道 } BUZZER_t; /* USER STRUCT BEGIN */ /* USER STRUCT END */ /* Exported functions prototypes -------------------------------------------- */ /** * @brief 初始化蜂鸣器设备 * @param buzzer 蜂鸣器设备结构体指针 * @param channel PWM输出通道 * @return int8_t 返回值:DEVICE_OK(0) 成功,DEVICE_ERR(-1) 失败 * @note 初始化后蜂鸣器处于停止状态 */ int8_t BUZZER_Init(BUZZER_t *buzzer, BSP_PWM_Channel_t channel); /** * @brief 启动蜂鸣器播放 * @param buzzer 蜂鸣器设备结构体指针 * @return int8_t 返回值:DEVICE_OK(0) 成功,DEVICE_ERR(-1) 失败 * @note 需要先调用BUZZER_Set设置频率和占空比 */ int8_t BUZZER_Start(BUZZER_t *buzzer); /** * @brief 停止蜂鸣器播放 * @param buzzer 蜂鸣器设备结构体指针 * @return int8_t 返回值:DEVICE_OK(0) 成功,DEVICE_ERR(-1) 失败 */ int8_t BUZZER_Stop(BUZZER_t *buzzer); /** * @brief 设置蜂鸣器频率和占空比 * @param buzzer 蜂鸣器设备结构体指针 * @param freq 频率 (Hz),通常范围20Hz-20kHz * @param duty_cycle 占空比 (0.0-1.0),影响音量大小 * @return int8_t 返回值:DEVICE_OK(0) 成功,DEVICE_ERR(-1) 失败 * @note 设置后需要调用BUZZER_Start才能听到声音 */ int8_t BUZZER_Set(BUZZER_t *buzzer, float freq, float duty_cycle); /** * @brief 播放预设音乐 * @param buzzer 蜂鸣器设备结构体指针 * @param music 音乐类型 (使用MUSIC_t枚举) * @return int8_t 返回值:DEVICE_OK(0) 成功,DEVICE_ERR(-1) 失败 * @note 这是一个阻塞函数,会播放完整首音乐后返回 */ int8_t BUZZER_PlayMusic(BUZZER_t *buzzer, MUSIC_t music); /* USER FUNCTION BEGIN */ /* USER FUNCTION END */ #ifdef __cplusplus } #endif