0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【CW32模块使用】语音合成播报模块

CW32生态社区 ? 来源:CW32生态社区 ? 作者:CW32生态社区 ? 2025-03-29 17:25 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

一、模块来源

模块实物展示:

wKgZPGflM52AR3o6AAApjsZgu9g715.jpg


资料链接:https://pan.baidu.com/s/1FjoAuJm387bxaZxS6g9HEg
资料提取码:8888

二、规格参数

输入电压:2.4V~5.1V

额定电流:2.0uA~280mA

控制方式:串口

以上信息见厂家资料文件

三、移植过程

我们的目标是将例程移植至CW32F030C8T6开发板上【能够播报语音的功能】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。

3.1查看资料

语音播报控制,只要配置出串口,再根据数据手册要求的命令帧格式发送数据,就能实现播报功能。

注意!该模块只能实现语音播报,没有语音识别功能!也无法录音。

wKgZO2flM52AFXzUAAC1jhurHRQ310.jpgwKgZPGflM56AKRZAAACsYP1-ylI166.jpg

3.2引脚选择

想要使用uart串口,需要确定使用的引脚是否有串口外设功能,可以通过用户手册进行查看。在用户手册的第146页。

这里选择使用PA2和PA3的附加串口2功能。

wKgZO2flM56ASTNuAAElnjqkicU905.jpg

有串口功能的引脚

wKgZPGflM5-AJW7LAAERrMCc64o912.jpg

模块接线图

3.3移植至工程

移植步骤中的导入.c和.h文件与【CW32模块使用】DHT11温湿度传感器相同,只是将.c和.h文件更改为bsp_syn6288.c与bsp_syn6288.h。这里不再过多讲述,移植完成后面修改相关代码。

在文件bsp_syn6288.c中,编写如下代码。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-25     LCKFB-LP    first version
 */
#include "bsp_syn6288.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define SYN6288RX_LEN_MAX 255

unsigned char SYN6288RX_BUFF[SYN6288RX_LEN_MAX];
unsigned char SYN6288RX_LEN = 0;


/******************************************************************
 * 函 数 名 称:SYN6288_GPIO_Init
 * 函 数 说 明:SYN6288引脚初始化
 * 函 数 形 参:band_rate GPS通信波特率
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:默认波特率为9600
******************************************************************/
void SYN6288_GPIO_Init(uint32_t band_rate)
{
    GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化结构体

    BSP_SYN6288_GPIO_RCC_ENABLE();        // 使能GPIO时钟
    BSP_SYN6288_UART_RCC_ENABLE();        // 使能UART时钟

    GPIO_InitStruct.Pins = BSP_SYN6288_TX_PIN;           // GPIO引脚
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;          // 推挽输出
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;             // 输出速度高
    GPIO_Init(BSP_SYN6288_GPIO_PORT, &GPIO_InitStruct);  // 初始化

    GPIO_InitStruct.Pins = BSP_SYN6288_RX_PIN;           // GPIO引脚
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;       // 上拉输入
    GPIO_Init(BSP_SYN6288_GPIO_PORT, &GPIO_InitStruct);  // 初始化

    BSP_SYN6288_AF_UART_TX(); // UART_TX复用
    BSP_SYN6288_AF_UART_RX(); // UART_RX复用

    // 配置UART
    USART_InitTypeDef USART_InitStructure;

    USART_InitStructure.USART_BaudRate = band_rate;                     // 波特率
    USART_InitStructure.USART_Over = USART_Over_16;                     // 配置USART的过采样率。
    USART_InitStructure.USART_Source = USART_Source_PCLK;               // 设置时钟源
    USART_InitStructure.USART_UclkFreq = 64000000;                      //设置USART时钟频率(和主频一致即可)
    USART_InitStructure.USART_StartBit = USART_StartBit_FE;             //RXD下降沿开始
    USART_InitStructure.USART_StopBits = USART_StopBits_1;              // 停止位1
    USART_InitStructure.USART_Parity = USART_Parity_No ;                // 不使用校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 不使用流控
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;     // 收发模式
    USART_Init(BSP_SYN6288, &USART_InitStructure);               // 初始化串口2

    // 优先级,无优先级分组
    NVIC_SetPriority(BSP_SYN6288_IRQ, 0);

    // UARTx中断使能
    NVIC_EnableIRQ(BSP_SYN6288_IRQ);

    // 使能UARTx RC中断
    USART_ITConfig(BSP_SYN6288, USART_IT_RC, ENABLE);
}

