STM32 MY1690语音芯片实现智能时间播报系统 | 零基础入门STM32第七十一步

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

师从洋桃电子,杜洋老师



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

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

回顾上期🔍STM32 MP3播放原理与应用开发—与MY1690语音芯片交互全解析(下) | 零基础入门STM32第七十步


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

一、系统架构与核心组件

1.1 硬件拓扑图

USART3
DAC输出
GPIO
I2C
SPI
时间数据
STM32F103
MY1690X-16S
音频功放
扬声器
触摸按键
RTC模块
OLED显示屏

1.2 核心组件说明

组件功能说明
MY1690X-16SMP3语音解码芯片,支持串口控制
DS3231 RTC高精度实时时钟模块
OLED 0.96"显示当前时间信息
触摸按键触发语音播报操作

二、语音播报原理分析

2.1 语音文件命名规范

根目录/
├── 0001_现在时间.mp3
├── 0002_十.mp3
├── 0003_点.mp3
...
└── 0015_秒.mp3
  • 数字前缀:4位数字标识播放顺序
  • 语义命名:中文描述语音内容

2.2 播报指令协议

// 播放指定曲目指令格式
7E 05 41 00 01 45 EF
└─┬─┘ └─┬─┘ └─┬─┘ 
起始码 操作码 曲目编号 校验码

三、两种播报方式对比

3.1 无语法播报(机械式)

// 示例: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);  // "五"
//...(输出:"现在时间十四点零五分零九秒")

缺点:存在冗余发音(如"十四点零五分")

3.2 有语法播报(智能优化)

// 示例: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); 
//...(输出:"现在时间十四点五分九秒")

优势:符合中文表达习惯,消除冗余发音


四、核心代码解析

4.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, ':');
    //... 分钟和秒同理
}

4.2 智能播报算法

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);
    
    //... 秒处理同理
}

五、系统扩展方案

5.1 多语言支持

切换指令
文件夹切换
0001_CurrentTime.mp3
中文播报
英文播报
02_EN
语音文件
SD卡根目录
└── 语音库
    ├── 01_CN
    └── 02_EN
        └── 0001_CurrentTime.mp3

5.2 应用场景拓展

场景实现方案
车站广播结合时刻表自动触发播报
智能家居与温湿度传感器联动播报
工业设备故障代码语音提示

六、开发注意事项

6.1 时序控制要点

  1. 指令间隔:连续指令间隔需>50ms
  2. 文件排序:严格按照4位数字前缀命名
  3. 校验机制:添加重发机制确保指令可靠

6.2 常见问题排查

现象解决方法
发音卡顿检查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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值