📌 目录
- SYN6288 简介
- 模块规格与电气特性
- 与 STM32 的连接方式
- 通信协议与语音控制命令
- 中文语音格式详解
- STM32 串口驱动代码实现
- 实例:播放“你好,欢迎使用语音播报”
- 常见问题与调试技巧
- 拓展功能(音调、语速、背景音乐)
- 总结与参考资料
1. 🔊 SYN6288 简介
- SYN6288 是国産语音合成芯片;
- 内部集成 TTS(Text-To-Speech)引擎;
- 支持 汉字/拼音/英文/数字合成;
- 通过 UART 串口控制;
- 语音自然流畅、资源占用少。
2. 📏 模块规格与电气特性
项目 | 参数 |
---|---|
工作电压 | 3.3V(推荐)或 5V |
通信方式 | UART 串口 |
波特率 | 默认 9600bps |
音频输出 | DAC/SPK |
音量控制 | 支持 |
3. ⚙️ 与 STM32 的连接方式
典型接线(3.3V系统):
SYN6288 引脚 | 连接方式 |
---|---|
VCC | STM32 3.3V |
GND | STM32 GND |
TXD(输出) | STM32 RX |
RXD(输入) | STM32 TX |
📌 注意:若 STM32 是 3.3V,而 SYN6288 是 5V模块,请加入电平转换。
4. 🧾 通信协议与语音控制命令
基本帧结构(以 0xFD 开头):
帧格式:
[FD] + [Len_H] + [Len_L] + [Cmd] + [Data] + [CheckSum]
各字段说明:
- FD:帧头固定为 0xFD
- Len_H / Len_L:后续数据字节数(Cmd + Data)
- Cmd:命令字节(01 表示 TTS 合成)
- Data:命令参数(如语音内容)
- CheckSum:校验和(从 FD 开始所有字节之和取低 8 位的补码)
示例:发送语音“你好”
HEX 编码 | 含义 |
---|---|
FD | 帧头 |
00 0D | 长度 13 字节 |
01 | 命令:TTS |
01 | 编码方式(GB2312) |
B5 E3 BA C3 | “你好” 的 GB2312 编码 |
… | … |
CheckSum | 校验和 |
5. 🈶 中文语音格式详解
SYN6288 支持以下内容:
- 中文文本:直接发送 GB2312 编码;
- 英文单词或拼音:使用
#ABCDEF
; - 控制符:
\r
:回车;\n
:换行;[vXX]
:音量;[tX]
:语速;[mX]
:语调;[x]
:中止播报。
6. 📟 STM32 串口驱动代码(HAL库)
示例:串口初始化
// 假设使用 USART2,波特率 9600
void MX_USART2_UART_Init(void) {
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart2);
}
封装发送函数:
void SYN_SendText(char *text) {
uint8_t cmd_buf[128];
uint16_t text_len = strlen(text);
uint16_t total_len = 2 + text_len;
cmd_buf[0] = 0xFD;
cmd_buf[1] = (total_len >> 8) & 0xFF;
cmd_buf[2] = total_len & 0xFF;
cmd_buf[3] = 0x01; // 命令字:TTS合成
cmd_buf[4] = 0x01; // 编码格式:GB2312
memcpy(&cmd_buf[5], text, text_len);
// 校验和
uint8_t sum = 0;
for (int i = 0; i < total_len + 3; i++) {
sum += cmd_buf[i];
}
cmd_buf[5 + text_len] = ~sum + 1;
HAL_UART_Transmit(&huart2, cmd_buf, 6 + text_len, HAL_MAX_DELAY);
}
7. 🎤 实例:播放中文语音
SYN_SendText("你好,欢迎使用语音播报。");
注意:
- 编译器默认源代码为 UTF-8,要确保传递的是 GB2312 字符串;
- 可使用
iconv
工具或将.c
文件另存为 GB2312 编码。
8. 🐞 常见问题与调试技巧
问题 | 原因 | 解决方法 |
---|---|---|
无声音输出 | 电源不稳 / 无音箱 | 检查 VCC & 接入 8Ω喇叭 |
播放乱码 | 编码错误 | 发送时转为 GB2312 |
无响应 | 串口波特率不对 / 校验和错误 | 确认波特率 = 9600,无校验 |
只发音部分内容 | 长度参数或帧不完整 | 检查帧结构和校验和 |
9. 🎵 拓展功能
你可以使用控制符定制语音效果:
SYN_SendText("[v10][m2][t3]现在温度25度,湿度60%。");
[v10]
:音量最大;[m2]
:中等语调;[t3]
:语速中等。
10. 📚 总结与参考资料
SYN6288 是一款高性价比的中文语音播报芯片,适用于 STM32 和 Arduino 项目。搭配 UART 控制,语音输出稳定,适合各种场合(导航播报、电子秤、提示语音等)。
发表回复