苹果震动马达-MP3 单曲循环播放器

发布时间:2026/10/3 20:16:10
苹果震动马达-MP3 单曲循环播放器 MP3 单曲循环播放器 — 最简版说明STM32F103C8T6 MP3-TF-16P固定重复播放一首歌。对应代码User/main.c最简版无 ESP / OLED / 按键。一、硬件清单物品说明STM32F103C8T6 蓝板主控USB 或 ST-Link 供电MP3-TF-16P 模块带底板版底部 5 针VCC / GND / RXD / TXD / BUSYTF 卡≤32GBFAT32 格式64G 默认 exFAT 模块不认小喇叭8Ω / 1~3W接模块喇叭±焊盘不分正负杜邦线3~4 根公对母二、接线表只要 3 根线MP3-TF-16P 引脚接到 STM32说明VCC5V板上 5V 排针⚠️ 别接 3.3V供电不足会卡顿/重启GNDGND必须共地否则指令全丢RXDPA9(USART1_TX)交叉单片机 TX → 模块 RXTXD可不接模块返回数据本版代码不读BUSY默认悬空备用接PB0见下文USE_BUSY 开关电源提醒蓝板用 USB 线供电时板上5V针即 USB 直通 5V直接给模块若只用 ST-Link只有 3.3V需另找一路 5V 给模块且两路电源GND 连在一起。三、TF 卡准备TF卡根目录 └─ 01 ← 文件夹名两位数字 01~99 └─ 001.mp3 ← 文件名三位数字 .mp3不能有其他前缀字符格式化选FAT32不是 exFAT / NTFS。只放这一首歌文件夹里只有001.mp3全部循环就是单曲循环。四、代码说明main.c初始化流程上电 → 延时 1s模块稳定 → 0x09, 0x02 指定设备 TF 卡 → 延时 500ms等卡挂载太短会吞命令 → 0x06, 20 音量 20范围 0~30改这个数调音量 → 0x08, 0x00 全部循环主流固件认 → 0x11, 0x01 循环播放另一批固件认双保险 → 0x0F, 0x0101 播放 01 文件夹的 001.mp3 → 主循环空转重复播放由模块自己完成DFPlayer 命令帧格式10 字节7E FF 06 [CMD] 00 [参数高] [参数低] [校验高] [校验低] EF波特率9600USART1 只发不收校验和 0 - (0xFF 0x06 CMD 参数高 参数低)的 16 位补码代码已算好。USE_BUSY 开关备用方案#defineUSE_BUSY0/* 默认 0不接 BUSY靠模块固件循环 */现象处理能自动循环默认情况什么都不用改播完一遍真停了、不循环说明固件不支持循环命令接BUSY→PB0把USE_BUSY改1重新编译USE_BUSY1 时原理BUSY 播放时为低、停止时跳高STM32 检测到变高消抖 200ms就重发播放命令不依赖固件。五、烧录步骤Keil 打开工程MP3目录标准库 V3.5.0无需增删文件直接RebuildST-Link / 串口烧录Objects下的 HEX复位上电喇叭应开始播放并无限循环。六、故障排查按顺序过现象排查完全没声① 共地② TF 卡 FAT32③ 文件名严格001.mp3④ 模块接的是 5V⑤ 喇叭焊点牢有咔哒声/重启模块供电不足换 5V 直供没播完就重播BUSY 悬空被误读确认USE_BUSY 0本版已默认关播完不循环接BUSY→PB0USE_BUSY改1找不到文件文件夹/文件命名不严格或卡是 exFAT#includestm32f10x.h#includeDelay.h/* * 最简版固定重复播放一首歌 * * 接线只要 3 根线 * MP3-TF-16P VCC - 5V * MP3-TF-16P GND - GND共地 * MP3-TF-16P RXD - PA9 (USART1_TX) * 喇叭接模块喇叭±焊盘 * * TF 卡FAT3201 文件夹里放 001.mp3一首歌 * * 如果烧录后发现播完一遍就停、不自动循环说明固件不支持循环命令 * 再把 BUSY 接到 PB0并把下面的 USE_BUSY 改成 1 重新编译烧录。 */#defineUSE_BUSY0/* 0 不用 BUSY 引脚默认1 BUSY 接 PB0 后启用 */voidMP3_Init(void);voidMP3_SendCmd(uint8_tcmd,uint16_tparam);voidBusy_Init(void);intmain(void){MP3_Init();#ifUSE_BUSYBusy_Init();#endifDelay_ms(1000);/* 等模块上电稳定 */MP3_SendCmd(0x09,0x02);/* 指定设备TF 卡 */Delay_ms(500);/* 等卡挂载 */MP3_SendCmd(0x06,20);/* 音量 200~30按需改 */Delay_ms(100);MP3_SendCmd(0x08,0x00);/* 全部循环主流固件认 */Delay_ms(100);MP3_SendCmd(0x11,0x01);/* 循环播放另一批固件认双保险 */Delay_ms(100);MP3_SendCmd(0x0F,0x0101);/* 播放 01/001.mp3文件夹只有一首 单曲循环 */while(1){#ifUSE_BUSY/* BUSY 兜底模块停止时 BUSY 变高 - 重新播放 */if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)1){Delay_ms(200);/* 消抖避开切歌间隙 */if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)1){MP3_SendCmd(0x0F,0x0101);Delay_ms(500);}}#elseDelay_ms(100);/* 空转一切交给模块自己循环 */#endif}}/* ---------------- USART1 初始化9600发命令给 MP3 模块 ---------------- */voidMP3_Init(void){GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);GPIO_InitStructure.GPIO_ModeGPIO_Mode_AF_PP;/* PA9 TX */GPIO_InitStructure.GPIO_PinGPIO_Pin_9;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);USART_InitStructure.USART_BaudRate9600;USART_InitStructure.USART_WordLengthUSART_WordLength_8b;USART_InitStructure.USART_StopBitsUSART_StopBits_1;USART_InitStructure.USART_ParityUSART_Parity_No;USART_InitStructure.USART_HardwareFlowControlUSART_HardwareFlowControl_None;USART_InitStructure.USART_ModeUSART_Mode_Tx;/* 只发不收 */USART_Init(USART1,USART_InitStructure);USART_Cmd(USART1,ENABLE);}/* ---------------- BUSY 引脚PB0 输入播放低停止高 ---------------- */voidBusy_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU;GPIO_InitStructure.GPIO_PinGPIO_Pin_0;GPIO_Init(GPIOB,GPIO_InitStructure);}/* ---------------- 发送一条 MP3 命令帧10 字节 ---------------- */voidMP3_SendCmd(uint8_tcmd,uint16_tparam){uint8_tframe[10];uint16_tsum,checksum;uint8_ti;frame[0]0x7E;frame[1]0xFF;frame[2]0x06;frame[3]cmd;frame[4]0x00;frame[5](uint8_t)(param8);frame[6](uint8_t)(param0xFF);sum0xFF0x06cmdframe[5]frame[6];checksum(uint16_t)(0-sum);/* 16 位补码 */frame[7](uint8_t)(checksum8);frame[8](uint8_t)(checksum0xFF);frame[9]0xEF;for(i0;i10;i){USART_SendData(USART1,frame[i]);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)RESET);}}

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询