站内搜索
发作品签到
专业版

低成本复刻STM32F1-MP3带歌词快进切歌等功能

工程标签

1.3k
0
0
12

简介

低成本易复刻,采用0603封装的STM32F103RCT6的软件解码MP3 集成音频播放、OLED UI交互、RTC时钟、SD卡文件管理、U盘模式等功能,适合作为嵌入式开发的实战项目

简介:低成本易复刻,采用0603封装的STM32F103RCT6的软件解码MP3 集成音频播放、OLED UI交互、RTC时钟、SD卡文件管理、U盘模式等功能,适合作为嵌入式开发的实战项目
创“六”开源计划
复刻成本:25

开源协议

MIT License

创建时间:2025-09-30 14:41:52更新时间:2025-10-17 16:13:42

描述

一、项目简介

该项目是我的单片机课设内容,起因是我比较喜欢音乐,和想综合以往学习到的内容,便蹭着此次课设的单片机设计要求,设计了个基于 STM32F103RCT6 的多功能 MP3 播放器。

这个项目最初只是我的单片机课设,但我不想只做“又一个MP3”。

我想做一套“能教人的嵌入式全栈方案”:

  1. UI框架:我自己写的,2.5KB Flash,270B RAM,支持中文菜单、滑条、选择器、弹窗,只为教学可控;
  2. 按键状态机:我自己写的,支持单击/双击/三连击/长按/持续按住,适合讲解“如何不阻塞地处理按键”;
  3. FATFS扩展:我封装了一套“按索引进入文件夹/返回上级/获取文件数”的API;
  4. FreeRTOS多任务:解码+UI+按键+电量+RTC,零死锁,适合讲解任务划分与通信;
  5. MP3软解码:Helix解码器+DMA双缓冲,35KB RAM跑起来,适合讲解音频流程;
  6. 音频输出对比:滑动开关切换STM32 DAC vs I2S DAC,16bit vs 12bit,适合教学对比;

我不是为了做个MP3,我是为了写一套“能教人的嵌入式全栈方案”,

此项目支持 SD 卡音乐软解码播放、RTC 时钟、OLED 多级菜单 UI、耳机\喇叭输出音频、电量检测、按键状态机、FreeRTOS+FATFS 等,是一个开源的低成本MP3项目
所有代码开源,模块化设计,适合学习、复刻、二次开发。

B站演示视频:

【MP3-STM32F1歌词快进退-播放蓝莲哈吉米音乐】

https://www.bilibili.com/video/BV1jzxnzqES6/?share_source=copy_web&vd_source=7b1acd6a119e9aec0e26e5a271c3f727 

 

Gitee开源地址 https://gitee.com/Wang2869902214/lichuang-mp3.git

如果有朋友不想自己买元器件和焊接,可以在Q群内私信群主59.8元(没SMT 人工费高)交个朋友发焊接好的成品

复刻必看内容 请查看第四点

 

   

    

    

二、项目功能

功能模块

描述

主控芯片

STM32F103RCT6(72MHz,256KB Flash,48KB RAM)

音频输出

MS4344(I2S DAC)+ FM8002A(功放)+ 3.5mm耳机孔 + 1.25mm喇叭座

显示模块

1.3寸 OLED(SSD1306),支持中文、旋转、对比度调节

存储介质

SD卡(FATFS文件系统)

供电方式

锂电池(TP4057充电)+ VBAT后备电池 + USB供电

用户交互

五个按键(上下左右中)+ RGB LED + 复位键

系统特性

FreeRTOS多任务、RTC时钟、电量检测、Flash参数保存、独立看门狗

当前已实现功能

  • MP3播放(支持耳机/喇叭输出)
  • SD卡文件浏览与播放
  • OLED中文菜单交互
  • 音量调节(0~31级)
  • RTC时钟(掉电保存)
  • 电量检测与显示
  • 按键状态机(支持单击/长按/多击)
  • 系统设置保存(Flash存储)
  • 音频输出源切换(STM32 DAC vs I2S DAC)
  • 上位机UI配置工具

待完善功能:

  • 收藏音乐功能
  • 播放模式(循环/随机/单曲)
  • 多格式音频解码(如WAV、FLAC)
  • 简易小游戏(贪吃蛇/俄罗斯方块)
  • 电子书阅读功能
  • SD卡升级Bootloader

三、使用说明

1.正面LED状态指示灯与复位按键

2.正面GPIO按键:

背面电源指示灯:这里的红色LED灯亮起代表系统电源导通,熄灭则代表断电

