标题:
stm32f103RCT6硬件I2C实现科大讯飞TTS语音合成芯片XFS5152CE的通信
[打印本页]
作者:
51hei200409
时间:
2020-4-10 10:27
标题:
stm32f103RCT6硬件I2C实现科大讯飞TTS语音合成芯片XFS5152CE的通信
折腾了半天,终于用stm32的硬件I2C实现了科大讯飞TTS语音合成芯片XFS5152CE的通信,XFS5152CE作为I2C接口的从设备,设备地址为: 0x80。为保证通讯的稳定性,XFS5152CE的I2C接口通信速度要求不高于15KHZ。由于I2C的一般速度是100KHZ,高速传输速率400KHZ,所有I2C的速率我设为10KZH,同时还要把占空比设第点,否则不行的。
作者:
51hei团团
时间:
2020-4-10 13:26
能分享一下代码吗?
作者:
51hei200409
时间:
2020-4-10 14:26
#include "i2c_tts.h"
#include "delay.h"
#include <string.h>
#define I2C_Speed 10000 //快速模式10k
#define I2C1_TTS_SLAVE_ADDRESS7 0x80 //从机地址
//XFS5152CE作为I2C接口的从设备,设备地址为: 0x80。
//为保证通讯的稳定性,XFS5152CE的I2C接口通信速度要求不高于15KHZ。
/**************************************************
*函数名称:void I2C_TTS_GPIO_Configuration(void)
*
*入口参数:无
*
*出口参数:无
*
*功能说明:配置使用的I/ O端口引脚
***************************************************/
void I2C_TTS_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //配置I2C1 PB6-SCL和PB7-SDA
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //模式为复用开漏输出,因此两个引脚要接上拉电阻
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/**************************************************
*函数名称:void I2C_TTS_Configuration(void)
*
*入口参数:无
*
*出口参数:无
*
*功能说明:I2C Configuration
***************************************************/
void I2C_TTS_Configuration(void)
{
I2C_InitTypeDef I2C_InitStructure;
//定义I2C初始化结构体I2C_InitStructure
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; //I2C模式
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9;
//占空比一定要选I2C_DutyCycle_16_9,不能选I2C_DutyCycle_2,因为TTS的速率不能超过15KHZ
I2C_InitStructure.I2C_OwnAddress1 = I2C1_TTS_SLAVE_ADDRESS7; //TTS地址(0x80)使能应答
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; //应答7位地址
I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;
I2C_Init(I2C1, &I2C_InitStructure); //初始化I2C
I2C_Cmd(I2C1, ENABLE); //使能I2C1
}
/**************************************************
*函数名称:void I2C_TTS_Init()
*
*入口参数:无
*
*出口参数:无
*
*功能说明:初始化用于I2C TTS驱动的外设
***************************************************/
void I2C_TTS_Init()
{
I2C_TTS_GPIO_Configuration();
I2C_TTS_Configuration();
}
/**************************************************
*函数名称:void I2C_TTS_Write(u8 *pBuffer, u8 NumByteToWrite)
*
*入口参数:pBuffer指向写入的数据缓冲区,NumByteToWrite写入TTS的字节数
*
*出口参数:无
*
*功能说明:写入多个字节的TTS。
***************************************************/
void I2C_TTS_Write(u8 *pBuffer, u8 NumByteToWrite)
{
I2C_GenerateSTART(I2C1, ENABLE); //起始信号
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // 测试和清除EV5
I2C_Send7bitAddress(I2C1, I2C1_TTS_SLAVE_ADDRESS7, I2C_Direction_Transmitter); //发送写TTS地址
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // 测试和清除EV6
while(NumByteToWrite--)
{
I2C_SendData(I2C1, *pBuffer); //发送当前字节
pBuffer++; //下一个被写入的字节
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // 测试和清除EV8
}
I2C_GenerateSTOP(I2C1, ENABLE); //停止信号
}
/***********************************************************
* 名 称: XFS5051 文本合成语音函数
* 功 能: 发送合成文本到XFS5051芯片进行合成播放
* 入口参数: *pData:文本指针变量
* 出口参数: 无
* 说 明: 本函数用于文本合成语音。
**********************************************************/
void TTS_SendFrameInfo(u8 *pData)
{
/****************需要发送的文本**********************************/
u8 Frame_Info[45];
u8 dataLength = strlen((const char *)pData); //需要发送文本的长度
/*****************帧固定配置信息**************************************/
Frame_Info[0] = 0xFD ; //构造帧头FD
Frame_Info[1] = 0x00 ; //构造数据区长度的高字节
Frame_Info[2] = dataLength+2; //构造数据区长度的低字节
Frame_Info[3] = 0x01 ; //构造命令字:合成播放命令
Frame_Info[4] = 0x01; //文本编码格式:GBK
/*******************发送帧信息***************************************/
memcpy(&Frame_Info[5], pData, dataLength);
I2C_TTS_Write(Frame_Info,5+dataLength); //发送帧配置
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1