/******************************************************************
 * 函 数 名 称:SYN6288_Send_Bit
 * 函 数 说 明:向SYN6288发送单个字符
 * 函 数 形 参:ch发送的字符
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:无
******************************************************************/
void SYN6288_Send_Bit(unsigned char ch)
{
    USART_SendData(BSP_SYN6288, (uint8_t)ch);

    while( RESET == USART_GetFlagStatus(BSP_SYN6288, USART_FLAG_TXE) ){} // 等待发送数据缓冲区标志置位
}

/******************************************************************
 * 函 数 名 称:SYN6288_send_String
 * 函 数 说 明:SYN6288发送字符串
 * 函 数 形 参:str要发送的字符串
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:无
******************************************************************/
void SYN6288_send_String(unsigned char *str)
{
        while( str && *str ) // 地址为空或者值为空跳出
        {
                SYN6288_Send_Bit(*str++);
        }
}
//获取串口接收的数据
unsigned char *Get_SYN6288RX_BUFF(void)
{
        return SYN6288RX_BUFF;
}

//清除串口接收的数据
void Clear_SYN6288RX_BUFF(void)
{
        unsigned char i = SYN6288RX_LEN_MAX-1;
        while(i)
        {
                SYN6288RX_BUFF[i--] = '?';
        }
        SYN6288RX_LEN = 0;
}

/************************************************************
 * 函数名称:SYN6288_Send_Cmd
 * 函数说明:向SYN6288发送命令
 * 型    参:
 * 【CmdType=命令字】           可使用参数有:
 *                                              0x01        语音合成命令
 *                                              0x31        设置波特率(默认9600)
 *                                              0x02        停止合成命令
 *                                              0x03        暂停合成命令
 *                                              0x04        恢复合成命令
 *                                              0x21        芯片状态查询命令
 *                                              0x88        芯片进入低功耗模式
 * 【CmdPar=命令参数】          可使用参数有:
 *                                              字节高5位的十进制为0时,表示不加背景音乐
 *                                              字节高5位的十进制为1~15时,表示所选背景音乐的编号
 *                                              字节低3位的十进制为0~3,并且命令字为语音合成命令时,分别代表设置文本为GB2312格式、GBK格式、BIG5格式、UNICODE格式;
 *                                              字节低3位的十进制为0~2,并且命令字为设置波特率时,分别代表设置波特率为9600、19200、38400;
 * 【text=播报的文本】

 * 返 回 值:0=发送成功
 * 备    注:

 * 接收到控制命令帧,芯片会向上位机发送1个字节的状态回传,上位机可根据这个回传来判断芯片目前的工作状态
 * 初始化成功回传            0X4A
 * 收到正确的命令帧回传      0x41
 * 收到不能识别命令帧回传    0x45
 * 芯片播音状态回传          0x4E
 * 芯片空闲状态回传          0x4F
*************************************************************/
unsigned char SYN6288_Send_Cmd(uint8_t CmdType, uint8_t CmdPar, uint8_t *text)
{
        unsigned char frame_header = 0XFD;       //帧头
        unsigned int Text_Len = strlen((const char*)text);//待发送文本的长度
        unsigned int Data_Len = Text_Len + 3;              //数据区长度;3=帧头、帧尾和异或校验
        unsigned char Xor_Check = 0;                       //异或校验存储
        unsigned char Send_Buff[210];                     //待发送的命令帧,命令帧最大206个字节
        uint8_t i = 0;

        Send_Buff[0] = frame_header;   //帧头
        Send_Buff[1] = Data_Len>>8;      //高位在前
        Send_Buff[2] = Data_Len&0x00ff; //低位在前
        Send_Buff[3] = CmdType;         //命令字
        Send_Buff[4] = CmdPar;          //命令数据
        sprintf((char*)Send_Buff+5, "%s", text );

        //发送数据
        for( i = 0; i < Text_Len+5; i++ )
        {
                Xor_Check = Xor_Check ^ Send_Buff[i];//对每一个数据进行异或校验保存
                SYN6288_Send_Bit( Send_Buff[i] );//发送数据
        }
        SYN6288_Send_Bit( Xor_Check );//发送最后一位:异或校验数据

        return 0;
}


