TTS音声放送

基本的にシリアルポート開発に属しており、基本的な手順は次のとおり
ここに画像の説明を挿入
です。参照コード:

//合成语音播报距离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); 
}

おすすめ

転載: blog.csdn.net/weixin_44751294/article/details/111593385