博舍

基于STM32的SYN6288语音播报模块驱动实验(代码开源) 机器人语音播报模块怎么用的

基于STM32的SYN6288语音播报模块驱动实验(代码开源)

前言:本文为手把手教学 SYN6288语音播报模块的驱动实验,本教程的 MCU 采用STM32F103ZET6。通过 CubeMX 软件配置UART串口协议驱SYN6288模块进行规定的语音播报。考虑到 SYN6288模块的集成化与智能化很高,所以该模块的使用是极其便利的。(文末代码开源!)

硬件设备:STM32F103ZET6;SYN6288;

硬件实物图:

效果图:

引脚连接:

SYN6288引脚:

RX-->PA2

TX-->PA3

VCC-->5V

GND-->GND

一、SYN6288概述

SYN6288中文语音合成芯片是北京宇音天下科技有限公司于2010年初推出的一款性/价比更高,效果更自然的一款中高端语音合成芯片。SYN6288通过异步串口(UART)通讯方式,接收待合成的文本数据,实现文本到语音(或TTS语音)的转换。

宇音天下于2002年最早研制出国内首款语音合成芯片OSYNO6188。公司最新推出的SYN6288语音合成芯片,继承了OSYNO6188语音芯片的优秀特点:最小SSOP28L贴片封装、硬件接口简单、低功耗、音色清亮圆润、极高的性/价比;除此之外,SYN6288在识别文本/数字/字符串更智能、更准确,语音合成自然度更好、可懂度更高。SYN6288语音合成效果和智能化程度均得到大幅度提高,是一款真正面向中高端行业应用领域的中文语音合成芯片。

SYN6288语音合成芯片的诞生,将推动TTS语音合成技术的行业应用走向更深入、更广泛!

二、SYN6288核心叙述

1、SYN6288默认波特率为:9600,输出字符串文本到模块,模块自动输出语音; ;

2、输出的字符文本可以加入前缀(控制参数,实现音量语速等控制),以实现更自然的朗读。

3、芯片支持任意中文文本的合成,可以采用GB2312、GBK、BIG5和Unicode四种编码方式。芯片支持英文字母的合成,遇到英文单词时按字母方式发音。每次合成的文本量可达200个字节

4、芯片具有文本智能分析处理功能,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本,芯片能够根据内置的文本匹配规则进行正确的识别和处理。例如:“2008-12-21”读作“二零零八年十二月二十一日”,“10:36:28”读作“十点三十六分二十八秒”,“28℃”读作“二十八摄氏度”等等。 

三、系统构成

最小系统包括:控制器模块、SYN6288语音合成芯片、功放模块和喇叭。

主控制器(MCU)和SYN6288语音合成芯片之间通过UART接口连接,控制器可通过通讯接口向SYN6288语音合成芯片发送控制命令和文本,SYN6288语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。

SYN6288提供一组全双工的异步串行通讯(UART)接口,实现与微处理器或PC的数据传输。SYN6288利用TxD和RxD以及GND实现串口通信。其中GND作为地信号。SYN6288芯片支持UART接口通讯方式,通过UART接口接收上位机发送的命令和数据,允许发送数据的最大长度为206字节。

四、CubeMX配置

1、RCC配置外部高速晶振(精度更高)——HSE;

2、SYS配置:Debug设置成SerialWire(否则可能导致芯片自锁);

3、USART2配置:异步通讯UART驱动SYN6288,波特率:9600;

4、时钟树配置

5、工程配置

五、代码与解析5.1SYN6288代码

syn6288.h:

#ifndef__SYN6288_H#define__SYN6288_H#include"stm32f1xx_hal.h"voidSYN_FrameInfo(uint8_tMusic,uint8_t*HZdata);voidYS_SYN_Set(uint8_t*Info_data);#endif

syn6288.c:

