找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6341|回复: 3
收起左侧

LD3320语音合成YS-Mini模块资料与51及stm32测试程序

[复制链接]
ID:291394 发表于 2018-5-15 16:18 | 显示全部楼层 |阅读模式
Ys-MINI语音模块资料,测试程序
0.jpg 0.jpg 0.jpg
LD3320语音合成电路原理图如下:
0.png 0.jpg

1、本程序工程采用keil4编译通过,如打不开或出现错误,请按照keil 4编译器。



二、电路连接方法
芯片为3.3V供电与其连接的单片机必须为3.3V供电的单片机,从而保证IO口电平不超过3.3V,否则将导致语音芯片驱动不成功甚至导致语音芯片烧坏,同时亦不可以采用串联电阻的方式进行分压通信这是驱动不起来的,以下为该模块的2种驱动方式的端口连接;

1、并口方式所需连接的端口

LD_P0--LDP7(8位并行数据、地址端口)
LD_A0(1:LD_P0-LD_P7为地址端口,0:LD_P0-LD_P7为s数据端口)
LD_CS(芯片片选端口)
LD_WR(芯片写端口)
LD_RD(芯片读端口)
LD_IRQ(中断信号,模块收到声音后产生一个下降沿)
LD_Reset(芯片复位端口)

2、SPI方式所需连接的端口

LD_P0->SDI(SPI输入端口)
LD_P1->SDO(SPI输出端口)
LD_P2->SDCLK(SPI时钟端口)
LD_WR->SPIS(SPI片选端口)
LD_Reset(芯片复位端口)
LD_IRQ(中断信号,模块收到声音后产生一个下降沿)
LD_CS(芯片片选端口,低电平有效)
在初步的调试过程中,不建议省略以上通信方式的任何一个引脚,例如直接将LD_CS拉低等等,底层驱动程序都必须用到以上的管脚,故在未驱动应用起来前不要自行修改避免不必要的错误导致调试不成功。
(备注:如采用SPI通信方式时建议采用硬件SPI方式;不要建议采用软SPI方式驱动,该方式对时序要求非常严格,调试存在一定的难度。电路连接没有固定格式,注意理解原理)

在调试本芯片时不建议急于求成,就算单片机型号和程序都一致都需要严格遵守“LD3320芯片简明调试步骤.pdf”手册的调试步骤,逐步测试通关,从而我们才有可能找到问题所在并解决问题。调试过程需要耐心和细心,每个步骤都不可遗漏,认真查看调试步骤,在初步的开发中,我们不需去了解寄存器和其他数据手册,避免导致思维混乱,因为提供的程序已经是调试可用寄存器配置、流程都已经完善。我们只需要且可修改的是程序端口定义、读写函数、延时函数等与底层驱动默认设置无关的内容,只有在调试完成应用起来后方可继续深入了解和参数的修改。

