基于STM32的SYN6288语音播报模块驱动实验(代码开源)

news2024/11/28 13:54:45

前言:本文为手把手教学 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 利用 TxDRxD 以及 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文库

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HarmonyOS】初识低代码平台开发元服务

【关键字】 HarmonyOS、低代码平台、元服务开发、拖拽式开发 【写在前面】 今天要分享的是HarmonyOS中的低代码开发相关的内容&#xff0c;低代码开发是DevEco Studio提供的一种UI界面可视化的构建方式&#xff0c;通过图形化的自由拖拽数据的参数化配置&#xff0c;可以快速…

【Java项目】基于SpringBoot+Vue的校园二手商品交易平台

文章目录 功能简述功能展示用户模块购物车模块管理员模块物物对价功能实现 代码 视频演示 代码下载 项目内含有 功能简述 系统登录界面的实现 系统首页界面的实现 用户信息管理界面的实现 商品购物功能的实现 购物车管理功能及支付功能的实现 物物对价功能的实现 用户安全设置…

【面试需了解】jvm垃圾回收机制-GC基础知识、jvm基本组成、查看、排查

前言 jvm垃圾回收机制-GC基础知识、jvm基本组成、查看、排查 文章目录 前言GC基础知识概述 JVM基本组成1. 虚拟机的组成2. jvm的内存区域 查看jvm排查jvm问题1. 正常运行的系统2. 对于已经发生了OOM的系统 GC基础知识 概述 什么是垃圾 一个对象没有被引用&#xff0c;没有任何…

Spring MVC详解(学习总结)

一、Sprig MVC简介1.1介绍1.2MVC是什么 二、Spring MVC实现原理2.1核心组件2.2工作流程 三、第一个Spring MVC四、常用注解五、参数绑定5.1URL风格参数绑定5.2RESTful风格的URL参数获取5.3映射Cookie5.4使用POJO绑定参数5.5JSP页面的转发和重定向 六、Spring MVC数据绑定6.1基本…

vulnstack(红日)内网渗透靶场二: 免杀360拿下域控

前言 在我之前的文章vulnstack(一)打靶&#xff0c;我主要依赖Cobalt Strike进行后期渗透测试&#xff0c;这次我计划使用Metasploit框架(MSF)来进行这个阶段的工作。这个靶场与之前的不同之处在于它的WEB服务器安装了360安全卫士。虽然这增加了挑战的难度&#xff0c;但只要我…

Shell脚本攻略:循环语句while、until

目录 一、理论 1.while 2.until 3.break 4.continue 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 一、理论 1.while (1)while用法 while循环满足条件执行&#xff0c;不满足不执行。 用于不知道循环次数&#xff0c;需要主动结束循环或达到条件结束…

二开项目权限应用全流程-按钮级控制

二开项目权限应用全流程-按钮级控制 员工A和员工B都可以访问同一个页面&#xff08;以员工管理为例&#xff09;&#xff0c;但是员工A可以导出excel&#xff0c;员工B就不可以导出excel(看不到按钮) 思路 用户登陆成功后&#xff0c;用户可以访问的按钮级别权限保存在point…

阿里巴巴淘天集团后端暑期实习面经

目录 1.面向对象三大特性2.重写和重载3.protected 关键字和 default 关键字的作用范围4.栈帧中有哪些东西&#xff1f;5.堆中有哪些区域&#xff1f;6.new 一个对象存放在哪里&#xff1f;7.CMS 收集器回收阶段8.CMS 收集器回收过程哪些需要暂停线程&#xff1f;9.HashMap JDK …

手机行业再多一条“鲶鱼”,小度青禾要打一场漂亮突围战?

文 | 智能相对论 作者 | 佘凯文 智能手机到底还是不是一门好生意&#xff1f; 在换机周期被无限拉长、市场竞争越发激烈、高端市场迟迟无法突破等共同背景下&#xff0c;智能手机到底还是不是一门好生意&#xff0c;成为行业内这两年被热议的话题之一。 由TechInsights发布…

腾讯云轻量应用服务器CPU主频多少?型号?