#include"syn6288.h"#include"usart.h"#include"string.h"//Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐voidSYN_FrameInfo(uint8_tMusic,uint8_t*HZdata){/****************需要发送的文本**********************************/unsignedcharFrame_Info[50];unsignedcharHZ_Length;unsignedcharecc=0;//定义校验字节unsignedinti=0;HZ_Length=strlen((char*)HZdata);//需要发送文本的长度/*****************帧固定配置信息**************************************/Frame_Info[0]=0xFD;//构造帧头FDFrame_Info[1]=0x00;//构造数据区长度的高字节Frame_Info[2]=HZ_Length+3;//构造数据区长度的低字节Frame_Info[3]=0x01;//构造命令字:合成播放命令Frame_Info[4]=0x01|Music

STM32驱动BY9301语音播报模块

简介:STM32F103C8T6驱动BY9301语音播报模块源码介绍。

开发平台:KEILARM

MCU型号:STM32F103C8T6

传感器型号:BY9301

特别提示:驱动内可能使用了某些其他组件,比如delay等,在文末外设模板下载地址内有。

1积分源码下载地址在文末!!!

接口图:

使用举例:

#include#include"BY9301.h"intmain(){BY9301Class.init(9600);//初始化BY9301Class.setVolume(30);//音量30BY9301Class.sayFileID(1);//播放序号为1的mp3文件while(1){}}

 驱动源码:

BY9301.c 

