基于STM32 + SYN6288语音播报

这篇具有很好参考价值的文章主要介绍了基于STM32 + SYN6288语音播报。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完整代码下载

https://download.csdn.net/download/zhouml_msn/85592868


一、接线示例:


二、模块重点:

1:5V供电 ,功耗约120mA (带图中小喇叭);

2:最少接3根线:5V,  GND,  RXD,TXD-可不接,BY-可不接

3:两种音源输出接口,排针、标准3.5mm接口,接小喇叭和普通音箱都无压力。

4:每次最多可转换200字节文本;


三、代码重点:

1:串口配置波特率9600,输出文本到模块,模块自动输出语音; 

2:输出的文本中,可插入控制参数,以实现更自然的朗读。

3:.....想不出有啥要注意了;厂家的封装和设计,令使用相当的简单。文章来源地址https://www.toymoban.com/news/detail-639726.html


四、实现代码

1:main.c文件

#include <stm32f10x.h>            
#include "bsp_led.h"              // LED指示灯
#include "bsp_usart.h"            // USART1、2、3,UART4、5
#include "bsp_syn6288.h"          // SYN6288_文本转语音模块


float money = 18.5;                                   // 示例金额,仅用作测试


static void delay_ms(uint32_t ms)                     // 定义一个ms延时函数
{
    ms = ms * 11993;                                 
    for (uint32_t i = 0; i < ms; i++);                
}



// 主函数
int main(void)printf
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   // 中断分组

    USART1_Init(115200);                              // 串口1初始化; 用于printf

    Led_Init();                                       // LED 初始化
    LED_RED_ON;                                       // 点亮红灯

    Key_Init();                                       // 按键 初始化

    SYN6288_Init(USART2);                             // 初始化; USART2-PA2
    SYN6288_Say("你的结算金额为: %3.1f元", money);     // 示例4:配合格式代输出带数值的语音

    while (1)                                         // while函数死循环
    {
        delay_ms(500);                                // 间隔延时
        LED_RED_TOGGLE ;                              // 规律闪烁LED,观察系统是否正常运行
    }
}

2:bsp_syn6288.h文件

#ifndef __SYN6288_H
#define __SYN6288_H
/***********************************************************************************************************************************
 ** 【代码编写】  魔女开发板团队
 ** 【代码更新】  Q群文件夹       
 ** 【淘    宝】  魔女开发板      https://demoboard.taobao.com
 ***********************************************************************************************************************************
 ** 【文件名称】  bsp_sys6288.h
 **
 ** 【功能实现】  文本转换语音输出   
 **
 ** 【适用平台】  STM32F103 + 标准库v3.5 + keil5 + SYN6288
 **
 ** 【硬件重点】  接线,模块有五个引脚,可以只接三根线,即可实现文本转音:
 **               VCC  ---  5V 
 **               GND  ---  GND
 **               RXD  ---  PC12   说明:与所用串口配合,USART1-PA9, USART2-PA2, USART3-PB10, UART4-PC10, UART5-PC12(本示例中所用引脚)
 **               TXD  ---  空置   
 **               BY   ---  空置   说明:模块忙状态引脚,测试时可空置,做真实项目时,建议用于配合检测状态。
 **
 ** 【移植说明】  1- 复制本工程bsp文件夹中的两个文件夹: USART、SYN6288,到目标工程文件夹中; (注意,本文件须配合bsp_usart.c文件使用)
 **               2- 在keil左侧工程管理器中,双击,把上述两者的c文件添加到工程;
 **               3- 点击魔术棒,在Options.../c.../Include...下添加头文件存放路径;
 **               4- 在代码中,#include "bsp_usart.h",和 #include "bsp_syn6288.h";
 **
 ** 【代码使用】  初 始 化:SYN6288_Init(USARTx);       // 使用不同的串口,就接不同的TX线
 **               输出语音:SYN6288_Say("你好吗?");     // 注意,传入参数可为格式化参数,如printf参数般使用
 **   
 ** 【更新记录】 
 **               2022-06-09   完善输出语音函数、完善注释
 **               2022-05-00   示例工程建立
 **    
************************************************************************************************************************************/
#include <stm32f10x.h>  
#include "bsp_usart.h"


