文章目录

  • 前言
  • 一、SYN6288介绍
  • 二、SYN6288原理讲解
  • 三.数据的异或校验
  • 四.代码编写
    • 1.串口的初始化
    • 2.SYN6288代码编写
    • 3.main函数逻辑
  • 总结

前言

本篇文章带大家学习一下SYN6288语音模块,这个模块可以用于车载设备,语音电子书等众多产品当中,而且这个模块支持多种编码格式,GB2312,GBK等字符编码格式。

一、SYN6288介绍

SYN6288语音合成模块是一种语音合成设备,其可实现文字转语音功能,将输入的文字信息通过内部的处理和合成,输出相对应的语音信息。SYN6288模块具有语音合成质量高、输出音质好、使用方便等特点,因此广泛应用于语音播报、语音提示、语音识别、智能家居、智能家电、安防监控等领域。

SYN6288语音合成模块的特性如下:

支持多语言:包括中文、英文、日文、韩文等多种语言。

支持音量、语速、语调控制:可以通过外部控制模块来调整合成语音的音量、语速和语调,满足不同场合和需求下的需求。

音频输出接口:模块内置了DAC接口,可以直接连接扬声器输出语音。

低功耗:工作电流小,运行稳定可靠。

支持外部控制:模块上有12个通用IO引脚,可对模块进行控制及调试。

二、SYN6288原理讲解

SYN6288引脚接线图:

这个模块只需要接4个引脚即可工作:

RXD—板子上的TXD
TXD—板子上的RXD
VCC—VCC(5V)
GND—GND

SYN6288波特率配置:

根据手册可以得知需要把对应的串口波特率设置为9600bps。

SYN6288通信帧定义:

根据手册我们可以得知通信帧格式:帧头FD + 数据区长度 + 数据区 的格式。

命令帧举例:

根据这里给出的例子我们可以知道如何来发送一次帧数据。下面的代码将会详细说明如何发送一次帧数据。

首先帧头必须是0XFD,然后接着的是数据区长度,数据区长度是由两个十六进制的数组成的,比如下面举的例子 0x00 0x0B那么数据区的长度就是11,从0x01到0xC1算起来刚刚好是11个字节。

命令帧必须严格按照这个要求来构造。

SYN6288模块的默认波特率为9600bps,当然了我们也可以进行波特率的修改,改为自己需要的波特率

设置波特率的命令:


三.数据的异或校验

在发送数据之前需要对所以的数据进行一次异或校验然后将得到的值放入数据的结尾。

在C语言中使用 ^符号进行异或操作,下面代码将详细写出如何进行异或操作。

四.代码编写

1.串口的初始化

这里我们使用串口5来和SYN6288模块进行通信。

