重要的懒人提醒:代码下载方式,躺在最底那儿~~
一、接线示例:
文章图片
二、模块重点: 1:5V供电 ,功耗约120mA (带图中小喇叭);
2:最少接3根线:5V,GND,RXD,TXD-可不接,BY-可不接
3:两种音源输出接口,排针、标准3.5mm接口,接小喇叭和普通音箱都无压力。
4:每次最多可转换200字节文本;
三、代码重点: 1:串口配置波特率9600,输出文本到模块,模块自动输出语音;
2:输出的文本中,可插入控制参数,以实现更自然的朗读。
3:.....想不出有啥要注意了;厂家的封装和设计,令使用相当的简单。
四、实现代码
1:main.c文件
#include
#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-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
#include "bsp_usart.h"/*****************************************************************************
** 全局变量 (无要修改)
****************************************************************************/
typedef struct
{
uint8_tFlagOkay;
// 状态标记, 暂未用到,保留;
0=未初始化或异常, 1=正常
uint32_tBaudrate;
// 记录所用的串口波特率,暂未用到,保留
USART_TypeDef*USARTx;
// 记录所用的端口
}xSYN6288_TypeDef;
extern xSYN6288_TypeDefxSYN6288;
// 声明为全局变量,方便记录信息、状态/*****************************************************************************
** 声明全局函数
**
****************************************************************************/
void SYN6288_Init(USART_TypeDef *USARTx);
void SYN6288_Say(char *fmt, ...);
#endif
3:bsp_syn6288.c文件
#include "bsp_syn6288.h"
#include "stdarg.h"xSYN6288_TypeDefxSYN6288;
// 全局变量结构体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)
{
/****************需要发送的文本**********************************/
unsignedcharFrame_Info[50];
unsignedcharHZ_Length;
unsignedcharecc= 0;
//定义校验字节
unsignedint 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 charstr_1[200];
// 缓存区1,模块每次可转换200字节
static charstr_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;
// 记录所用串口端口
}
五、资料下载
方式1:CSDN下载(5积分,有积分的老板,得大力支持,很缺积分!)
https://download.csdn.net/download/zhouml_msn/85592868
方式2:Q群文件夹 (常常满员,能不能进,得看有没有人退出了)
【STM32|基于STM32 + SYN6288语音播报】887199504
推荐阅读
- STM32|bootloader | 基于STM32F407 - 使用STM32Cubeprogrammer的USB DFU进行固件烧写
- 物联网学习|基于iOS快捷指令和Siri控制连接OneNET物联网平台的STM32的智能安防家居系统
- 晶振|SiT3807(高性能单端压控振荡器VCXO)
- 笔记|使用Python自动调节EFR32的高频晶振(HFXO)电容器组-CTune
- 硬件经验|Lightning 转 USB Type-A/Type-C 思路
- fpga开发|TDC进位链
- RT-Thread|RT-Thread记录(十七、AT组件 — ESP8266使用 at_device 软件包联网)
- RT-Thread和STM32|RT-Thread IIC总线官方实例实现
- RT-Thread|RT-Thread记录(十四、I/O 设备模型之ADC设备)