基于STM32的SYN6288语音播报模块驱动实验(代码开源)
创始人
2025-01-08 18:03:35
0次

前言:本文为手把手教学 SYN6288 语音播报模块的驱动实验,本教程的 MCU 采用STM32F103ZET6。通过 CubeMX 软件配置 UART 串口协议驱 SYN6288 模块进行规定的语音播报。考虑到 SYN6288 模块的集成化与智能化很高,所以该模块的使用是极其便利的。(文末代码开源!)

硬件设备:STM32F103ZET6;SYN6288;

硬件实物图:

​

效果图:

引脚连接:

SYN6288引脚:

RX --> PA2

TX --> PA3

VCC --> 5V

GND --> GND

一、SYN6288概述

SYN6288 中文语音合成芯片是北京宇音天下科技有限公司于2010年初推出的一款性/价比更高,效果更自然的一款中高端语音合成芯片。SYN6288 通过异步串口(UART)通讯方式,接收待合成的文本数据,实现文本到语音(或TTS语音)的转换。

宇音天下于 2002 年最早研制出国内首款语音合成芯片 OSYNO6188 。公司最新推出的SYN6288语音合成芯片,继承了 OSYNO6188 语音芯片的优秀特点:最小 SSOP28L 贴片封装、硬件接口简单、低功耗、音色清亮圆润、极高的性/价比;除此之外, SYN6288 在识别文本/数字/字符串更智能、更准确,语音合成自然度更好、可懂度更高。SYN6288 语音合成效果和智能化程度均得到大幅度提高,是一款真正面向中高端行业应用领域的中文语音合成芯片。

SYN6288 语音合成芯片的诞生,将推动TTS语音合成技术的行业应用走向更深入、更广泛!

二、SYN6288核心叙述

1、SYN6288默认波特率为:9600,输出字符串文本到模块,模块自动输出语音; ;

2、输出的字符文本可以加入前缀(控制参数,实现音量语速等控制),以实现更自然的朗读。

3、芯片支持任意中文文本的合成,可以采用GB2312 、GBK、BIG5和Unicode四种编码方式。芯片支持英文字母的合成,遇到英文单词时按字母方式发音。每次合成的文本量可达200个字节

4、芯片具有文本智能分析处理功能,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本,芯片能够根据内置的文本匹配规则进行正确的识别和处理。例如:“2008-12-21”读作“二零零八年十二月二十一日”,“10:36:28”读作“十点三十六分二十八秒”,“28℃”读作“二十八摄氏度”等等。 

三、系统构成

最小系统包括:控制器模块、SYN6288语音合成芯片、功放模块和喇叭。

主控制器(MCU)和 SYN6288 语音合成芯片之间通过 UART 接口连接,控制器可通过通讯接口向 SYN6288 语音合成芯片发送控制命令和文本,SYN6288 语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。

SYN6288 提供一组全双工的异步串行通讯(UART)接口,实现与微处理器或 PC 的数据传输。SYN 6288 利用 TxD 和 RxD 以及 GND 实现串口通信。其中 GND 作为地信号。SYN6288 芯片支持 UART 接口通讯方式,通过 UART 接口接收上位机发送的命令和数据,允许发送数据的最大长度为 206 字节。

四、CubeMX配置

1、RCC配置外部高速晶振(精度更高)——HSE;

2、SYS配置:Debug设置成Serial Wire(否则可能导致芯片自锁);

3、USART2配置:异步通讯UART驱动SYN6288,波特率:9600;

4、时钟树配置

5、工程配置

五、代码与解析

5.1 SYN6288代码

syn6288.h:

#ifndef __SYN6288_H #define __SYN6288_H   #include "stm32f1xx_hal.h" void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata); void YS_SYN_Set(uint8_t *Info_data);   #endif

syn6288.c:

#include "syn6288.h" #include "usart.h" #include "string.h"   //Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐 void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata) {   /****************需要发送的文本**********************************/   unsigned  char  Frame_Info[50];   unsigned  char  HZ_Length;   unsigned  char  ecc  = 0;  			//定义校验字节   unsigned  int i = 0;   HZ_Length = strlen((char*)HZdata); 			//需要发送文本的长度     /*****************帧固定配置信息**************************************/   Frame_Info[0] = 0xFD ; 			//构造帧头FD   Frame_Info[1] = 0x00 ; 			//构造数据区长度的高字节   Frame_Info[2] = HZ_Length + 3; 		//构造数据区长度的低字节   Frame_Info[3] = 0x01 ; 			//构造命令字:合成播放命令   Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定     /*******************校验码计算***************************************/   for(i = 0; i < 5; i++)   				//依次发送构造好的5个帧头字节   {     ecc = ecc ^ (Frame_Info[i]);		//对发送的字节进行异或校验   }     for(i = 0; i < HZ_Length; i++)   		//依次发送待合成的文本数据   {     ecc = ecc ^ (HZdata[i]); 				//对发送的字节进行异或校验   }   /*******************发送帧信息***************************************/   memcpy(&Frame_Info[5], HZdata, HZ_Length);   Frame_Info[5 + HZ_Length] = ecc;   HAL_UART_Transmit(&huart2,Frame_Info,5 + HZ_Length + 1,10000); }     /*********************************************************** * 名    称: YS_SYN_Set(u8 *Info_data) * 功    能: 主函数	程序入口 * 入口参数: *Info_data:固定的配置信息变量 * 出口参数: * 说    明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。 * 调用方法:通过调用已经定义的相关数组进行配置。 **********************************************************/ void YS_SYN_Set(uint8_t *Info_data) {   uint8_t Com_Len;   Com_Len = strlen((char*)Info_data);   HAL_UART_Transmit(&huart2,Info_data,Com_Len,10000); }  

通过 SYN_FrameInfo 函数可以实现 SYN6288的语音播报,SYN6288 的集成化程度很高,可以自动解析发送过来的字符汉字等数据,进一步通过喇叭进行语音播报(开发难度极低!)

5.2 main代码

man 函数中通过 SYN_FrameInf(uint8_t Music, uint8_t *HZdata)进行语音播报,其中,Music为选择背景音乐,0:无背景音乐,1~15:选择背景音乐。HZdata则为需要发送的数据,其格式为 [vx][mx][tx]"xxxxxxx" 。

[vx]:前景文本播放音量,x音量值,取值:0~16(其中0为静音)

[mx]:背景音乐音量,x为音量值,取值:0~16(其中0为静音)

[tx]:词语语速,x为词语语速值,取值:0~5(5为最高语速)

main.c:

#include "main.h" #include "usart.h" #include "gpio.h"  /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "syn6288.h" /* USER CODE END Includes */  /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */  /* USER CODE END PTD */  /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */  /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */  /* USER CODE END PM */  /* Private variables ---------------------------------------------------------*/  /* USER CODE BEGIN PV */  /* USER CODE END PV */  /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */  /* USER CODE END PFP */  /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /**************оƬÉèÖÃÃüÁî*********************/ uint8_t SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成 uint8_t SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成 uint8_t SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成 uint8_t SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询 uint8_t SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN状态命令 /* USER CODE END 0 */  /**   * @brief  The application entry point.   * @retval int   */ int main(void) {   /* USER CODE BEGIN 1 */    /* USER CODE END 1 */    /* MCU Configuration--------------------------------------------------------*/    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */   HAL_Init();    /* USER CODE BEGIN Init */    /* USER CODE END Init */    /* Configure the system clock */   SystemClock_Config();    /* USER CODE BEGIN SysInit */    /* USER CODE END SysInit */    /* Initialize all configured peripherals */   MX_GPIO_Init();   MX_USART2_UART_Init();   /* USER CODE BEGIN 2 */    /* USER CODE END 2 */    /* Infinite loop */   /* USER CODE BEGIN WHILE */   while (1)   {     /* USER CODE END WHILE */      /* USER CODE BEGIN 3 */ 	  SYN_FrameInfo(2, "[v7][m1][t5]混分巨兽龙某某666"); 	  HAL_Delay(1000);   }   /* USER CODE END 3 */ }

六、代码开源

代码地址:基于STM32的SYN6288语音播报模块驱动代码资源-CSDN文库

如果积分不够的朋友,点波关注,评论区留下邮箱,作者无偿提供源码和后续问题解答。求求啦关注一波吧 !!!

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...