/*****************************************************************************
 ** 全局变量 (无要修改)
****************************************************************************/
typedef struct 
{
    uint8_t         FlagOkay;           // 状态标记, 暂未用到,保留; 0=未初始化或异常, 1=正常
    uint32_t        Baudrate;           // 记录所用的串口波特率,暂未用到,保留
    USART_TypeDef*  USARTx;             // 记录所用的端口
}xSYN6288_TypeDef;

extern xSYN6288_TypeDef  xSYN6288;      // 声明为全局变量,方便记录信息、状态
    


/*****************************************************************************
 ** 声明全局函数
 ** 
****************************************************************************/
void SYN6288_Init(USART_TypeDef *USARTx);
void SYN6288_Say(char *fmt, ...);




#endif

3:bsp_syn6288.c文件

#include "bsp_syn6288.h"
#include "stdarg.h"

xSYN6288_TypeDef  xSYN6288;                // 全局变量结构体

static void delay_ms(uint32_t ms)          // 简单的延时函数
{
    ms = ms * 11993;                       
    for (uint32_t i = 0; i < ms; i++);    
}


//Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
// SYN6288_SendFrameInfo(0, "[v10][m1][t5]结算金额 为32.8元");
// 参数: 0~15  :  背景音乐,0_无背景音乐,1~15_背景音乐可选
//       [V0~16]:  文本朗读音量,0_最小,16_最大
//       [m0~16]:  背景音乐音量,0_最小,16_最大
//       [t0~5]:   朗读语速,0_最慢,5_最快
//       其它不常用功能请参考数据手册
static void SYN6288_SendFrameInfo(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;
    if (xSYN6288.USARTx == USART1)   USART1_SendData(Frame_Info, 5 + HZ_Length + 1);
    if (xSYN6288.USARTx == USART2)   USART2_SendData(Frame_Info, 5 + HZ_Length + 1);
    if (xSYN6288.USARTx == USART3)   USART3_SendData(Frame_Info, 5 + HZ_Length + 1);
    if (xSYN6288.USARTx == UART4)    UART4_SendData(Frame_Info, 5 + HZ_Length + 1);
    if (xSYN6288.USARTx == UART5)    UART5_SendData(Frame_Info, 5 + HZ_Length + 1);
}



/***********************************************************
* 名    称: SYN6288_Set(uint8_t *Info_data)
* 功    能: 主函数 程序入口
* 入口参数: *Info_data:固定的配置信息变量
* 出口参数:
* 说    明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。
* 调用方法:通过调用已经定义的相关数组进行配置。
**********************************************************/
static void SYN6288_Set(uint8_t *Info_data)
{
    uint8_t Com_Len;
    Com_Len = strlen((char *)Info_data);
    UART5_SendData(Info_data, Com_Len);
}


/******************************************************************************
 * 函  数: SYN6288_Say
 * 功  能: 输出合成语音
 * 参  数: 格式化参数,如printf参数般一样的用法
 * 返回值: 无
 * 示  例: SYN6288_Say("你好吗?");
*******************************************************************************/
void SYN6288_Say(char *fmt, ...)
{
    static char  str_1[200];   // 缓存区1,模块每次可转换200字节
    static char  str_2[200];   // 缓存区2,模块每次可转换200字节
    va_list ap;
    va_start(ap, fmt);
    vsprintf(str_1, fmt, ap);
    va_end(ap);
    sprintf(str_2, "[d][V12][m15][t5]%s", str_1);  // [d]恢复默认状态,[V12]朗读音量0~16,[m15]背景音量0~16,[t5]语速0~5
    SYN6288_SendFrameInfo(0, (uint8_t *)str_2); // 无背景音乐
}

/******************************************************************************
 * 函  数: SYN6288_Init
 * 功  能: 初始化所用串口, 模块默认通信波特率9600
 * 参  数: 串口-USARTx
 * 返回值: 无
 * 示  例: SYN6288_Init(USART1);
*******************************************************************************/
void SYN6288_Init(USART_TypeDef *USARTx)
{
    uint16_t baudrate = 9600;      // 默认波特率9600bps。
    delay_ms(200);                 // 上电后,稍作延时,等待模块进入稳定状态
    if (USARTx == USART1)    USART1_Init(baudrate);
    if (USARTx == USART2)    USART2_Init(baudrate);
    if (USARTx == USART3)    USART3_Init(baudrate);
#ifdef STM32F10X_HD
    if (USARTx == UART4)     UART4_Init(baudrate);
    if (USARTx == UART5)     UART5_Init(baudrate);
#endif
    xSYN6288.FlagOkay = 0;         // 初始化状态
    xSYN6288.USARTx   = USARTx;    // 记录所用串口端口
}

