主题 | 内容 | 教学目的/扩展视频 |
---|---|---|
MP3播放芯片 | 电路原理,跳线设置,手册分析,驱动程序与调用。 | 了解指令表。 |
师从洋桃电子,杜洋老师
📑文章目录
▲ 回顾上期🔍STM32 MP3播放原理与应用开发—MY1690X-16S语音芯片全解析(上) | 零基础入门STM32第六十八步
一、系统架构全景图
1.1 硬件连接拓扑
1.2 控制流程
二、核心代码解析
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 智能语音导览系统
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)