# stm32-mp3-player **Repository Path**: aaa_39_0/stm32-mp3-player ## Basic Information - **Project Name**: stm32-mp3-player - **Description**: 基于 STM32F103 的 MP3 播放器控制系统,驱动 DFPlayer Mini 模块播放 TF 卡音乐。支持文件夹管理(最多99个文件夹)、4按键控制(上一首/下一首/暂停/音量加减/开关机/定时关机)、WS2812B 双色 LED 动态灯效、电池电压检测与低电自动关机。配置信息(音量、当前文件夹及各文件夹曲目)保存在内部 Flash,开机自动恢复。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-08-26 - **Last Updated**: 2026-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32 MP3 播放器控制系统 基于 STM32F103C8T6 和 DFPlayer Mini 模块的 MP3 播放器,支持文件夹管理、按键控制、LED 灯效、电池电压检测及配置持久化存储。 ![License](https://img.shields.io/badge/license-MIT-green) ![Platform](https://img.shields.io/badge/platform-STM32-blue) ![Build](https://img.shields.io/badge/build-Keil%20MDK-brightgreen) --- ## 功能特性 - 🎵 **音乐播放**:通过 DFPlayer Mini 播放 TF 卡中的 MP3 文件,支持最多 99 个文件夹。 - 🎛️ **4 按键控制**: - **PA0**:长按开关机;短按 3 次启动 15 分钟定时关机。 - **PA1**:短按上一首;长按音量减(连续调节)。 - **PA2**:短按下一首;长按音量加(连续调节)。 - **PA3**:短按暂停/继续;长按循环切换文件夹。 - 💡 **WS2812B 双色 LED 灯效**: - 播放:绿蓝呼吸渐变。 - 暂停:黄色呼吸。 - 音量调节:瞬时指示。 - 曲目切换/文件夹切换:闪烁提示。 - 🔋 **电池管理**: - ADC 采样电池电压(PA4)。 - 低电量报警(<3.6V)并播报提示音。 - 电压低于 3.2V 时自动关机并保存配置。 - 💾 **配置存储**: - 使用内部 Flash(最后 1KB)保存音量、当前文件夹及各文件夹的曲目号。 - 开机自动恢复上次播放状态。 - ⏹️ **自动下一首**:基于 DFPlayer Busy 引脚检测播放结束,自动切歌(暂停状态下不触发)。 - ⏱️ **定时关机**:电源键短按 3 次启动 15 分钟倒计时,倒计时结束自动关机。 --- ## 硬件连接 | 外设 | 引脚 | 说明 | |---------------|----------|------------------------------| | 电源键 (PA0) | PA0 | 长按/短按检测,唤醒中断 | | 上一首/音量减 | PA1 | 短按/长按(连续) | | 下一首/音量加 | PA2 | 短按/长按(连续) | | 暂停/文件夹 | PA3 | 短按/长按 | | DFPlayer TX | PA9 | 串口1 TX (发送命令) | | DFPlayer Busy | PA10 | 播放状态检测(高=空闲) | | WS2812B DIN | PB7 | 信号输出 (TIM4 CH2 PWM+DMA) | | 电池检测 | PA4 | ADC1 通道4 | - **供电**:3.7V 锂电池(可通过 USB 充电,需单独充电电路)。 - **TF 卡要求**:FAT16/FAT32 格式,MP3 文件存放于 `01`、`02`... 等文件夹中,文件夹名须为两位数字(如 `01`)。每个文件夹内包含内容文件(`001.mp3` 起)和可选的文件夹名播报文件(`000.mp3`)。 --- ## 按键操作说明 | 按键 | 短按 | 长按 | |-----------|------------------------|----------------------| | **PA0** | 累计 3 次启动定时关机 | 关机 (保存配置) | | **PA1** | 上一首 | 音量减 (连续) | | **PA2** | 下一首 | 音量加 (连续) | | **PA3** | 暂停/继续 | 切换下一个文件夹 | - **定时关机启动**:短按 PA0 三次(间隔 ≤1 秒),白色 LED 闪烁 3 次,播报“定时关机启动”。 - **定时关机取消**:不支持手动取消,关机后恢复。 --- ## 文件夹与曲目配置 - 文件夹编号从 `01` 开始,数量由 `Mp3.h` 中的 `TOTAL_FOLDERS` 宏定义。 - 每个文件夹的曲目数量由 `folder_track_counts[]` 数组定义,须与 TF 卡实际文件数一致。 - 广告(语音提示)文件存放在根目录 `ADVERT` 文件夹中,命名规则: - `0001.mp3` ~ `0008.mp3` 对应低电量、关机、开机等提示音。 --- ## 开发环境 - **IDE**:Keil MDK 5 (V5.06) / VS Code (配合 EIDE 或 Keil 插件) - **编译器**:ARMCC V5.06 - **调试器**:ST-Link / J-Link - **标准外设库**:STM32F10x_StdPeriph_Lib_V3.5.0 - **芯片型号**:STM32F103C8T6 (中密度) --- ## 编译与烧录 1. 使用 Keil 打开 `project.uvprojx`。 2. 确认芯片型号与 Flash 算法。 3. 编译(F7),生成 `.hex` 或 `.bin` 文件。 4. 通过 ST-Link 烧录,或使用串口 ISP 下载。 --- --- ## 注意事项 - **首次使用**:若 Flash 中无有效配置(魔数校验失败),系统将使用默认值(音量 20,文件夹 1,曲目 1)。 - **音量范围**:DFPlayer 支持 1~30,内部会自动限幅。 - **LED 亮度**:可根据环境修改 `WS2812B.c` 中的 PWM 占空比或亮度系数。 - **自动下一首防抖**:Busy 上升沿触发后需间隔 ≥300ms 才响应,避免模块异常时连续触发。 --- ## 许可证 本项目采用 **MIT 许可证**,可自由使用、修改和分发,请保留版权声明。 --- --- ## 更新日志 - **2026-06-29**:修复 Flash 存储结构体对齐问题,支持开机恢复当前文件夹。 - **2026-06-28**:初始版本,实现基础播放控制与灯效。 --- 如有问题或建议,欢迎提交 Issue 或 Pull Request。