Bootstrap

STM32 MP3播放原理与应用开发—与MY1690语音芯片交互全解析(中) | 零基础入门STM32第六十九步

主题内容教学目的/扩展视频
MP3播放芯片电路原理,跳线设置,手册分析,驱动程序与调用。了解指令表。

师从洋桃电子,杜洋老师



回顾上期🔍STM32 MP3播放原理与应用开发—MY1690X-16S语音芯片全解析(上) | 零基础入门STM32第六十八步


(图1:开发板与MP3芯片部分连接示意图)

一、系统架构全景图

1.1 硬件连接拓扑

USART3_TX
DACL/DACR
BUSY信号
STM32F103
MY1690 RX
功放模块
扬声器
旋转编码器
触摸按键
TF卡/U盘

1.2 控制流程

用户操作 STM32 MY1690 扬声器 OLED 按键/编码器触发 发送串口指令 播放音频 BUSY状态反馈 更新播放状态 用户操作 STM32 MY1690 扬声器 OLED

二、核心代码解析

2.1 指令协议实现(my1690.c)

2.1.1 指令帧结构
0x7E | 长度 | 操作码 | 参数 | 校验码 | 0xEF
校验码 = 长度 ^ 操作码 ^ 参数
2.1.2 基础指令发送
// 播放指令实现
void MY1690_PLAY(void){
    USART3_printf("\x7e\x03\x11\x12\xef"); 
    // 7E 03(长度) 11(播放指令) 12(校验码) EF
}
2.1.3 通用指令生成函数
void MY1690_CMD3(u8 a, u16 b){ // 16位参数指令
    u8 c = b >> 8;    // 高8位
    u8 d = b & 0xFF;  // 低8位
    u8 i = 0x05 ^ a ^ c ^ d; // 校验码计算
    
    USART_SendData(USART3, 0x7e);
    USART_SendData(USART3, 0x05); // 长度=5字节
    USART_SendData(USART3, a);    // 操作码
    USART_SendData(USART3, c);    // 参数高位
    USART_SendData(USART3, d);    // 参数低位
    USART_SendData(USART3, i);    // 校验码
    USART_SendData(USART3, 0xef); // 结束码
}

2.2 功能接口定义(my1690.h)

// 功能级接口
void MY1690_PREV(void);   // 上一曲
void MY1690_NEXT(void);   // 下一曲
void MY1690_VUP(void);    // 音量+
void MY1690_VDOWN(void);  // 音量-

// 底层指令接口
void MY1690_CMD2(u8 a, u8 b);  // 带8位参数指令
void MY1690_CMD3(u8 a, u16 b); // 带16位参数指令

三、特殊功能实现

3.1 复合按键控制

// main.c中的按键处理逻辑
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)==0){
    MY1690_CMD3(0x41, 0x04); // 播放第0004首
    OLED显示"播放第4首"
}

3.2 旋转编码器集成

// 编码器值解析
u8 b=ENCODER_READ();
if(b==1) MY1690_VUP();  // 右转音量+
if(b==2) MY1690_VDOWN();// 左转音量-
if(b==3) MY1690_PLAYPAUSE(); // 按压切换状态

3.3 状态反馈处理

// 接收状态机处理
if(USART3_RX_STA==1){ // 收到STOP信号
    OLED显示"-- STOP --"
    MP3=0; // 更新播放状态
    USART3_RX_STA=0; // 清标志位
}

四、协议扩展应用

4.1 多设备控制方案

// 切换播放设备(U盘/SD卡)
void Switch_Device(u8 dev){
    MY1690_CMD2(0x35, dev); // 0:U盘 1:SD卡
}

4.2 智能插播功能

// 紧急通知插播
void Emergency_Play(u16 song){
    MY1690_CMD3(0x43, song); // 插播指定曲目
    while(BUSY_PIN==HIGH);   // 等待播放完成
    Resume_Play();           // 恢复原播放
}

五、开发调试技巧

5.1 调试信息输出

// 在MY1690_CMD3中添加调试输出
printf("SendCMD: %02X Param:%04X\n", a, b);

5.2 协议验证工具

工具用途
串口调试助手原始指令发送/接收测试
逻辑分析仪波形时序验证
音频示波器DAC输出质量检测

六、扩展应用场景

6.1 智能语音导览系统

红外传感器
STM32
MY1690
多区域音响
触摸屏

6.2 工业报警系统

触发条件响应动作
温度超标播放"温度过高"语音
压力异常插播紧急警报音
设备故障循环播放故障代码

通过深度封装协议指令,开发者可快速构建智能语音交互系统。建议结合状态机设计实现更复杂的播放队列管理,并利用BUSY信号实现精准的播放同步控制。


七、相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] MP3播放测试程序(含音乐文件)
[5] MY1690(MP3音乐播放芯片)数据手册


💬 技术讨论(请在评论区留言~)

📌 下期预告:下一期将探讨MP3播放驱动程序分析2,欢迎持续关注!

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-03-15)