基于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:.....想不出有啥要注意了;厂家的封装和设计,令使用相当的简单。


四、实现代码

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初始化; 用于printfLed_Init();                                       // LED 初始化LED_RED_ON;                                       // 点亮红灯Key_Init();                                       // 按键 初始化SYN6288_Init(USART2);                             // 初始化; USART2-PA2SYN6288_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 ;                //构造帧头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;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~5SYN6288_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_HDif (USARTx == UART4)     UART4_Init(baudrate);if (USARTx == UART5)     UART5_Init(baudrate);
#endifxSYN6288.FlagOkay = 0;         // 初始化状态xSYN6288.USARTx   = USARTx;    // 记录所用串口端口
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.32 综合案例2.0 - TTS语音云播报(支持M320开发板)

HaaS506 - TTS语音云播报 简介准备硬件接口代码流程功能实现1、物联网平台开发2、设备端开发代码调试 3.应用平台开发3.1新建‘普通项目’3.2关联产品和设备3.3新建移动应用 简介 用python开发板写的云喇叭&#xff0c;文字转语音&#xff0c;附教程源码 手机端发送文字&#x…

深圳知名语音ic品牌,语音芯片方案公司,多功能语音芯片,WTV890

随着人工智能技术的不断发展&#xff0c;语音交互已成为智能家居、智能医疗、消费类电子等领域的主流趋势。WTV890作为深圳知名的语音IC品牌&#xff0c;凭借着卓越的性能、丰富的扩展功能和灵活的应用&#xff0c;已成为众多需要语音交互的智能设备的首选方案。 WTV890-32N 有…

chatgpt赋能python:用Python生成动画:带你深入了解Python动画生成技术

用Python生成动画&#xff1a;带你深入了解Python动画生成技术 Python作为一门高效的编程语言&#xff0c;已经被广泛应用于各个领域&#xff0c;包括数据分析、机器学习、自动化测试等。除此之外&#xff0c;Python还可以用于生成动画&#xff0c;帮助我们更直观地理解一些复…

银联AID

应用标识 application identifier&#xff1b;AID 由注册的应用提供商标识&#xff08;RID&#xff09;以及专用应用标识符扩展&#xff08;PIX&#xff09;组成 AID:即唯一标识一个应用&#xff0c;分为两部分&#xff0c;RID(5字节)PIX&#xff08;最多11字节&#xff09; …

信用卡的支付清算

一、分享背景 Hi 大家好&#xff0c;我今天给大家分享是信用卡清算方面的内容&#xff0c;今天的分享主要分四块来讲&#xff1a; 定价模式 业务流程 清算流程 常见问题 二、分享内容 1、定价模式 首先给大家分享一下关于信用卡定价方面的内容&#xff0c;信用卡的定价…

金融支付-银联卡支付系统产品介绍

一、系统概述 银联卡支付业务是中国现代化支付方式中最重要的一种&#xff0c;村镇银行作为金融支付机构&#xff0c;银联卡支付业务在其日常经营活动中&#xff0c;占有很大的比重。金电银联卡支付系统正是着眼于村镇银行业务需求&#xff0c;结合村镇银行业务特点&#xff0c…

SpringBoot使用银联支付

目录 前言 一、银联支付java sdk 二、官方DEMO 三、springboot项目使用银联支付 3.1、新建项目 3.2、配置 3.3、封装客户端 写在后面 前言 项目里使用了微信支付&#xff0c;支付宝支付。但是还不满足&#xff01;我们还需要银联支付&#xff01;&#xff01;那就去看…

银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。 使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位…

苹果手机充值显示服务器繁忙,iTunes充值常见错误和解决方法

iTunes充值常见错误和解决方法 小编归纳总结了常见的iTunes充值异常和解决方法&#xff0c;包括充值未到账、语音操作异常、订单状态异常、系统验证信息错误、支付密码异常、账户金额限制、银行卡状态异常及系统异常8大常见iTunes充值错误&#xff0c;以方便果粉顺利充值iTunes…

雅思阅读笔记

一、一个星期七天 1.Monday 2.Tuesday 3.Wednesday 4.Thursday5. Friday 6.Saturday 7.Sunday 二、一年十二个月 1.January 2.February 3.March 4.April 5.May 6.June 7.July 8.August 9.September 10. October 11.November 12.December 三、一年四季 1.spring 2.summer 3.autu…

雅思复习总结

文章目录 1. 考前复习阶段1.1 阅读1.2 听力1.3 写作1.4 口语 2. 考试过程3. 最后成绩 刚刚考完雅思&#xff0c;这是我第一次考雅思&#xff0c;总结一下这次考试的经验。 1. 考前复习阶段 对于中国考生来说&#xff0c;阅读和听力是强项&#xff0c;只需做大量的练习即可。重…

计算雅思成绩C语言,雅思成绩到底如何计算的?

很多烤鸭在漫漫屠鸭路上时常会感到困惑&#xff1a;明明自己发挥不错&#xff0c;为什么成绩却和想象的不同&#xff1f;总分达标了&#xff0c;小分却不够该怎么办&#xff1f; 其实雅思成绩单隐藏了很多的信息&#xff0c;今天我们来分析两份典型的成绩单&#xff0c;帮助烤鸭…

ubc本科计算机雅思要求,英属哥伦比亚大学雅思要求

英属哥伦比亚大学雅思要求是6.5分&#xff1b;托福93分。 英属哥伦比亚大学院系 不列颠哥伦比亚大学共设有25个院系&#xff1a; 应用科学系(Faculty of Applied Science) 建筑与园林建筑学院 (School of Architecture and Landscape Architecture) 文学系 (Faculty of Arts) 听…

【b站雅思笔记】Charlie有好好学习 - 雅思听力

〇、前情提要 最近备考雅思&#xff0c;学习一下前人经验。 参考&#xff1a; 手把手教你做地图题 | 雅思听力地图题 https://www.bilibili.com/video/BV1Pp4y167sM?t1331手把手教你做听力Part4 | 雅思听力填空题 https://www.bilibili.com/video/BV1AK4y1W7dh手把手教你做…

雅思口语P3的逻辑

找最核心的地方 核心-> 玩音乐的好处 然后拉上孩子的关系 然后拉上父母的关系

雅思小作文 柱状图

逻辑不太对&#xff0c;可以找三个女生下降的&#xff0c;两个上升的来写。因为男女比例增长都是相反的。 The bar charts compare the proportion of boy and girl top students in different courses in 1996 and 2000. Girls seemed have the best performance in Languages…

DataV+Echarts

1. 安装 vue3 也就是安装了一下vue3&#xff0c;但是 dataV 和 Echarts 的学习并没有使用vue的脚手架去创建一个项目。 原因有两点&#xff1a; dataV 目前对 vue3 的支持并不是很友好&#xff0c;主要还是基于 vue2 框架的一个组件库。脚手架创建 vue 项目确实会使开发更加的有…

基于Arduino通过并联L298N实现四驱麦克纳姆轮巡迹小车

1 前言 本人也是零基础进行Arduino学习的初学者&#xff0c;做小车期间遇到过很多困难&#xff0c;在此写下整个小车的制作流程以及遇到的问题与解决方案&#xff0c;希望对后来者有所帮助。在制作期间参考了许多文章得到了大佬的指点&#xff0c;以及下面展示成果如建模等是由…