标题:
关于STC15f2k60s单片机使用syn6288语音合成模块的问题
[打印本页]
作者:
XiaoBai_Oneday
时间:
2022-5-25 17:43
标题:
关于STC15f2k60s单片机使用syn6288语音合成模块的问题
因为使用的这个单片机是双串口,所以和一般的但串口的51单片机的串口收发函数不同;
所以在使用syn6288语音合成模块的时候遇到了一些问题,在此向大佬求助;
如果有老哥有相关例程就好了,下面附上我自己修改之后的文件
单片机源程序如下:
#include "config.h"
#include "USART.h"
#include "delay.h"
#include <string.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
/************* 功能说明 **************
双串口全双工中断方式收发通讯程序。
通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.
******************************************/
/************* 本地常量声明 **************/
/************* 本地变量声明 **************/
/************* 本地函数声明 **************/
//SYN6288语音模块函数
/*
VCC--5V
RXD--P1.1
TXD--P1.0
GND--GND
*/
//用串口2发送一字节数据
void UART2_SendByte(uchar DAT)
{
TX2_Buffer[COM2.TX_write] = DAT; //装发送缓冲
if(++COM2.TX_write >= COM_TX2_Lenth) COM2.TX_write = 0;
if(COM2.B_TX_busy == 0) //空闲
{
COM2.B_TX_busy = 1; //标志忙
SET_TI2(); //触发发送中断
}
}
//串口2发送字符串数据
void UART2_SendString(uchar *DAT, uchar len)
{
uchar i;
for(i = 0; i < len; i++)
{
TX2_write2buff(*DAT++);
}
}
//Music: 0:无背景音乐 1~15:选择背景音乐 语音读字符串输出
void SYN_FrameInfo(uchar Music, uchar *HZdata)
{
/****************需要发送的文本**********************************/
uchar Frame_Info[50];
uchar HZ_Length;
uchar ecc = 0; //定义校验字节
uint 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;
UART2_SendString(Frame_Info, 5 + HZ_Length + 1);
}
//语音模块设定函数
/************* 外部函数和变量声明 *****************/
/**************语音芯片设置命令*********************/
uchar SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
uchar SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成
uchar SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成
uchar SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询
uchar SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN 状态命令
void UART_config(void)
{
COMx_InitDefine COMx_InitStructure; //结构定义
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
COMx_InitStructure.UART_BaudRate = 9600ul; //波特率, 一般 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE
COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE
COMx_InitStructure.UART_Interrupt = ENABLE; //中断允许, ENABLE或DISABLE
COMx_InitStructure.UART_Polity = PolityLow; //中断优先级, PolityLow,PolityHigh
COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //切换端口, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必须使用内部时钟)
COMx_InitStructure.UART_RXD_TXD_Short = DISABLE; //内部短路RXD与TXD, 做中继, ENABLE,DISABLE
USART_Configuration(USART1, &COMx_InitStructure); //初始化串口1 USART1,USART2
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BaudRate = 9600ul; //波特率, 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE
COMx_InitStructure.UART_Interrupt = ENABLE; //中断允许, ENABLE或DISABLE
COMx_InitStructure.UART_Polity = PolityLow; //中断优先级, PolityLow,PolityHigh
COMx_InitStructure.UART_P_SW = UART2_SW_P10_P11; //切换端口, UART2_SW_P10_P11,UART2_SW_P46_P47
USART_Configuration(USART2, &COMx_InitStructure); //初始化串口2 USART1,USART2
}
/**********************************************/
void main(void)
{
UART_config();
while(1)
{
uchar idata weight_str[50];
int m=135;
sprintf(weight_str,"%s%d%s","[v6][t2]当前的体重为",m,"斤");
//选择背景音乐2。(0:无背景音乐 1-15:背景音乐可选)
//m[0~16]:0背景音乐为静音,16背景音乐音量最大
//v[0~16]:0朗读音量为静音,16朗读音量最大
//t[0~5]:0朗读语速最慢,5朗读语速最快
//其他不常用功能请参考数据手册
SYN_FrameInfo(0, weight_str);
/*SYN_FrameInfo(0, "[v6][t2]您的体重是");
delay(2000);
SYN_FrameInfo(0, p);
delay(2000);
SYN_FrameInfo(0, "斤");*/
//暂停合成,此时没有用到,用于展示函数用法
//YS_SYN_Set(SYN_SuspendCom);
delay_ms(100);
}
}
复制代码
语音程序.7z
2022-5-26 21:09 上传
点击文件名下载附件
42.88 KB, 下载次数: 11
这是我自己修改的程序
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1