基本上也是属于一个串口开发,其基本的指令如下
参考代码:
//合成语音播报距离distance
void TTS_Vodeodistance(float distance)
{
UART3_Init(); //初始化TTS播放
u16 num,dpnum;
// printf("<G>现在开始测试\n");
delay_ms(10); //一定要加延时,确保程序正常进行
num = distance;
dpnum = (distance-num)*10;
delay_ms(10); //一定要加延时,确保TTS语音正常进行
printf("<G>前方有障碍,\n");
printf("距离障碍\n");
printf("%d \n",num);
printf(".\n");
printf("%d \n",dpnum);
printf("厘米\n");
delay_ms(10);
printf("<G>向左转\n");
}
/****************************************************************/
//初始化函数UART3_Init(),无形参和返回值
/****************************************************************/
void UART3_Init(void)
{
//1.设定通信数据位数,此处设定为8位数据位,无校验位
UART3_CR1 = 0x00;
//**************************************************
//展开UART3_CR1赋值二进制数值为:0000 0000
//含义:R8=0; 接收数据位不存在第9位
// T8=0; 发送数据位不存在第9位
// UARTD=0; 使能UART功能
// M=0; 一个起始位,8个数据位,n个停止位
// n取决于UART3_CR1中的STOP[1:0]位
// WAKE=0; UART被空闲总线唤醒
// PCEN=0: (UART模式)奇偶校验控制被禁止
// PS=0; 偶校验(校验功能未启用)
// PIEN=0; 校验中断被禁止
//*************************************************
//2.设定通信停止位位数,此处设定为1位停止位
UART3_CR3 = 0x00;
//**************************************************
//展开UART3_CR1赋值二进制数值为:0000 0000
//含义:保留位=0;必须保持清零
// LINEN=0;LIN模式被禁止
// STOP=00;配置为“00”,1个停止位
// CLKEN、CPOL、CPHA、LBCL这几位在UART3上不存在
//*************************************************
//3.配置通信波特率参数,此处配置为9600bps(16MHz频率下)
UART3_BRR2 = 0x03;
UART3_BRR1 = 0x68;
//4.使能发送和接收功能
UART3_CR2 = 0x0C;
//**************************************************
//展开UART3_CR2赋值二进制数值为:0000 1100
//含义:TIEN=0;发送中断被禁止
// TCIEN=0;发送中断完成被禁止
// RIEN=0;接收中断被禁止
// ILIEN=0;IDLE中断被禁止
// TEN=1;发送功能使能
// REN=1;接收功能使能
// RWU=0;(UART模式)正常工作模式
// PIEN=0;未发送断开字符
//*************************************************
}
/****************************************************************/
//发送单字符函数UART3_SendByte(),有形参data,无返回值
/****************************************************************/
void UART3_SendByte(u8 data)
{
UART3_SR&=0xBF;//清零发送完成标志位TC
UART3_DR=data;//发送数据到UART3数据寄存器
//while (!(UART3_SR & 0x80));//【旧版语句,有瑕疵】等待发送完毕
//原来的语句是&上了0x80,其实是判断了TXE位,这种方法不严谨,因为
//发送数据寄存器空不一定说明发送已经完成了,应该判断TC位才正确
while (!(UART3_SR & 0x40));//【新版语句,推荐】等待发送完毕
UART3_SR&=0xBF;//清零发送完成标志位TC
}
/****************************************************************/
//发送字符重定向函数putchar(),有形参ch,有返回值
/****************************************************************/
int putchar(int ch)
{
UART3_SendByte((u8)ch);
// UART1_SendByte((u8)ch);//将Printf内容发往串口
return (ch);
}