/******************************************************************
 * 函 数 名 称:BSP_SYN6288_IRQHandler
 * 函 数 说 明:串口中断服务函数
 * 函 数 形 参:无
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:无
******************************************************************/
void BSP_SYN6288_IRQHandler(void)
{
        if(USART_GetITStatus(BSP_SYN6288,USART_IT_RC) != RESET) // 接收缓冲区不为空
        {
                SYN6288RX_BUFF[ SYN6288RX_LEN ] = USART_ReceiveData(BSP_SYN6288);
                SYN6288RX_LEN = ( SYN6288RX_LEN + 1 ) % SYN6288RX_LEN_MAX;

                SYN6288RX_BUFF[SYN6288RX_LEN] = '?';

                USART_ClearITPendingBit(BSP_SYN6288, USART_IT_RC); // 清除中断标志位
        }
}

在文件bsp_syn6288.h中,编写如下代码。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-25     LCKFB-LP    first version
 */
#ifndef _BSP_SYN6288_H
#define _BSP_SYN6288_H

#include "board.h"

#define BSP_SYN6288_GPIO_RCC_ENABLE()    __RCC_GPIOA_CLK_ENABLE()   // GPIO端口时钟
#define BSP_SYN6288_UART_RCC_ENABLE()    __RCC_UART2_CLK_ENABLE()   // 串口2的时钟


#define BSP_SYN6288_AF_UART_TX()         PA02_AFx_UART2TXD()
#define BSP_SYN6288_AF_UART_RX()         PA03_AFx_UART2RXD()

#define BSP_SYN6288_GPIO_PORT            CW_GPIOA               // GPIO的端口

#define BSP_SYN6288_TX_PIN               GPIO_PIN_2             // 串口TX的引脚
#define BSP_SYN6288_RX_PIN               GPIO_PIN_3             // 串口RX的引脚

#define BSP_SYN6288                      CW_UART2               // 串口2
#define BSP_SYN6288_IRQ                  UART2_IRQn             // 串口2中断
#define BSP_SYN6288_IRQHandler           UART2_IRQHandler       // 串口2中断服务函数



void SYN6288_GPIO_Init(uint32_t band_rate);
unsigned char SYN6288_Send_Cmd(uint8_t CmdType, uint8_t CmdPar, uint8_t *text);
#endif

四、移植验证

在自己工程中的main主函数中,编写如下。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-25     LCKFB-LP    first version
 */
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_syn6288.h"

int32_t main(void)
{
    board_init();

    uart1_init(9600);

    SYN6288_GPIO_Init(9600);
    printf("startrn");
    delay_ms(1000);

    SYN6288_Send_Cmd(0x01,0x00,(uint8_t *)"立创开发板");

    while(1)
    {

    }
}

移植现象:模块播报"立创开发板"。

模块移植成功案例代码:

链接:https://pan.baidu.com/s/1eaj1otbe_v5xWZtn7We84w?pwd=LCKF