4.USB充电指示灯:右边靠近USB的绿色LED灯亮起代表电池充满电了或者未插入电池,红色LED灯亮起代表电池还在充电

5.正面GPIO按键说明:

     在菜单界面下:

  • 长按\单击上键是选项加
  • 长按\单击下键是选项减
  • 单击中键是确定
  • 长按中键是返回

      在音乐播放界面下:

  • 长按\单击上键是音量加
  • 长按\单击下键是音量减
  • 单击中键是播放\暂停
  • 长按中键是返回菜单
  • 双击左键是上一曲
  • 双击右键是下一曲
  • 长按左键是快退
  • 长按右键是快进

     在滑条、选择器模式下:

  • 长按\单击上键是选项减
  • 长按\单击下键是选项加
  • 默认1500ms后退出

6.目前接口设计在左手边,如果使用时,左手容易被连接线阻碍,那么可以:
在系统设置中 -> 反转x 并且反转y
让整个屏幕倒置过来

这样就可以让接口在右边了:如图所示

四、复刻须知

1.所需要的主要芯片

元件

型号

参考价

主控

STM32F103RCT6/RET6 /R系列

¥4.5

音频 DAC

MS4344 / CJC4344 同型号即可

¥0.6

功放

FM8002A 2W

¥0.2

OLED

1.3寸 oled焊接版

¥7

电池管理

TP4057

¥0.3

降压芯片

ME6212C33M5G低压差LDO

¥0.3

其他

按键、LED、SD 卡座、耳机座、喇叭座、电池座、滑动开关

¥5

总共

去除运费复刻成本预计

¥15

运费

全部元器件的运费预计

¥10

 

如果有朋友不想自己买元器件和焊接,可以在Q群内私信群主59.8元(没SMT 人工费高)交个朋友发焊接好的成品

 

2.购买电池和喇叭接口与线序:

PCB中喇叭和电池设计的均是MX 1.25mm的卧贴接口,

下面是线序描述:可以选择此类型商品购买,然后和客服沟通选择带什么样的接口,或者直接购买此接口的商品

 

这里需要注意接口线序,从正面看喇叭的接口:上面是 ‘-’,下面是‘+’:需要买带1.25mm插头的”红黑“线序喇叭

正面看电池的接口:上面是‘+’, 下面是‘-’:需要买带1.25mm插头的"黑红"线序电池

 

3.焊接选项

如果不需要切换I2S DAC和STM32的DAC可以省去滑动开关(不影响使用)
直接使用0欧或者铜线将图中的网络连接

4.烧录方法

如果想直接烧录使用,那么可以直接在资料包中的固件文件夹中找到hex文件,直接烧录此文件,烧录方法:

https://blog.csdn.net/Mark_md/article/details/117968440

5.烧录问题(SW DEBUG)

如果出现上图所示,提示STlink连接错误,请检查烧录SW线序是否正确,以及检查VDDA和VDDS引脚是否虚焊,虚焊会导致STlink无法识别

 

6.SD卡默认文件

根目录下需要创建SYSTEM文件夹,将最下方附件内容中的字库文件存入此文件夹,否则中文显示异常

 

7.当前固件运行条件

系统运行默认需要插入SD卡!!,否则屏幕会提示请插入SD卡英文字样,并且所有LED灯亮起

8.屏幕焊接

Oled fpc排线背面放在焊盘上,焊好后翻过来,使用双面胶或者纳米胶粘住屏幕

   

 

9. OLED显示异常

如果屏幕最右边有白线出现的话,可能是屏幕驱动是sh1302,可以在oled.h文件中的宏设置为2即可解决问题

硬件架构

电源选择电路,自动选择USB或VBAT供电,USB给VBAT充电

  • 如果存在USB_5V则 Q1的 G极被拉高 所以Q1的D极和S极断开,也就是VABT断开,USB_5V进入电源
  • 如果不存在USB_5V Q1的G极因为R6电阻到地被拉低 所以Q1的D极和S极闭合,又因为D4二极管存在,导通后的VBAT不会返回到Q1的G极,所以G极依旧会被R6拉低

采用硬件设计的硬件开关机电路

当连接POWER_KEY的按键按下被拉低后,Q2导通,此时

  • 如果POWER引脚的电平是低电平,Q3断开,并且POWER_KEY按键松手,则Q2的G极依然是高电平,Q2断开,系统断电
  • 如果POWER引脚的电平是高电平,Q3导通,并且POWER_KEY按键松手,则Q2的G被拉低,Q2导通,系统通电

