基本上也是属于一个串口开发,其基本的指令如下
参考代码:
//合成语音播报距离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); }