提取码:LCKF

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2790

    浏览量

    50702
  • 语音合成
    +关注

    关注

    2

    文章

    92

    浏览量

    16525
  • CW32
    +关注

    关注

    1

    文章

    256

    浏览量

    1286
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32移植Free-RTOS】CW32开发者扶持计划

    CW32配置Free-RTOS全过程,CW32开发者扶持计划
    的头像 发表于 04-18 09:38 ?6694次阅读
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>开发者扶持计划

    【项目展示】基于CW32的遥控循迹小车

    CW32循迹小车.zip_免费高速下载|百度网盘-分享无限制? 一、概述 CW32循迹、遥控小车具有循迹和遥控两种功能,小车的硬件模块CW32F030C8T6小蓝板、智能小车控制底板
    的头像 发表于 05-31 17:33 ?1921次阅读
    【项目展示】基于<b class='flag-5'>CW32</b>的遥控循迹小车

    CW32模块使用】JQ8900语音播报模块

    此芯片最大的优势在于能够灵活的更换 SPI-flash 内的语音内容,省去了传统语音芯片需要安装上位机更换语音的麻烦,SPI FLASH 直接模拟成 U 盘,跟拷贝 U 盘一样,非常方便。使得产品研发和生产变得便捷简单。一线串口
    的头像 发表于 03-29 17:28 ?1493次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】JQ8900<b class='flag-5'>语音</b><b class='flag-5'>播报</b><b class='flag-5'>模块</b>

    XFS5152CE语音合成模块

    TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。语音播报功能的实现方式TTS语音模块,比
    发表于 08-12 08:14

    DFRobot Gravity: 中英文语音合成模块

    语音合成模块 DFRobot-Gravity: 中英文语音合成模块 无论是中文还是英文对于
    发表于 09-07 16:29 ?1358次阅读

    语音播报功能的实现

    TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。语音播报功能的实现方式TTS语音模块,比
    发表于 12-16 16:52 ?11次下载
    <b class='flag-5'>语音</b><b class='flag-5'>播报</b>功能的实现

    语音播报模块有哪些芯片?支持OTA升级的语音ic芯片模块WT2003H

    语音播报模块领域,WT2003H语音芯片是一款备受欢迎的语音芯片。除了提供高品质音频播报功能外
    的头像 发表于 04-11 10:13 ?1408次阅读
    <b class='flag-5'>语音</b><b class='flag-5'>播报</b><b class='flag-5'>模块</b>有哪些芯片?支持OTA升级的<b class='flag-5'>语音</b>ic芯片<b class='flag-5'>模块</b>WT2003H

    syn6288语音合成模块资料分享

    ?SYN6288语音合成模块是一款播报声音的模块,SYN6288语音
    发表于 04-28 15:45 ?22次下载

    语音播报模块有哪些芯片?支持OTA升级的语音ic芯片模块WT2003H

    语音播报模块领域,WT2003H语音芯片是一款备受欢迎的语音芯片。除了提供高品质音频播报功能外
    的头像 发表于 04-11 10:40 ?1301次阅读
    <b class='flag-5'>语音</b><b class='flag-5'>播报</b><b class='flag-5'>模块</b>有哪些芯片?支持OTA升级的<b class='flag-5'>语音</b>ic芯片<b class='flag-5'>模块</b>WT2003H

    语音模块的作用

    轻生活科技语音模块的应用十分广泛,它可以应用于语音识别、语音合成语音
    的头像 发表于 04-20 16:56 ?2852次阅读
    <b class='flag-5'>语音</b><b class='flag-5'>模块</b>的作用

    基于CW32的智能语音分类垃圾桶设计

    基于CW32的智能语音分类垃圾桶设计
    的头像 发表于 11-06 16:51 ?1964次阅读
    基于<b class='flag-5'>CW32</b>的智能<b class='flag-5'>语音</b>分类垃圾桶设计

    基于CW32的RC522刷卡模块的应用

    基于CW32的RC522刷卡模块的应用
    的头像 发表于 11-02 14:53 ?1771次阅读
    基于<b class='flag-5'>CW32</b>的RC522刷卡<b class='flag-5'>模块</b>的应用

    基于CW32的物联网应用

    CW32】基于CW32的物联网应用
    的头像 发表于 11-02 15:55 ?1262次阅读
    基于<b class='flag-5'>CW32</b>的物联网应用

    基于CW32的遥控循迹小车

    本实验是使用CW32单片机制作一个入门的遥控循迹小车。遥控采用蓝牙配合手机APP进行遥控。循迹使用一个5路的循迹模块。使用OLED模块进行显示当前小车状态。
    的头像 发表于 11-17 17:46 ?1555次阅读
    基于<b class='flag-5'>CW32</b>的遥控循迹小车

    TTS语音播报模块简介

    在现代科技日新月异的时代,语音技术作为人工智能领域的重要分支,正以前所未有的速度改变着我们的生活方式。其中,TTS(Text To Speech,文本转语音)语音播报
    的头像 发表于 02-18 16:16 ?1098次阅读