腾讯云轻量应用服务器CPU型号是什么&#xff1f;轻量服务器处理器主频&#xff1f;腾讯云服务器网账号下的CPU处理器型号为2.5GHz主频的Intel(R) Xeon(R) Gold 6133 CPU和2.4GHz主频Intel(R) Xeon(R) CPU E5-26xx v4&#xff0c;腾讯云轻量应用服务器不支持指定底层物理服务器的…

NodeJs内存快照分析

&#xff08;头等人&#xff0c;有本事&#xff0c;没脾气&#xff1b;二等人&#xff0c;有本事&#xff0c;有脾气&#xff1b;末等人&#xff0c;没本事&#xff0c;大脾气。——南怀瑾&#xff09; NodeJs内存分析的必要性 回顾过去&#xff0c;我们排查web应用问题的途径…

36岁大龄程序员全职接单三个月的感触

36岁大龄程序员&#xff0c;原以为逃过35岁危机&#xff0c;没想到在年前被优化&#xff0c;拿了N2&#xff0c;12w薪资后&#xff0c;我开始了全职接单的道路。现在每个月平均收入有个20K&#xff0c;一路走来挺有感触的&#xff0c;把自己的经验分享给大家。 赚钱&#xff0…

【Jmeter】生成html格式接口自动化测试报告

jmeter自带执行结果查看的插件&#xff0c;但是需要在jmeter工具中才能查看&#xff0c;如果要向领导提交测试结果&#xff0c;不够方便直观。 笔者刚做了这方面的尝试&#xff0c;总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安…

Android13蓝牙 停用绝对音量功能

Android13蓝牙 停用绝对音量功能 文章目录 Android13蓝牙 停用绝对音量功能一、前言二、代码实现分析过程1、查看SettingsLib源码资源2、查看原生Setitntgs 相关字符&#xff08;1&#xff09;xml 布局文件中的显示&#xff08;2&#xff09; java 代码文件中的控制串口上控制&…

Vue注册界面精美模板分享

文章目录 &#x1f412;个人主页&#x1f3c5;Vue项目常用组件模板仓库&#x1f4d6;前言&#xff1a;&#x1f380;源码如下&#xff1a; &#x1f412;个人主页 &#x1f3c5;Vue项目常用组件模板仓库 &#x1f4d6;前言&#xff1a; 本篇博客主要提供vue组件之注册组件源码…

硬件软件【部署】

开发板和主机 1.功能不同&#xff1a;帮助开发者进行嵌入式系统的开发和调试&#xff0c;具有较强的硬件拓展能力&#xff0c;可以连接各种传感器/执行器等外设。主机为满足一般的计算需求而设计&#xff0c;具备更强的计算和图形处理能力。 2.架构不同&#xff1a;开发板通常…

解决CentOS7用户管理报错问题:密码设为Aa12345@时报错,为什么Bji230309@可以而Aa12345@不行?

场景&#xff1a; 早上博友(CSDN博客朋友)给我发私信&#xff0c;问了一个问题&#xff1a; CentOS7上面运行的项目&#xff0c;在用户管理添加新用户时&#xff0c;密码设置成Aa12345时&#xff0c;会报错&#xff1a;Cannot read property message of undefined。查看/etc/…

【Apache 配置与应用】

目录 一、构建虚拟 Web 主机httpd服务支持的虚拟主机类型包括以下三种 二、基于域名的虚拟主机1&#xff0e;为虚拟主机提供域名解析2.为虚拟主机准备网页文档3.添加虚拟主机配置4.设置访问控制5.加载独立的配置文件6.在客户机中访问虚拟 Web 主机 三、基于IP地址的虚拟主机四、…

QSettings Class

QSettings类 QSettings类公共类型&#xff08;枚举&#xff09;公有成员函数静态成员函数函数作用这个类写文件的特征 QSettings类 QSettings类提供持久的独立于平台的应用程序设置。 头文件:#include< QSettings >qmake:QT core继承&#xff08;父&#xff09;:QObje…

Springboot +spring security,认证方式---实现HTTP摘要认证

一.简介 这篇文章来学习下security的认证方式其中的HTTP摘要认证 二.Spring Security的认证方式 2.1什么是认证 认证: 就是用来判断系统中是否存在某用户&#xff0c;并判断该用户的身份是否合法的过程&#xff0c;解决的其实是用户登录的问题。认证的存在&#xff0c;是为…