问题遇到的现象和发生背景
用大疆的PSDK开发文字转语音的负载,通过遥控器端输入文字,被无人机接收后转为语音在扬声器上播放出来,使用STM32F407VGT6单片机驱动SYN6288语音芯片,用的usart2,已经在psdk的uart.c文件中配置相关引脚,引脚PA2和PA3,波特率默认为9600,PSDK文件本身用的HAL库,所以文字转语音的程序的串口发送函数是由标准库改成HAL库的,目前只是在程序里写要播放的内容,但是结果只能播报数字和英文,中文合成出来是其他的文字,比如”你好“,播出来就是”换,柴?“,现在问题主要就是文字无法正确合成播报。已经卡了好多天了
问题相关代码,请勿粘贴截图
/*发送文本
Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
*HZdata:要发送的文本,一个字符串*/
void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata)
{
uint8_t Frame_Info[50];
uint8_t HZ_Length; // 文本的长度
uint8_t ecc = 0; //定义校验字节
u16 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 ; //构造命令字:合成播放命令
/* 字节高5位表示背景音乐 ,低3位表示编码格式 0 是GB2312编码* 1是GBK,2是BIG5,3是Unicode
*/
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;
HAL_UART_Transmit(&s_uart2Handle, (uint8_t *)Frame_Info,5 + HZ_Length + 1, 0xFFFF);
/* 发送芯片设置命令 配置,停止合成、暂停合成等设置
Info_data:芯片的命令
*/
void YS_SYN_Set(uint8_t *Info_data)
{
uint8_t Com_Len;
Com_Len = strlen((char*)Info_data);
HAL_UART_Transmit(&s_uart2Handle, (uint8_t *)Info_data,Com_Len, 0xFFFF); // 串口发送
}
/* 文本控制标记列表
设置前景文本播放音量(含提示音效) 全局 [v?] ?为音量值 取值0-16 0 为静音 默认[v10]
设置背景音乐音量 全局 [m?] ? 为音量值,取值0-16 0为静音 默认[m4]
设置词语语速 全局 [t?] ? 为词语语速值,取值0-5 默认[t4]
设置数字处理策略 全局 [n?] ? 为0,自动判断 为1 数字作号码处理 为2 数字作数值处理 默认[n0]
SYN_FrameInfo(0, "[v16][m1][t5]你好[n2]123444444");
表示设置文本背景音乐无音量16背景音量1播放你好,数字按数值处理
*/
###### 我想要达到的结果
正确合成中文