赞
踩
目录
如何使用该模块呢,首先,SYN6288是使用串口通讯的,很多模块其实都是使用串口通讯,有助于指令的输入,那么使用串口通讯就简单了,首先配置串口等
这里的话我使用的是串口4,当然C8T6的话是只要三个串口的,如何需要使用,可以自行修改串口配置
- #ifndef _SYN6288_H_
- #define _SYN6288_H_
- #include "stm32f10x.h"
-
- /**
- ******************************************************************************
- * @File SYN6288.h
- * @Author Velscode
- * @Email velscode@gmail.com
- * @Brief TTS 芯片 SYN6288驱动头文件(基于STM32F10x)
- * 使用了USART2(A2\A3)
- ******************************************************************************
- */
- /****************************** SYN6288 引脚配置参数定义***************************************/
- #define SYN6288_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd
- #define SYN6288_GPIO_CLK RCC_APB2Periph_GPIOC
- #define SYN6288_GPIO_PORT GPIOC
- #define SYN6288_GPIO_PIN GPIO_Pin_6
- #define SYN6288_Read_GPIO_IN() GPIO_ReadInputDataBit ( SYN6288_GPIO_PORT, SYN6288_GPIO_PIN )
- // 串口4-UART4
- #define DEBUG_USARTx UART4
- #define DEBUG_USART_CLK RCC_APB1Periph_UART4
- #define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd
- #define DEBUG_USART_BAUDRATE 9600
-
- // USART GPIO 引脚宏定义
- #define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOC)
- #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
-
- #define DEBUG_USART_TX_GPIO_PORT GPIOC
- #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_10
- #define DEBUG_USART_RX_GPIO_PORT GPIOC
- #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_11
-
- #define DEBUG_USART_IRQ UART4_IRQn
- #define DEBUG_USART_IRQHandler UART4_IRQHandler
-
- void SYN6288_GPIO_Config ( void );
- void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);
- void SYN6288_Speech( USART_TypeDef * pUSARTx,char * str );
- void SYN688_USART_Config(void);
- void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
- void SYN_FrameInfo(char *HZdata);
- void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
- /* 音量控制 */
- void Volinme(uint8_t Y_L);
- /* 语调控制 */
- void Intonation(uint8_t Y_L);
- /* 语速控制 */
- void Speed_pacing(uint8_t Y_L);
- /* 人控制 */
- void speed_man(uint8_t Y_L);
- #endif /*_SYN6288_H_*/
- /* End of File ------------------------------------------------------------- */
-