51单片机源程序如下:
  1. /*************************飞音云电子******************************************
  2. **        版权所有:Copyright (c) 2005 - 2010 ICRoute INC.
  3. **        CPU: STC89LE52
  4. **        晶振:22.1184MHZ
  5. **        波特率:9600 bit/S
  6. **        配套产品信息:V0.3语音开发板
  7. **  版本:zds0.0.3
  8. **  说明:本工程只具有 语音识别功能。属基本驱动代码,
  9.                                         附加串口、如不需要用到可
  10.                                         屏蔽删除,根据需要自行移植到相关的单片机上。
  11. 本程序中带/*text.....*///为串口打印输出提示内容,查看工作状态使用的,可以全部删除

  12. /************************************************************************************/
  13. #include "config.h"

  14. /************************************************************************************/
  15. //        nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器
  16. //        LD_ASR_NONE:                表示没有在作ASR识别
  17. //        LD_ASR_RUNING:                表示LD3320正在作ASR识别中
  18. //        LD_ASR_FOUNDOK:                表示一次识别流程结束后,有一个识别结果
  19. //        LD_ASR_FOUNDZERO:        表示一次识别流程结束后,没有识别结果
  20. //        LD_ASR_ERROR:                表示一次识别流程中LD3320芯片内部出现不正确的状态
  21. /***********************************************************************************/
  22. uint8 idata nAsrStatus=0;        
  23. extern void   _nop_     (void);
  24. void MCU_init();
  25. uint8 RunASR();
  26. void ProcessInt0(); //识别处理函数
  27. void  delay(unsigned long uldata);
  28. /************************************************************************
  29. 功能描述: 主函数程序入口
  30. 入口参数:        none
  31. 返 回 值:         none
  32. 其他说明:        none
  33. **************************************************************************/
  34. void  main()
  35. {
  36.         uint8 idata nAsrRes;
  37.         uint8 i=0;

  38.         MCU_init();
  39.         LD_Reset();
  40.         UartIni(); /*串口初始化*/
  41.         nAsrStatus = LD_ASR_NONE;                //        初始状态:没有在作ASR
  42.         PrintCom("串口运行中....\n"); /*text.....*/
  43.         PrintCom("口令:1、代码测试\n"); /*text.....*/
  44.         PrintCom("        2、开发板验证\n"); /*text.....*/
  45.         PrintCom("        3、检查完毕\n"); /*text.....*/

  46.         while(1)
  47.         {
  48.                 switch(nAsrStatus)
  49.                 {
  50.                         case LD_ASR_RUNING:
  51.                         case LD_ASR_ERROR:               
  52.                                 break;
  53.                         case LD_ASR_NONE:
  54.                         {
  55.                                 nAsrStatus=LD_ASR_RUNING;
  56.                                 if (RunASR()==0)        /*        启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算*/
  57.                                 {
  58.                                         nAsrStatus = LD_ASR_ERROR;
  59.                                 }
  60.                                 break;
  61.                         }

  62.                         case LD_ASR_FOUNDOK: /*        一次ASR识别流程结束,去取ASR识别结果*/
  63.                         {
  64.                                 
  65.                                 nAsrRes = LD_GetResult();                /*获取结果*/
  66.                                 PrintCom("\n识别码:"); /*text.....*/
  67.                                 UARTSendByte(nAsrRes+0x30); /*text.....*/                                
  68.                                  switch(nAsrRes)                   /*对结果执行相关操作,客户修改*/
  69.                                   {
  70.                                           case CODE_DMCS:                        /*命令“测试”*/
  71.                                                         PrintCom("“代码测试”命令识别成功\n"); /*text.....*/
  72.                                                                                                                  break;
  73.                                                 case CODE_KFBYZ:         /*命令“全开”*/
  74.                                                         PrintCom("“开发板验证”命令识别成功\n"); /*text.....*/
  75.                                                                                                                  break;
  76.                                                 case CODE_JCWB:                /*命令“复位”*/
  77.                                 
  78.                                                         PrintCom("“检查完毕”命令识别成功\n"); /*text.....*/
  79.                                                                                                                 break;
  80.                                                 default:break;
  81.                                         }                                

  82.                                 nAsrStatus = LD_ASR_NONE;
  83.                                 break;
  84.                         }
  85.                         case LD_ASR_FOUNDZERO:
  86.                         default:
  87.                         {
  88.                                 nAsrStatus = LD_ASR_NONE;
  89.                                 break;
  90.                         }
  91.                 }// switch         
  92.         }// while

  93. }
  94. /************************************************************************
  95. 功能描述:         单片机初始化
  96. 入口参数:
  97. 返 回 值:
  98. 其他说明:
  99. **************************************************************************/
  100. void MCU_init()
  101. {
  102.         P0 = 0xff;
  103.         P1 = 0xff;
  104.         P2 = 0xff;
  105.         P3 = 0xf7;
  106.         IE0=1;
  107.         EX0=1;
  108.         EA=1;
  109. }

  110. /************************************************************************
  111. 功能描述: 延时函数
  112. 调用函数:
  113. 入口参数:
  114. 返回函数:
  115. **************************************************************************/
  116. void  delay(unsigned long uldata)
  117. {
  118.         unsigned int j  =  0;
  119.         unsigned int g  =  0;
  120.         for (j=0;j<5;j++)
  121.         {
  122.                 for (g=0;g<uldata;g++)
  123.                 {
  124.                         _nop_();
  125.                         _nop_();
  126.                         _nop_();
  127.                 }
  128.         }
  129. }
  130. /************************************************************************
  131. 功能描述:         运行ASR识别流程
  132. 入口参数:        none
  133. 返 回 值:  asrflag:1->启动成功, 0—>启动失败
  134. 其他说明:        识别顺序如下:
  135.                                                 1、RunASR()函数实现了一次完整的ASR语音识别流程
  136.                                                 2、LD_AsrStart() 函数实现了ASR初始化
  137.                                                 3、LD_AsrAddFixed() 函数实现了添加关键词语到LD3320芯片中
  138.                                                 4、LD_AsrRun()        函数启动了一次ASR语音识别流程                                       
  139.                                                 任何一次ASR识别流程,都需要按照这个顺序,从初始化开始
  140. **************************************************************************/
  141. uint8 RunASR()
  142. {
  143.         uint8 i=0;
  144.         uint8 asrflag=0;
  145.         for (i=0; i<5; i++)                        //        防止由于硬件原因导致LD3320芯片工作不正常,所以一共尝试5次启动ASR识别流程
  146.         {
  147.                 LD_AsrStart();
  148.                 delay(100);
  149.                 if (LD_AsrAddFixed()==0)
  150.                 {
  151.                         LD_Reset();                        //        LD3320芯片内部出现不正常,立即重启LD3320芯片
  152.                         delay(100);                        //        并从初始化开始重新ASR识别流程
  153.                         continue;
  154.                 }
  155.                 delay(10);
  156.                 if (LD_AsrRun() == 0)
  157.                 {
  158.                         LD_Reset();                        //        LD3320芯片内部出现不正常,立即重启LD3320芯片
  159.                         delay(100);                        //        并从初始化开始重新ASR识别流程
  160.                         continue;
  161.                 }
  162.                 asrflag=1;
  163.                 break;                                        //        ASR流程启动成功,退出当前for循环。开始等待LD3320送出的中断信号
  164.         }

  165.         return asrflag;
  166. }
  167. /************************************************************************
  168. 功能描述: 中断处理函数
  169. 调用函数:
  170. 入口参数:
  171. 返回函数:
  172. **************************************************************************/
  173. void ExtInt0Handler(void) interrupt 0  
  174. {         
  175.         ProcessInt0();                                //        LD3320 送出中断信号,包括ASR和播放MP3的中断,需要在中断处理函数中分别处理
  176.         PrintCom("进入中断/n"); /*text.....*/
  177. }



