主题 | 内容 | 教学目的/扩展视频 |
---|---|---|
MP3播放芯片 | 电路原理,跳线设置,手册分析,驱动程序与调用。 | 了解指令表。 |
师从洋桃电子,杜洋老师
▲ 回顾上期STM32 MP3播放原理与应用开发—MY1690X-16S语音芯片全解析(上) | 零基础入门STM32第六十八步
▲ 回顾上期STM32 MP3播放原理与应用开发—与MY1690语音芯片交互全解析(中) | 零基础入门STM32第六十九步
▲ 回顾上期STM32 MP3播放原理与应用开发—与MY1690语音芯片交互全解析(下) | 零基础入门STM32第七十步
组件 | 功能说明 |
---|---|
MY1690X-16S | MP3语音解码芯片,支持串口控制 |
DS3231 RTC | 高精度实时时钟模块 |
OLED 0.96" | 显示当前时间信息 |
触摸按键 | 触发语音播报操作 |
根目录/
├── 0001_现在时间.mp3
├── 0002_十.mp3
├── 0003_点.mp3
...
└── 0015_秒.mp3
// 播放指定曲目指令格式
7E 05 41 00 01 45 EF
└─┬─┘ └─┬─┘ └─┬─┘
起始码 操作码 曲目编号 校验码
// 示例:14:05:09 直接播放数字
MY1690_CMD3(0x41,1); // "现在时间"
MY1690_CMD3(0x41,2); // "十"
MY1690_CMD3(0x41,4); // "四"
MY1690_CMD3(0x41,3); // "点"
MY1690_CMD3(0x41,6); // "零"
MY1690_CMD3(0x41,5); // "五"
//...(输出:"现在时间十四点零五分零九秒")
缺点:存在冗余发音(如"十四点零五分")
// 示例:14:05:09 智能处理
if(hour>=10){
if(hour/10==1) Play(11); // "十"
else Play(hour/10+1); // "二"
}
if(hour%10!=0) Play(hour%10+1);
Play(13); // "点"
if(min/10!=0) Play(min/10+1);
if(min%10!=0) Play(min%10+1);
//...(输出:"现在时间十四点五分九秒")
优势:符合中文表达习惯,消除冗余发音
void RTC_UpdateDisplay(){
OLED_ClearLine(4);
// 显示格式:HH:MM:SS
OLED_ShowNum(4,3, rhour/10); // 十位
OLED_ShowNum(4,4, rhour%10);
OLED_ShowChar(4,5, ':');
//... 分钟和秒同理
}
void SmartTimeAnnounce(){
Play(1); // "现在时间"
// 小时处理
if(rhour >= 20) Play(3); // "二十"
else if(rhour >= 10) {
if(rhour < 20) Play(11); // "十"
else Play(rhour/10+1);
}
if(rhour%10 != 0) Play(rhour%10+1);
Play(13); // "点"
// 分钟处理(省略冗余零)
if(rmin/10 > 0) Play(rmin/10+1);
if(rmin%10 > 0) Play(rmin%10+1);
//... 秒处理同理
}
SD卡根目录
└── 语音库
├── 01_CN
└── 02_EN
└── 0001_CurrentTime.mp3
场景 | 实现方案 |
---|---|
车站广播 | 结合时刻表自动触发播报 |
智能家居 | 与温湿度传感器联动播报 |
工业设备 | 故障代码语音提示 |
现象 | 解决方法 |
---|---|
发音卡顿 | 检查TF卡读取速度 |
时间显示异常 | 重新校准RTC模块 |
无语音输出 | 测量BUSY信号电平状态 |
[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] MP3语音播报程序(含杜洋录制语音文件)
[5] MY1690(MP3音乐播放芯片)数据手册
下期预告:下一期将探讨SPI总线原理与驱动,欢迎持续关注!
点击查阅往期【STM32专栏】文章
版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志:
- v1.0 初始版本(2025-03-16)