📌 目录

  1. SYN6288 简介
  2. 模块规格与电气特性
  3. 与 STM32 的连接方式
  4. 通信协议与语音控制命令
  5. 中文语音格式详解
  6. STM32 串口驱动代码实现
  7. 实例:播放“你好,欢迎使用语音播报”
  8. 常见问题与调试技巧
  9. 拓展功能(音调、语速、背景音乐)
  10. 总结与参考资料

1. 🔊 SYN6288 简介

  • SYN6288 是国産语音合成芯片;
  • 内部集成 TTS(Text-To-Speech)引擎;
  • 支持 汉字/拼音/英文/数字合成;
  • 通过 UART 串口控制
  • 语音自然流畅、资源占用少。

2. 📏 模块规格与电气特性

项目参数
工作电压3.3V(推荐)或 5V
通信方式UART 串口
波特率默认 9600bps
音频输出DAC/SPK
音量控制支持

3. ⚙️ 与 STM32 的连接方式

典型接线(3.3V系统):

SYN6288 引脚连接方式
VCCSTM32 3.3V
GNDSTM32 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 控制,语音输出稳定,适合各种场合(导航播报、电子秤、提示语音等)。


🔗 参考资料与出站链接