到了这里,关于基于STM32 + SYN6288语音播报的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 使用SYN6288语音模块

    本篇文章带大家学习一下SYN6288语音模块,这个模块可以用于车载设备,语音电子书等众多产品当中,而且这个模块支持多种编码格式,GB2312,GBK等字符编码格式。 SYN6288语音合成模块是一种语音合成设备,其可实现文字转语音功能,将输入的文字信息通过内部的处理和合成,

    2024年02月08日
    浏览(31)
  • STM32——SYN6288语音合成模块

           语音模块是我们学习工程中常见的模块之一,今天给大家分享SYN6288模块的简单使用,软件部分我会提供stm32f103zet6/stm32f407zgt6的完整代码供大家参考。深入的学习,还需要仔细阅读数据手册等资料。希望这篇文章能帮到大家!          SYN6288语音合成模块是一款基于

    2024年01月19日
    浏览(48)
  • STM32+JR6001语音播报

      文章目录 前言 一、JR6001怎么用? 二、使用步骤 1.合成语音 2.STM32代码 总结   最近在做一个利用STM32最小系统实现语音播报的小项目,加入到智能家居远程控制系统中,用来提示上位机对应操作的播报,于是就选择了JR6001作为语音播报模块,接下来就是学习过程。 提示:

    2024年02月06日
    浏览(141)
  • STM32控制JQ8400语音播报模块

    时间记录:2024/2/7 标示 说明 ONE LINE 一线操作引脚 BUSY 忙信号引脚,正在播放语音时输出高电平 RX 串口两线操作接收引脚 TX 串口两线操作发送引脚 GND 电源地引脚 DC-5V 电源引脚,3.3-5V DAC-R DAC输出右声道引脚 DAC-L DAC输出左声道引脚 SPK- 喇叭-引脚 SPK+ 喇叭+引脚 (1)时序图 (

    2024年04月11日
    浏览(32)
  • STM32使用ASR01语音播报模块

    先下载天问block软件 点击这里下载天问block  选上设备:  添加扩展:   自己再根据鹿小班模块进行操作进行相关操作,先接上usb数据线 记得先生成模型再去编译下载    发送给单片机通信时只需要vcc gnd 还有tx接上单片机rx,如果想用stm32控制语音模块,可以接线,让asr01读

    2024年02月16日
    浏览(65)
  • STM32驱动BY9301语音播报模块

    简介:STM32F103C8T6驱动BY9301语音播报模块源码介绍。 开发平台:KEIL ARM MCU型号:STM32F103C8T6 传感器型号:BY9301 特别提示:驱动内可能使用了某些其他组件,比如delay等,在文末外设模板下载地址内有。 1积分源码下载地址在文末!!! 接口图: 使用举例:  驱动源码: BY9301

    2024年02月09日
    浏览(38)
  • 嵌入式linux物联网毕业设计项目智能语音识别基于stm32mp157开发板

    stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux+单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统。开发板搭配仿真

    2024年02月02日
    浏览(60)
  • STM32 Proteus仿真语音播报SGP30火灾报警器温度湿度-0072

    STM32 Proteus仿真语音播报SGP30火灾报警器温度湿度-0072 Proteus 仿真小实验: STM32 Proteus仿真语音播报SGP30火灾报警器温度湿度-0072 功能: 硬件组成:STM32F103C6单片机 +0.960LED显示屏+DHT11温度湿度+电位器模拟SGP30二氧化碳传感器+蜂鸣器LED+串口模拟语音播报+电机模拟电风扇换气+多

    2024年02月16日
    浏览(36)
  • 语音合成芯片——SYN6658

    SYN6658是 中文语音合成芯片 ,通过UART 接口或SPI 接口通讯方式,接收待合成的文本数据,实现文本到语音的转换。可以采用GB2312、GBK、BIG5 和Unicode 四种编码方式。我们一般直接采用语音合成模块来实现语音的播放。 YS-V6:语音合成模块 ,直接将单片机(或六合一串口)与语

    2024年02月06日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包