/*BY9301语音播报模块*/#include"main.h"voidBY9301_USART_Init(uint32_tbaudRate);staticvoidBY9301_SendString(uint8_t*str);staticvoidBY9301_Say(uint8_tNOx);staticvoidBY9301_setVolume(uint8_tvolume);staticvoidBY9301_playPause(uint8_tplayPause);staticuint8_tBY9301_Busy(void);BY9301ClassStructBY9301Class={.init=BY9301_USART_Init,.sayFileID=BY9301_Say,.isBusy=BY9301_Busy,.setVolume=BY9301_setVolume,.playPause=BY9301_playPause};//VOICEUSARTdefine#if1#defineBY9301_USARTx_PORTUSART1#defineBY9301_USARTx_CLKRCC_APB2Periph_USART1#defineBY9301_USARTx_APBxClkCmdRCC_APB2PeriphClockCmd#defineBY9301_USARTx_PORT_CLK(RCC_APB2Periph_GPIOA)#defineBY9301_USARTx_PORT_APBxClkCmdRCC_APB2PeriphClockCmd#defineBY9301_USARTx_TX_PORTGPIOA#defineBY9301_USARTx_TX_PINGPIO_Pin_9#defineBY9301_USARTx_RX_PORTGPIOA#defineBY9301_USARTx_RX_PINGPIO_Pin_10#defineBY9301_USARTx_IRQUSART1_IRQn#defineBY9301_USARTx_IRQHandlerUSART1_IRQHandler#else#defineBY9301_USARTx_PORTUSART2#defineBY9301_USARTx_CLKRCC_APB1Periph_USART2#defineBY9301_USARTx_APBxClkCmdRCC_APB1PeriphClockCmd#defineBY9301_USARTx_PORT_CLK(RCC_APB2Periph_GPIOA)#defineBY9301_USARTx_PORT_APBxClkCmdRCC_APB2PeriphClockCmd#defineBY9301_USARTx_TX_PORTGPIOA#defineBY9301_USARTx_TX_PINGPIO_Pin_2#defineBY9301_USARTx_RX_PORTGPIOA#defineBY9301_USARTx_RX_PINGPIO_Pin_3#defineBY9301_USARTx_IRQUSART2_IRQn#defineBY9301_USARTx_IRQHandlerUSART2_IRQHandler#endif#defineBUSY_GPIO_PORTGPIOB/*GPIO端口*/#defineBUSY_GPIO_CLKRCC_APB2Periph_GPIOB/*GPIO端口时钟*/#defineBUSY_GPIO_PINGPIO_Pin_12/*连接到SCL时钟线的GPIO*/voidBY9301_USARTx_IRQHandler(void){if(USART_GetITStatus(BY9301_USARTx_PORT,USART_IT_RXNE)!=RESET){USART_ClearITPendingBit(BY9301_USARTx_PORT,USART_IT_RXNE);}}/***@brief语音串口USART初始化*@parambaudRate:波特率*@retvalNone*/staticvoidBY9301_USART_Init(uint32_tbaudRate){NVIC_InitTypeDefNVIC_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructure;/*GPIO时钟配置*/BY9301_USARTx_PORT_APBxClkCmd(BY9301_USARTx_PORT_CLK,ENABLE);/*串口时钟配置*/BY9301_USARTx_APBxClkCmd(BY9301_USARTx_CLK,ENABLE);/*USARTTx--复用推挽输出*/GPIO_InitStructure.GPIO_Pin=BY9301_USARTx_TX_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(BY9301_USARTx_TX_PORT,&GPIO_InitStructure);/*USARTRx--浮空输入*/GPIO_InitStructure.GPIO_Pin=BY9301_USARTx_RX_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(BY9301_USARTx_RX_PORT,&GPIO_InitStructure);//BUSY输入RCC_APB2PeriphClockCmd(BUSY_GPIO_CLK,ENABLE);GPIO_InitStructure.GPIO_Pin=BUSY_GPIO_PIN;GPIO_Init(BUSY_GPIO_PORT,&GPIO_InitStructure);/*串口参数配置*/USART_InitStructure.USART_BaudRate=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(BY9301_USARTx_PORT,&USART_InitStructure);//串口初始化/*串口使能*/USART_Cmd(BY9301_USARTx_PORT,ENABLE);/*串口中断使能*/USART_ITConfig(BY9301_USARTx_PORT,USART_IT_RXNE,ENABLE);/*NVIC优先级分组*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);/*NVIC参数配置*/NVIC_InitStructure.NVIC_IRQChannel=BY9301_USARTx_IRQ;//中断源有特定的命名NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//主优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//子优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能NVICNVIC_Init(&NVIC_InitStructure);//NVIC初始化}/***@brief语音串口发送具体协议参见手册*@paramstr:要发送的内容*@retvalNone*/staticvoidBY9301_SendString(uint8_t*str){if(str[1]==0)return;uint8_ti;for(i=0;i30)volume=30;uint8_tarr[7];arr[0]=0x7E;arr[1]=0x04;arr[2]=0x31;arr[3]=volume;arr[4]=arr[1]^arr[2]^arr[3];arr[5]=0xEF;BY9301_SendString(arr);}/***@brief设置播放暂停*@paramplayPause:0:pause1:play*@retvalNone*/staticvoidBY9301_playPause(uint8_tplayPause){uint8_tarr[6];arr[0]=0x7E;arr[1]=0x03;if(playPause){arr[2]=0x01;}else{arr[2]=0x02;}arr[3]=arr[1]^arr[2];arr[4]=0xEF;BY9301_SendString(arr);}/***@briefBusy引脚状态*@paramNone*@retval返回Busy引脚电平状态1:busy0:idle*/staticuint8_tBY9301_Busy(void){returnGPIO_ReadInputDataBit(BUSY_GPIO_PORT,BUSY_GPIO_PIN);}

 BY9301.h

#ifndef__BY9301_AS_H#define__BY9301_AS_H#include"main.h"typedefstruct{void(*init)(uint32_t);void(*sayFileID)(uint8_t);void(*setVolume)(uint8_t);void(*playPause)(uint8_t);uint8_t(*isBusy)(void);}BY9301ClassStruct;externBY9301ClassStructBY9301Class;#endif

驱动下载地址:

https://download.csdn.net/download/m0_50669075/87672764

STM32工程模板、外设模板、模块模板下载地址:

stm32_template:STM32F103工程模板,外设模板,模块模板。模块模板包括:DHT11温湿度传感器,OLED屏幕,DS18B20温度传感器,DS1302时钟模块,红外测温模块,RFID模块,SIM900A短信模块,OneNET入网,ADXL345三轴传感器,离线语音识别模块,语音播报模块,甲醛传感器,PM2.5模块,SG90舵机,健康检测模块,消息队列示例,链表示例,分时调度系统示例等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