这里的话就是配置参数,还有给SYN6288发指令等
- /**
- ******************************************************************************
- * @File SYN6288.c
- * @Author Velscode
- * @Email velscode@gmail.com
- * @Brief TTS 芯片 SYN6288驱动源代码文件(基于STM32F10x)
- * 使用了USART2(A2\A3)
- ******************************************************************************
- */
-
- /* Internal Function Declaration ------------------------------------------- */
- void usart2_Init(unsigned int bound);
-
- /* Header Files ------------------------------------------------------------ */
- #include "SYN6288.h"
- #include "string.h"
- #include "bsp_SysTick.h"
- #include <string.h>
-
-
- /**
- * @brief 配置嵌套向量中断控制器NVIC
- * @param 无
- * @retval 无
- */
- static void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* 嵌套向量中断控制器组选择 */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- /* 配置USART为中断源 */
- NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
- /* 抢断优先级*/
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- /* 子优先级 */
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- /* 使能中断 */
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- /* 初始化配置NVIC */
- NVIC_Init(&NVIC_InitStructure);
- }
- //读忙
- void SYN6288_GPIO_Config ( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
-
-
- /* 配置 LED1 引脚 */
- SYN6288_GPIO_APBxClock_FUN(SYN6288_GPIO_CLK, ENABLE);
- GPIO_InitStructure.GPIO_Pin = SYN6288_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init ( SYN6288_GPIO_PORT, & GPIO_InitStructure );
-
- }
-
- /**
- * @brief USART GPIO 配置,工作参数配置
- * @param 无
- * @retval 无
- */
- void SYN688_USART_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
-
- // 打开串口GPIO的时钟
- DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
-
- // 打开串口外设的时钟
- DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
-
- // 将USART Tx的GPIO配置为推挽复用模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
-
- // 将USART Rx的GPIO配置为浮空输入模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
-
- // 配置串口的工作参数
- // 配置波特率
- USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
- // 配置 针数据字长
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- // 配置停止位
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- // 配置校验位
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- // 配置硬件流控制
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- // 配置工作模式,收发一起
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- // 完成串口的初始化配置
- USART_Init(DEBUG_USARTx, &USART_InitStructure);
-
- // 串口中断优先级配置
- NVIC_Configuration();
-
- // 使能串口接收中断
- USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
-
- // 使能串口
- USART_Cmd(DEBUG_USARTx, ENABLE);
-
- // 清除发送完成标志
- //USART_ClearFlag(USART1, USART_FLAG_TC);
- }
- //其实是USART2_Send_Byte
- /***************** 发送一个字符 **********************/
- void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
- {
- /* 发送一个字节数据到USART */
- USART_SendData(pUSARTx,ch);
-
- /* 等待发送数据寄存器为空 */
- while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
- }
- /***************** 发送字符串 **********************/
- void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
- {
- unsigned int k=0;
- do
- {
- Usart_SendByte( pUSARTx, *(str + k) );
- k++;
- } while(*(str + k)!='\0');
-
- /* 等待发送完成 */
- while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
- {}
- }
-
- //语音合成
- void SYN6288_Speech( USART_TypeDef * pUSARTx,char * str )
- {
-
- if(SYN6288_Read_GPIO_IN()==Bit_RESET)/* x us后仍为高电平表示数据“1” */
- {
-
- char * p = str;
- int len = 0,check=0xFD,i;
-
- while( *p++ != 0 )
- {
- len++;
-
- }
-
- len+=3;
-
- Usart_SendByte(DEBUG_USARTx,0xFD);
-
- Usart_SendByte( DEBUG_USARTx,len / 256 );
- Usart_SendByte( DEBUG_USARTx,len % 256 );
- check = check ^ ( len / 256 ) ^ ( len % 256 );
-
- Usart_SendByte( DEBUG_USARTx,0x01 );
- Usart_SendByte( DEBUG_USARTx,0x01 );
- check = check ^ 0x01 ^ 0x01;
-
- for( i = 0; i < len-3; i++ )
- {
- Usart_SendByte(DEBUG_USARTx,*str);
- check ^= ( *str );
- str++;
- }
- Usart_SendByte(DEBUG_USARTx,check);
-
- Delay_ms(150*len);
- }
-
- }
- /* 音量控制 */
- void Volinme(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SendByte(DEBUG_USARTx,0xFD);
- Usart_SendByte(DEBUG_USARTx,0x00);
- Usart_SendByte(DEBUG_USARTx,0x06);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x5B);
- Usart_SendByte(DEBUG_USARTx,0x76);
- //控制音量
- Usart_SendByte(DEBUG_USARTx,num);
-
- Usart_SendByte(DEBUG_USARTx,0x5D);
- // uint8_t num[9] ;
- //
- // num[0] = 0xFD;
- // num[1] = 0x00;
- // num[2] = 0x06;
- // num[3] = 0x01;
- // num[4] = 0x01;
- // num[5] = 0x5B;
- // num[6] = 0x76;
- // //控制音量
- // num[7] = Y_L+48;
- // num[8] = 0x5D;
- //
- // Usart_SendByte(DEBUG_USARTx,num[8]);
- }
- /* 语调控制 */
- void Intonation(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SendByte(DEBUG_USARTx,0xFD);
- Usart_SendByte(DEBUG_USARTx,0x00);
- Usart_SendByte(DEBUG_USARTx,0x06);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x5B);
- Usart_SendByte(DEBUG_USARTx,0x74);
- //控制音量
- Usart_SendByte(DEBUG_USARTx,num);
-
- Usart_SendByte(DEBUG_USARTx,0x5D);
-
-
- }
- /* 语速控制 */
- void Speed_pacing(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SendByte(DEBUG_USARTx,0xFD);
- Usart_SendByte(DEBUG_USARTx,0x00);
- Usart_SendByte(DEBUG_USARTx,0x06);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x5B);
- Usart_SendByte(DEBUG_USARTx,0x73);
- //控制音量
- Usart_SendByte(DEBUG_USARTx,num);
-
- Usart_SendByte(DEBUG_USARTx,0x5D);
-
- }
- /* 人控制 */
- void speed_man(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SendByte(DEBUG_USARTx,0xFD);
- Usart_SendByte(DEBUG_USARTx,0x00);
- Usart_SendByte(DEBUG_USARTx,0x07);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x01);
- Usart_SendByte(DEBUG_USARTx,0x5B);
- Usart_SendByte(DEBUG_USARTx,0x6D);
- Usart_SendByte(DEBUG_USARTx,0x35);
- //控制音量
- Usart_SendByte(DEBUG_USARTx,num);
-
- Usart_SendByte(DEBUG_USARTx,0x5D);
-
- }
- /* End of File ------------------------------------------------------------- */
-
-
-