UART_HandleTypeDef UART5_Handler; //UART句柄
uint8_t SYS6288Rx = 0; // 语音模块接收缓冲区//初始化IO 串口5 语音模块
//bound:波特率
void SYS6288_uartInit(u32 bound)
{//UART 初始化设置UART5_Handler.Instance=UART5;                             //UART5UART5_Handler.Init.BaudRate=bound;                  //波特率UART5_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式UART5_Handler.Init.StopBits=UART_STOPBITS_1;      //一个停止位UART5_Handler.Init.Parity=UART_PARITY_NONE;         //无奇偶校验位UART5_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控UART5_Handler.Init.Mode=UART_MODE_TX_RX;           //收发模式HAL_UART_Init(&UART5_Handler);                        //HAL_UART_Init()会使能UART5HAL_UART_Receive_IT(&UART5_Handler, &SYS6288Rx, 1);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量
}void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{//GPIO端口设置GPIO_InitTypeDef GPIO_Initure;if(huart->Instance==UART5)//如果是串口5,进行串口5 MSP初始化{__HAL_RCC_GPIOC_CLK_ENABLE();          //使能GPIOC时钟__HAL_RCC_GPIOD_CLK_ENABLE();            //使能GPIOD时钟__HAL_RCC_UART5_CLK_ENABLE();            //使能UART5时钟     GPIO_Initure.Pin=GPIO_PIN_12;          //PC12GPIO_Initure.Mode=GPIO_MODE_AF_PP;       //复用推挽输出GPIO_Initure.Pull=GPIO_PULLUP;         //上拉GPIO_Initure.Speed=GPIO_SPEED_FAST;        //高速GPIO_Initure.Alternate=GPIO_AF8_UART5; //复用为UART5HAL_GPIO_Init(GPIOC,&GPIO_Initure);       //初始化PC12GPIO_Initure.Pin=GPIO_PIN_2;          //PD2HAL_GPIO_Init(GPIOD,&GPIO_Initure);        //初始化PD2HAL_NVIC_EnableIRQ(UART5_IRQn);             //使能USART6中断通道HAL_NVIC_SetPriority(UART5_IRQn,3,3);     //抢占优先级3,子优先级3}  }//串口5中断服务程序
void UART5_IRQHandler(void)
{   HAL_UART_IRQHandler(&UART5_Handler);    //调用HAL库中断处理公用函数}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == UART5) // 仅处理UART5串口的接收中断{HAL_UART_Receive_IT(&UART5_Handler, &SYS6288Rx, 1);//启动下一次接收  }
}

2.SYN6288代码编写

syn6288.c

//Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
void SYN_FrameInfo(u8 Music, u8 *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 ;          //构造帧头FDFrame_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;SendStr5(Frame_Info, 5 + HZ_Length + 1);
}/***********************************************************
* 名    称: YS_SYN_Set(u8 *Info_data)
* 功    能: 主函数    程序入口
* 入口参数: *Info_data:固定的配置信息变量
* 出口参数:
* 说    明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。
* 调用方法:通过调用已经定义的相关数组进行配置。
**********************************************************/
void YS_SYN_Set(u8 *Info_data)
{u8 Com_Len;Com_Len = strlen((char*)Info_data);SendStr5(Info_data, Com_Len);
}

syn6288.h

#ifndef _SYN6288_H
#define _SYN6288_H#include "stm32f4xx_hal.h"
#include "sys.h"void SYN_FrameInfo(u8 Music, u8 *HZdata);
void YS_SYN_Set(u8 *Info_data);#endif

3.main函数逻辑

这里波特率要特别注意默认需要设置为9600bps,要修改成别的波特率的话需要按照手册上的命令帧发送数据修改。

SYS6288_uartInit(9600);                  //语音串口SYN_FrameInfo(2, (u8*)"OK");//语音播报OK

总结

本篇文章讲解到了SYN6288语音模块的使用,主要还是需要注意波特率的设置和命令帧的构造。

STM32 使用SYN6288语音模块相关推荐

  1. 基于stm32物联网开发板(3)--SYN6288语音模块

    基于stm32物联网开发板(3)–SYN6288语音模块 1.SYN6288语音模块展示示例 SYN6288语音模块 2.概述   SYN6288-A语音合成模块是一款性价比更高,效果更自然的一款中高 ...

  2. 第四章 STM32+LD3320+SYN6288+DHT11实现语音获取温湿度数值(上)

    前面三章,我们介绍了LD3320.SYN6288和DHT11温湿度传感器,并把代码资料一一分享给大家了,拿到代码后,我们就可以做一个简单的语音识别毕设了,即通过语音命令获取当前环境的温湿度数值,(但还 ...

  3. STM32F103C8T6驱动SYN6288语音模块(暂时做到能播放连续语音,其他诸如背景音乐的功能还没做)

    使用USART3(PB10,PB11)引脚连接模块的对应引脚,模块还有一个BY忙碌检测引脚,低电平表示语音模块空闲,高电平表示语音模块忙碌,这里连的是PA7.VCC接3~5V. **USART3部分程 ...

  4. 51单片机+SYN6288语音模块源码

    #include <reg52.h> //#include "syn6288.h" //#include "delay.h" //#include ...

  5. STM32与SYN6288语音合成模块的使用

    @[TOC]SYN6288语音合成模块的使用 SYN6288语音合成模块是一款播报声音的模块,SYN6288语音合成模块的使用的方法非常简单,这里我将整理下发布 待完善中-

  6. stm32驱动syn6288语音合成芯片

    一.6288电路原理图 二.模块与 USB 转 TTL下载器的连接 根据模块的端口 VCC-RXD-TXD-GND (如图一实物引 脚 ) 对 应 连 接 USB 转 TTL 下 载 器 的 VCC- ...

  7. STM32系列——手把手教你将SYN6288语音播报模块的标准库程序转为hal库使用

    目录 前言 1. 原理 2. Cubmx配置 3. keil5编写代码 3.1 main.c 3.2 syn6288.c 3.3 syn6288.h 前言 本教程基于stm32f103c8t6最小系统 ...

  8. 基于STM32的有限词条语音识别与对话模块

    基于STM32的有限词条语音识别与对话模块 一.模块整体设计思路 二.器件选型与方案确定 1.器件选型 (1)语音识别模块 (2)词条存储模块 (3)语音提示模块 (4)主控芯片 2.方案确定 三.I ...

  9. 006_STM32程序移植之_SYN6288语音模块

    测试环境:STM32C8T6 测试模块:SYN6288语音模块 测试接口: SYN6288语音模块: VCC------------------3.3V GND------------------GN ...

最新文章

  1. matlab与python 语言区别总结(1)_matlab与python 语言区别总结(1)
  2. keil5函数 默认返回值_C++的返回值return
  3. 3x3,5x5,7x7,9x9卷积核性能比较
  4. 防火墙先锋 Check Point 进军汽车数据防护领域
  5. simulink和psim仿真结果不同_(格麟倍)航空航天零件硬铬电镀工艺专业仿真评估工具...
  6. 2019-12-04 Using PAPI to Measure Execution Time
  7. 【渝粤教育】国家开放大学2018年春季 3717-21T天然气管道长输技术 参考试题
  8. 2019测试学习路线图,内附完整自学路线+视频+工具
  9. 新侨快讯:官方公布加拿大时薪最高和最低的工作,你的行业上榜吗?
  10. 邮件服务器收件人数量限制,qq邮箱群发邮件技巧
  11. 魂斗罗进化革命+塞班JAVA版_魂斗罗进化革命电脑版
  12. Android 代码设置来电铃声
  13. 重新“推开世界的门”:4年过去了,VR还能复兴吗?
  14. 随机梯度下降法,批量梯度下降法和小批量梯度下降法以及代码实现
  15. 初中升高中计算机考试题,初中信息技术中学考试excel操作题.doc
  16. 服务器重装系统后网不通,服务器出现死机网络ping不通等问题处理
  17. android 浏览器控件
  18. 设计一个亿级高并发系统架构 - 12306火车票核心场景DDD领域建模
  19. Codis的架构设计
  20. 百度地图图片叠加层切片工具:叠加层源图像制作方法,有点复杂

热门文章

  1. 2018秋招前端笔试题(58同城)
  2. linux 批量查找关键词,Linux上批量查找文件里面带的关键字(grep 关键字的用法)
  3. VC++网络安全编程范例(1)--数字证书有效期验证
  4. Ubuntu9.04 mplayer中文字幕乱码解决
  5. 高等数学(Calculus II)
  6. 【c++】十进制转换成2~36进制
  7. ecshop2.5软件的文件架构{转}
  8. python变量保存为.mat文件
  9. golang进程启动及监控
  10. 乘”公“而上,Golff腾飞AMA实录