赞
踩
目录
遇到的问题1:使用STM32+SYN6288语音模块时,可以正常进行英文和数字的播报,但改为中文进行播报时,播报的是乱码汉字。
两个问题亲测无误,完美解决。附工程源码。
所用模块:绿深SYN6288语音合成模块
解决方案:
1.首先点击设置,在Editor-Encoding处选择为GB3312中文编码
2.找到工程文件中的main.c文件夹
右键点击编辑,进入记事本下
点击文件--另存为
选择编码为ANSI
重新运行,完美解决问题,进行中文语音播报。
出现的警告处如下图所示
分析原因:
找到函数SYN_FrameInfo定义处,可以看到源码写的入口函数是uint8_t *HZdata或者u8 *HZdata
这个警告是由于尝试将一个类型为 char
的数组传递给一个类型为 uint8_t *
的参数而引起的。
在C/C++中,字符数组(char
数组)的元素类型是 signed char
,而 uint8_t
则是无符号整数类型。因此,将 char
数组传递给 uint8_t *
参数时,会发生指针类型不匹配的警告。
解决方案:
修改为:
SYN_FrameInfo(0,(uint8_t *)"[v1][m0][t0]阿齐大帅哥");
将数组重新强制类型转换为uint8_t *
可以看到警告消失,完美解决问题。
所用模块:绿深SYN6288语音合成模块
main.c
- while(1)
- {
- //syn6288
- //选择背景音乐2。(0:无背景音乐 1-15:背景音乐可选)
- //m[0~16]:0背景音乐为静音,16背景音乐音量最大
- //v[0~16]:0朗读音量为静音,16朗读音量最大
- //t[0~5]:0朗读语速最慢,5朗读语速最快
- //其他不常用功能请参考数据手册
- SYN_FrameInfo(0,(uint8_t *)"[v1][m0][t0]阿齐大帅哥");
- Delay_ms(1500);
- Delay_ms(1500);
- Delay_ms(1500);
- Delay_ms(1500);
- //暂停合成,此时没有用到,用于展示函数用法
- //YS_SYN_Set(SYN_SuspendCom);
- }
-
- //完整工程源码,见下载链接:https://download.csdn.net/download/m0_61712829/89319852
1. 包括必要的头文件,如“stm32f4xx.h”,“stdint.h”,和自定义头延迟,LED控制,系统配置,SYN6288芯片,和USART通信。
2. 定义了几个用于控制SYN6288芯片的命令数组。这些命令包括停止合成、暂停合成、恢复合成、检查状态和将芯片置于电源关闭模式。
3. 初始化系统中断优先级分组,设置延迟、UART通信和SYN6288芯片。
4. 进入一个while循环,它向SYN6288芯片发送一个语音合成命令,说出短语“阿齐大帅哥”。然后它延迟了4次1.5秒(1500毫秒)。
syn6288.c
- //Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
- void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata)
- {
-
- }
-
-
- void YS_SYN_Set(uint8_t *Info_data)
- {
-
- }
-
- //完整工程源码,见下载链接:https://download.csdn.net/download/m0_61712829/89319852
1. **SYN_FrameInfo**:该函数构造一个要发送到SYN6288芯片的数据帧。它需要两个参数:选择的背景音乐(' music ')和要合成的文本数据(' HZdata ')。它通过设置各种字节来构建帧,包括帧头、数据长度、命令、命令参数,并计算校验和。最后通过USART通信将构造好的帧发送出去。
2. **YS_SYN_Set**:该函数是一个更通用的函数,用于向SYN6288芯片发送配置命令。它接受一个指向包含配置信息的字节数组(`Info_data`)的指针。它计算命令的长度并通过USART发送。
这两个函数都依赖于`USART .h`中的`USART1_SendString`函数来通过USART通信发送数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。