写完配置函数,当然不能忘记配置中断服务,把这段代码加入该文件的中,那么你的SYN8622还差一步就大功告成了
- #include "SYN6288.h"
-
- // 串口中断服务函数
- void DEBUG_USART_IRQHandler(void)
- {
- uint8_t ucCh;
- if ( USART_GetITStatus ( DEBUG_USARTx, USART_IT_RXNE ) != RESET )
- {
- ucCh = USART_ReceiveData( DEBUG_USARTx );
-
- if ( strUSART_Fram_Record .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) ) //预留1个字节写结束符
- strUSART_Fram_Record .Data_RX_BUF [ strUSART_Fram_Record .InfBit .FramLength ++ ] = ucCh;
-
- }
-
- if ( USART_GetITStatus( DEBUG_USARTx, USART_IT_IDLE ) == SET ) //数据帧接收完毕
- {
- strUSART_Fram_Record .InfBit .FramFinishFlag = 1;
-
- ucCh = USART_ReceiveData( DEBUG_USARTx ); //由软件序列清除中断标志位(先读USART_SR,然后读USART_DR)
- }
- }

- #include "bsp_usart1.h"
- #include "stm32f10x.h"
- #include "bsp_SysTick.h"
- #include "SYN6288.h"
- void Rap_And_God(void);
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
-
- int main ( void )
- {
-
- /* 初始化 */
- USARTx_Config ();
- //USART_Config (); //初始化串口1
- SysTick_Init (); //配置 SysTick 为 1ms 中断一次 //初始化WiFi模块使用的接口和外设
- //初始化RGB彩灯
- //语音播报系统
- SYN6288_GPIO_Config();
- SYN688_USART_Config();
-
- printf ( "\r\n 语音控制识别系统(Android+WiFi) \r\n" );
-
- while(1){
- Rap_And_God();
-
- };
-
-
-
-
- }
- /**
- * @brief 封装语音函数
- * @param 无
- * @retval 无
- */
- void Rap_And_God(void)
- {
- SYN6288_Speech(DEBUG_USARTx,"粉红的长裙");
-
-
- SYN6288_Speech(DEBUG_USARTx,"蓬松的头发");
- SYN6288_Speech(DEBUG_USARTx,"牵着我的手看最新展出的油画");
- SYN6288_Speech(DEBUG_USARTx,"无人的街道");
- SYN6288_Speech(DEBUG_USARTx,"在空荡的家里");
- SYN6288_Speech(DEBUG_USARTx,"就只剩我一个人狂欢的趴体");
- SYN6288_Speech(DEBUG_USARTx,"就当是一场梦");
- SYN6288_Speech(DEBUG_USARTx,"醒了还是很感动");
- SYN6288_Speech(DEBUG_USARTx,"还是很想被你保护我心里的惨痛");
- SYN6288_Speech(DEBUG_USARTx,"喜欢我很辛苦");
- SYN6288_Speech(DEBUG_USARTx,"其实我都清楚");
- SYN6288_Speech(DEBUG_USARTx,"放心这世界很大我记得你的叮嘱");
- }
-
- /*********************************************END OF FILE**********************/

第二章 SYN6288语音合成模块的使用https://blog.csdn.net/qq_44645742/article/details/124871041?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170212810616800185858985%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170212810616800185858985&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-124871041-null-null.142^v96^pc_search_result_base7&utm_term=syn6288%E6%A8%A1%E5%9D%97%E4%BD%BF%E7%94%A8&spm=1018.2226.3001.4187基于STM32 + SYN6288语音播报
https://blog.csdn.net/zhouml_msn/article/details/125204251?ops_request_misc=&request_id=&biz_id=102&utm_term=syn6288%E6%A8%A1%E5%9D%97%E4%BD%BF%E7%94%A8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-125204251.nonecase&spm=1018.2226.3001.4187
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。