所以我们可以通过单片机POWER引脚来控制电源断开或者维持电源导通

电池分压检测电压

这里使用两个100K欧的电阻分压总电源,再通过ADC读取电压,最终的电压需要乘以2

因为总电源没导通之前,VCC_OUT也不存在电压,所以静态功耗几乎为0

电池充电电路 采用TP4057芯片

封装小,具有充电中和充满电两种状态指示灯

带有可编程充电电流电阻,PROG引脚串联电阻与充电电流关系图如下

1.3寸 oled

根据数据手册,BS0,BS1,BS2设置不同的电平,可以设置不同的通信方式,例如iic,spi

  1. DAC源选择 滑动开关
  2. 这里U10是选择左DAC的输入源是I2S芯片还是STM32的DAC1
  3. 这里U11是选择右DAC的输入源是I2S芯片还是STM32的DAC2
  4. 这里U12是因为PCB设计的单声道输出功放,所以这里是选择功放DAC的输入源是左DAC还是右DAC

软件架构

注意:由于使用了fatfs的长文件名模式,会需要到大量的内部flash

rct6 的flash:256kb 如果是ret6的话(512kb)可以直接将下面文件中注释的内容全部取消注释,实现完整的字符编码

但是可以自行裁剪ff字库内容

例如:注释掉部分编码内容
好处:减少flash内存占用

坏处:因为部分编码删掉了,有些文件名可能显示不完整,无法播放此文件
最小解决方法:修改不能播放的文件的文件名

 

代码中的UI框架是自研的Mini_UI框架 是 OLED多级菜单UI,有上位机可以直接修改菜单内容,也是我出的视频,链接:
【实用型-简单移植的多级OLED菜单 Mini_UI框架-演示】

https://www.bilibili.com/video/BV1CU4tzqEKF/?share_source=copy_web&vd_source=7b1acd6a119e9aec0e26e5a271c3f727

 

里面的按键状态机移植教程:
【不限平台芯片-简单移植多击长按等操作-按键状态机-STM32驱动代码】

https://www.bilibili.com/video/BV1oa43z5EgY/?share_source=copy_web&vd_source=7b1acd6a119e9aec0e26e5a271c3f727

 

项目中STM32CubeMX注意事项:

打开工程的Cube可能会说时钟错误,忽略掉,这里由于stm32f103rct6没有单独的I2S时钟,如果不超频到80Mhz,那么从主频分频出来得到频率I2S误差会有+6%

这里优化到+1.45%,听感正常

 

 

 

 

 

其次我将cube生成的USB大容量设备从原本的静态变量,全部改成了动态变量,如果使用cube重新生成代码需要

把这个USB_DEVICE全部替换到 Project下

并且代码中需要将此变量改为指针类型:

 

 

使用STM32CubeMX的SDIO需要注意四线模式:

下面红框的地方需要改成1B,否则SDIO会初始化失败

 

结尾

 

所有资料均在上方Gitee链接中开源

 

已开源内容:

内容

状态

说明

原理图

✅ 已上传

PDF + 源文件(嘉立创 EDA)

PCB 文件

✅ 已上传

嘉立创 EDA 源文件

BOM 表

待上传

 

固件 HEX

✅ 已上传

附件下载

源码

✅ 已上传

文章开头 链接

演示视频

✅ 已上传

文章开头 链接

QQ 交流群

✅ 已开放

群号:1063350748(复刻/答疑/二次开发)

后续计划(未完成的功能欢迎同学一起完成):

[ ] 添加 收藏音乐功能与播放模式(循环/随机/单曲)

[ ] 添加 贪吃蛇、俄罗斯方块 等小游戏

[ ] 支持 电子书阅读

[ ] 支持 FLAC/WAV 等多格式音频解码

[ ] 完善 SD 卡升级 Bootloader

[ ] 发布 教学视频(基于本项目的外设操作教学,例如KEY,UI,FATFS等)

联系作者:

B站:零壹工坊

QQ群:1063350748(复刻答疑 + 二次开发交流)

邮箱:2869902214@qq.com

如果有朋友不想自己买元器件和焊接,可以在Q群内私信群主59.8元(没SMT 人工费高)交个朋友发焊接好的成品

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
dec1f7157d73fe28aa55702d397b8f10.mp4
17
2
资料.zip
47
克隆工程
添加到专辑
0
0
分享
Logo GIF0
侵权投诉

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航