复制代码

stm32代码:
  1. /***************************乐声电子科技有限公司****************************
  2. **  工程名称:YS-V0.4语音识别开发板程序
  3. **        CPU: STM32f103RCT6
  4. **        晶振:8MHZ
  5. **        波特率:9600 bit/S
  6. **        配套产品信息:YS-V0.4语音识别开发板
  7. **  说明:本程序 具备语音识别、串口通信、开发板基本功能演示。
  8. /*************端口信息********************
  9. * 接线说明
  10. * RST      PB6
  11. * CS             PB8
  12. * WR/SPIS  PB9
  13. * P2/SDCK  PB3
  14. * P1/SDO   PB4
  15. * P0/SDI   PB5
  16. * IRQ      PC1
  17. * CLK  与单片机的晶振共用

  18. ***************************乐声电子科技有限公司******************************/
  19. #include "includes.h"

  20. /* Private function prototypes -----------------------------------------------*/
  21. void RCC_Configuration(void);
  22. //void NVIC_Configuration(void);
  23. void  USART_Configuration(void);
  24. void PrintCom(USART_TypeDef* USARTx, uint8_t *Data);

  25. extern void  LD3320_main(void);
  26. /***********************************************************
  27. * 名    称: 主函数
  28. * 功    能:        程序入口
  29. * 入口参数:  无
  30. * 出口参数:        无
  31. * 说    明:        无
  32. * 调用方法:         无
  33. **********************************************************/
  34. int main(void)
  35. {
  36.   /* System Clocks Configuration */
  37.   RCC_Configuration();  //外设时钟配置
  38.   USART_Configuration();//USART 配置        
  39.         LD3320_main();                                //LD3320执行函数
  40.         while (1)
  41.   {        
  42.         }
  43.         
  44. }
  45. /***********************************************************
  46. * 名    称: void  USART_Configuration(void)
  47. * 功    能: 串口配置
  48. * 入口参数:  
  49. * 出口参数:
  50. * 说    明:
  51. * 调用方法:
  52. **********************************************************/
  53. void  USART_Configuration(void)
  54. {
  55.         USART_InitTypeDef USART_InitStructure;
  56.         GPIO_InitTypeDef GPIO_InitStructure;

  57.   USART_InitStructure.USART_BaudRate = 9600;
  58.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  59.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  60.   USART_InitStructure.USART_Parity = USART_Parity_No;
  61.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  62.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  63.   /* Configure USART1 */
  64.   USART_Init(USART1, &USART_InitStructure);        //类似与GPIO口,配置完后初始化一次
  65.   USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  //使能接收 中断
  66.   USART_ITConfig(USART1, USART_IT_TXE, ENABLE);  //使能发送 中断
  67.   USART_Cmd(USART1, ENABLE);
  68.         
  69.         
  70.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                 //USART1 TX
  71.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  72.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽输出
  73.   GPIO_Init(GPIOA, &GPIO_InitStructure);                    //A端口

  74.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                 //USART1 RX
  75.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //复用开漏输入
  76.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  77.   GPIO_Init(GPIOA, &GPIO_InitStructure);                         //A端口
  78. }
  79. /***********************************************************
  80. * 名    称:void PrintCom(USART_TypeDef* USARTx, uint8_t *Data)
  81. * 功    能:串口数据打印
  82. * 入口参数:  
  83. * 出口参数:
  84. * 说    明:
  85. * 调用方法:
  86. **********************************************************/
  87. void PrintCom(USART_TypeDef* USARTx, uint8_t *Data)
  88. {
  89.         
  90.                 while(*Data)
  91.                 {
  92.                         USART_SendData(USARTx, *Data++);    /*发送单个数据 */
  93.                         while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);/* 检查指定的USART标志位即RESET=1时发送完成*/
  94.                 }                                                                                                        
  95. }

  96. /***********************************************************
  97. * 名    称:void RCC_Configuration(void)
  98. * 功    能:配置外设时钟
  99. * 入口参数:  
  100. * 出口参数:
  101. * 说    明:
  102. * 调用方法:
  103. **********************************************************/
  104. void RCC_Configuration(void)
  105. {
  106.   SystemInit();  
  107.   /* Enable USART1, GPIOA, GPIOx and AFIO clocks */
  108. ……………………

  109. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


所有资料51hei提供下载:
YS-Mini语音识别模块配套资料(0609).zip (12.96 MB, 下载次数: 123)
回复

使用道具 举报

ID:215523 发表于 2018-9-7 08:29 | 显示全部楼层
感谢   下来看看

回复

使用道具 举报

ID:509983 发表于 2019-4-13 14:38 | 显示全部楼层
请问stm32F103ZET6和LD3320这样接可以吗?
回复

使用道具 举报

ID:509983 发表于 2019-4-13 14:39 | 显示全部楼层
dinel 发表于 2018-9-7 08:29
感谢   下来看看

请问stm32F103ZET6和LD3320这样接可以吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表