久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3384|回復: 2
打印 上一主題 下一主題
收起左側

LD3320語音控制LED STM32單片機源碼下載

[復制鏈接]
跳轉到指定樓層
樓主
LD3320語音芯片的stm32單片機驅動源碼工程:

完整源碼下載:
基于語音檢測的機器人控制.rar (303.11 KB, 下載次數: 58)






主程序:
  1. #include  <stm32f10x.h>
  2. #include "stm32f10x_conf.h"
  3. #include "LDchip.h"
  4. #include "Reg_RW.h"
  5. #include "LD3320_config.h"


  6. /************************************************************************************
  7. //        nAsrStatus 用來在main主程序中表示程序運行的狀態,不是LD3320芯片內部的狀態寄存器
  8. //        LD_ASR_NONE:                表示沒有在作ASR識別
  9. //        LD_ASR_RUNING:                表示LD3320正在作ASR識別中
  10. //        LD_ASR_FOUNDOK:                表示一次識別流程結束后,有一個識別結果
  11. //        LD_ASR_FOUNDZERO:        表示一次識別流程結束后,沒有識別結果
  12. //        LD_ASR_ERROR:                表示一次識別流程中LD3320芯片內部出現不正確的狀態
  13. *********************************************************************************/
  14. uint8 nAsrStatus=0;       

  15. void LD3320_Init(void);
  16. uint8 RunASR(void);
  17. void ProcessInt0(void);
  18. void LD3320_EXTI_Cfg(void);
  19. void LD3320_Spi_cfg(void);
  20. void LD3320_GPIO_Cfg(void);
  21. void LED_gpio_cfg(void);

  22. /***********************************************************
  23. * 名    稱: LD3320_main(void)
  24. * 功    能: 主函數LD3320程序入口
  25. * 入口參數:  
  26. * 出口參數:
  27. * 說    明:
  28. * 調用方法:
  29. **********************************************************/

  30. void  LD3320_main(void)
  31. {
  32.         uint8 nAsrRes=0;
  33.         LD3320_Init();          
  34.   PrintCom(TEST_USART," 串口運行中....\r\n");
  35.         PrintCom(TEST_USART,"口令:1、流水燈\r\n");
  36.         PrintCom(TEST_USART,"2、閃爍\r\n");                                
  37.         PrintCom(TEST_USART,"3、按鍵觸發\r\n");                
  38.         PrintCom(TEST_USART,"4、全滅\r\n");                        

  39.         nAsrStatus = LD_ASR_NONE;                //        初始狀態:沒有在作ASR

  40.         while(1)
  41.         {
  42.         switch(nAsrStatus)
  43.                 {
  44.                         case LD_ASR_RUNING:
  45.                         case LD_ASR_ERROR:               
  46.                                         break;
  47.                         case LD_ASR_NONE:
  48.                                         nAsrStatus=LD_ASR_RUNING;
  49.                                         if (RunASR()==0)        //        啟動一次ASR識別流程:ASR初始化,ASR添加關鍵詞語,啟動ASR運算
  50.                                         {               
  51.                                                 nAsrStatus = LD_ASR_ERROR;
  52.                                         }
  53.                                         break;

  54.                         case LD_ASR_FOUNDOK:
  55.                                          nAsrRes = LD_GetResult( );        //        一次ASR識別流程結束,去取ASR識別結果                                                                                 
  56.                                                 PrintCom(TEST_USART,"\r\n識別碼:");                       
  57.                                                 USART_SendData(TEST_USART,nAsrRes+0x30);                
  58.                                                                
  59.                                          switch(nAsrRes)                   /*對結果執行相關操作,客戶修改*/
  60.                                                 {
  61.                                                         case CODE_LSD:                        /*命令“流水燈”*/
  62.                                                                 PrintCom(TEST_USART,"“流水燈”命令識別成功\r\n");
  63.                                                                                                                          break;
  64.                                                         case CODE_SS:         /*命令“閃爍”*/
  65.                                                                 PrintCom(TEST_USART,"“閃爍”命令識別成功\r\n");
  66.                                                                                                                          break;
  67.                                                         case CODE_AJCF:                /*命令“按鍵觸發”*/
  68.                                        
  69.                                                                 PrintCom(TEST_USART,"“按鍵觸發”命令識別成功\r\n");
  70.                                                                                                                         break;
  71.                                                         case CODE_QM:                /*命令“全滅”*/
  72.                                        
  73.                                                                 PrintCom(TEST_USART,"“全滅”命令識別成功\r\n");
  74.                                                                                                                         break;
  75.                                                         default:break;
  76.                                                 }       
  77.                                                 nAsrStatus = LD_ASR_NONE;
  78.                                         break;
  79.                        
  80.                         case LD_ASR_FOUNDZERO:
  81.                         default:
  82.                                                 nAsrStatus = LD_ASR_NONE;
  83.                                                 break;
  84.                         }//switch
  85.         //開發板測試延時部分(用戶可刪除)               
  86.                 Board_text(nAsrRes );
  87.         }// while

  88. }
  89. /***********************************************************
  90. * 名    稱:LD3320_Init(void)
  91. * 功    能:模塊驅動端口初始配置
  92. * 入口參數:  
  93. * 出口參數:
  94. * 說    明:
  95. * 調用方法:
  96. **********************************************************/
  97. void LD3320_Init(void)
  98. {
  99.         LD3320_GPIO_Cfg();       
  100.         LD3320_EXTI_Cfg();
  101.         LD3320_Spi_cfg();         
  102.         LED_gpio_cfg();
  103.         LD_reset();
  104. }

  105. /***********************************************************
  106. * 名    稱: void Delay_(int i)
  107. * 功    能: 短延時
  108. * 入口參數:  
  109. * 出口參數:
  110. * 說    明:
  111. * 調用方法:
  112. **********************************************************/
  113. void Delay_( int i)
  114. {     
  115.     while(i--);
  116. }       
  117. /***********************************************************
  118. * 名    稱:        LD3320_delay(unsigned long uldata)
  119. * 功    能:        長延時函數
  120. * 入口參數:  
  121. * 出口參數:
  122. * 說    明:
  123. * 調用方法:
  124. **********************************************************/
  125. void LD3320_delay(unsigned long uldata)
  126. {
  127.         unsigned int j  =  0;
  128.         unsigned int g  =  0;
  129.         for (j=0;j<5;j++)
  130.         {
  131.                 for (g=0;g<uldata;g++)
  132.                 {
  133.                         Delay_(120);
  134.                 }
  135.         }
  136. }

  137. /***********************************************************
  138. * 名    稱:        RunASR(void)
  139. * 功    能:        運行ASR
  140. * 入口參數:  
  141. * 出口參數:
  142. * 說    明:
  143. * 調用方法:
  144. **********************************************************/
  145. uint8 RunASR(void)
  146. {
  147.         uint8 i=0;
  148.         uint8 asrflag=0;
  149.         for (i=0; i<5; i++)                                        //        防止由于硬件原因導致LD3320芯片工作不正常,所以一共嘗試5次啟動ASR識別流程
  150.         {
  151.                 LD_AsrStart();                                                //初始化ASR
  152.                 LD3320_delay(100);
  153.                 if (LD_AsrAddFixed()==0)        //添加關鍵詞語到LD3320芯片中
  154.                 {
  155.                         LD_reset();                                                        //        LD3320芯片內部出現不正常,立即重啟LD3320芯片
  156.                         LD3320_delay(50);                                //        并從初始化開始重新ASR識別流程
  157.                         continue;
  158.                 }
  159.                 LD3320_delay(10);
  160.                 if (LD_AsrRun() == 0)
  161.                 {
  162.                         LD_reset();                                                        //        LD3320芯片內部出現不正常,立即重啟LD3320芯片
  163.                         LD3320_delay(50);                                //        并從初始化開始重新ASR識別流程
  164.                         continue;
  165.                 }
  166.                 asrflag=1;
  167.                 break;                                                                                //        ASR流程啟動成功,退出當前for循環。開始等待LD3320送出的中斷信號
  168.         }       
  169.         return asrflag;
  170. }

  171. /***********************************************************
  172. * 名    稱:LD3320_GPIO_Cfg(void)
  173. * 功    能:初始化需要用到的IO口
  174. * 入口參數:  
  175. * 出口參數:
  176. * 說    明:
  177. * 調用方法:
  178. **********************************************************/
  179. void LD3320_GPIO_Cfg(void)
  180. {       
  181.                 GPIO_InitTypeDef GPIO_InitStructure;       
  182.                 RCC_APB2PeriphClockCmd(LD3320RST_GPIO_CLK | LD3320CS_GPIO_CLK,ENABLE);
  183.                 //LD_CS        /RSET
  184.                 GPIO_InitStructure.GPIO_Pin =LD3320CS_PIN;
  185.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  186.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  187.                 GPIO_Init(LD3320CS_GPIO_PORT,&GPIO_InitStructure);
  188.                 GPIO_InitStructure.GPIO_Pin =LD3320RST_PIN;
  189.                 GPIO_Init(LD3320RST_GPIO_PORT,&GPIO_InitStructure);

  190. }
  191. /***********************************************************
  192. * 名    稱:LD3320_Spi_cfg(void)
  193. * 功    能:配置SPI功能和端口初始化
  194. * 入口參數:  
  195. * 出口參數:
  196. * 說    明:
  197. * 調用方法:
  198. **********************************************************/
  199. void LD3320_Spi_cfg(void)
  200. {
  201.         SPI_InitTypeDef  SPI_InitStructure;
  202.         GPIO_InitTypeDef GPIO_InitStructure;
  203.   //spi端口配置
  204.         RCC_APB2PeriphClockCmd(LD3320SPI_CLK,ENABLE);           //使能SPI2外設時鐘
  205.   RCC_APB2PeriphClockCmd(LD3320WR_GPIO_CLK | LD3320SPIMISO_GPIO_CLK | LD3320SPIMOSI_GPIO_CLK | LD3320SPISCK_GPIO_CLK,ENABLE);
  206.        
  207.         GPIO_InitStructure.GPIO_Pin = LD3320SPIMISO_PIN;
  208.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  209.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  210.         GPIO_Init(LD3320SPIMISO_GPIO_PORT,&GPIO_InitStructure);
  211.        
  212.         GPIO_InitStructure.GPIO_Pin = LD3320SPIMOSI_PIN;
  213.         GPIO_Init(LD3320SPIMOSI_GPIO_PORT,&GPIO_InitStructure);

  214.         GPIO_InitStructure.GPIO_Pin = LD3320SPISCK_PIN;
  215.         GPIO_Init(LD3320SPISCK_GPIO_PORT,&GPIO_InitStructure);
  216.        
  217.         GPIO_InitStructure.GPIO_Pin = LD3320WR_PIN;                        //WR
  218.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  219.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  220.         GPIO_Init(LD3320WR_GPIO_PORT, &GPIO_InitStructure);
  221.        
  222.         LD_CS_H();
  223.        
  224.         SPI_Cmd(LD3320SPI, DISABLE);

  225.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;           //全雙工
  226.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                                                                   //主模式
  227.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                                                                   //8位
  228.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                                                                                           //時鐘極性 空閑狀態時,SCK保持低電平
  229.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                                                                                                   //時鐘相位 數據采樣從第一個時鐘邊沿開始
  230.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                                                                                   //軟件產生NSS
  231.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;   //波特率控制 SYSCLK/128
  232.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                                                           //數據高位在前
  233.         SPI_InitStructure.SPI_CRCPolynomial = 7;                                                                                                                   //CRC多項式寄存器初始值為7
  234.         SPI_Init(LD3320SPI, &SPI_InitStructure);

  235.         SPI_Cmd(LD3320SPI, ENABLE);

  236. }
  237. /***********************************************************
  238. * 名    稱: LD3320_EXTI_Cfg(void)
  239. * 功    能: 外部中斷功能配置和相關端口配置
  240. * 入口參數:  
  241. * 出口參數:
  242. * 說    明:
  243. * 調用方法:
  244. **********************************************************/
  245. void LD3320_EXTI_Cfg(void)
  246. {
  247.   EXTI_InitTypeDef EXTI_InitStructure;
  248.         NVIC_InitTypeDef NVIC_InitStructure;
  249.   GPIO_InitTypeDef GPIO_InitStructure;
  250.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //使能復用功能時鐘

  251.         RCC_APB2PeriphClockCmd(LD3320IRQ_GPIO_CLK, ENABLE);
  252.   GPIO_InitStructure.GPIO_Pin =LD3320IRQ_PIN;
  253.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  254.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  255.   GPIO_Init(LD3320IRQ_GPIO_PORT, &GPIO_InitStructure);
  256.         //外部中斷線配置
  257.   GPIO_EXTILineConfig(LD3320IRQEXIT_PORTSOURCE, LD3320IRQPINSOURCE);
  258.   EXTI_InitStructure.EXTI_Line = LD3320IRQEXITLINE;
  259.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  260.   EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
  261.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  262.   EXTI_Init(&EXTI_InitStructure);
  263.         //中斷嵌套配置
  264.   NVIC_InitStructure.NVIC_IRQChannel = LD3320IRQN;
  265.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  266.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  267.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  268.   NVIC_Init(&NVIC_InitStructure);
  269. }


  270. /***********************************************************
  271. * 名    稱:  EXTI IRQHandler(void)
  272. * 功    能: 外部中斷函數
  273. * 入口參數:  
  274. * 出口參數:
  275. * 說    明:
  276. * 調用方法:
  277. **********************************************************/
  278. void EXTI15_10_IRQHandler(void)
  279. {
  280.         if(EXTI_GetITStatus(LD3320IRQEXITLINE)!= RESET )
  281.         {
  282.                 ProcessInt0();
  283.                 PrintCom(TEST_USART,"進入中斷12\r\n");       
  284.                 EXTI_ClearFlag(LD3320IRQEXITLINE);
  285.                 EXTI_ClearITPendingBit(LD3320IRQEXITLINE);  //清除LINE2上的中斷標志位  
  286.         }
  287. }

  288. /***********************************************************
  289. * 名    稱:void LED_gpio_cfg(void)
  290. * 功    能:LED端口配置
  291. * 入口參數:  
  292. * 出口參數:
  293. * 說    明:
  294. * 調用方法:
  295. **********************************************************/
  296. void LED_gpio_cfg(void)
  297. {       
  298.                 GPIO_InitTypeDef GPIO_InitStructure;
  299.        
  300.                 RCC_APB2PeriphClockCmd(LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK | LED4_GPIO_CLK,ENABLE);
  301.        
  302.                 GPIO_InitStructure.GPIO_Pin = LED1_PIN;
  303.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  304.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  305.                 GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
  306.                 GPIO_InitStructure.GPIO_Pin = LED2_PIN;
  307.                 GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
  308.                 GPIO_InitStructure.GPIO_Pin = LED3_PIN;
  309.                 GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);
  310.                 GPIO_InitStructure.GPIO_Pin = LED4_PIN;
  311.                 GPIO_Init(LED4_GPIO_PORT, &GPIO_InitStructure);       
  312.        
  313.                 LED1_OFF;
  314.                 LED2_OFF;
  315.                 LED3_OFF;
  316.                 LED4_OFF;
  317. }
復制代碼

評分

參與人數 1黑幣 +6 收起 理由
gracture + 6 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:85865 發表于 2017-4-22 12:36 | 只看該作者
原理圖呢?有原理圖嗎?
回復

使用道具 舉報

板凳
ID:325874 發表于 2018-8-20 02:53 | 只看該作者
沒有.h文件嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品欧美一区二区三区综合在线 | 久久国产一区 | 欧美一区成人 | 亚洲精品久久久蜜桃 | 日韩在线免费观看视频 | 国产免费一区二区 | 在线一区 | 精品国产乱码久久久久久牛牛 | 日日操av| 毛片日韩| 91亚洲精品在线观看 | 久久精品亚洲精品国产欧美 | 久久精品免费 | 欧美久久久久久 | 激情六月丁香婷婷 | 久久青青 | 色综合天天天天做夜夜夜夜做 | 蜜桃毛片 | 中文字幕一区二区三区四区 | 国产精品色一区二区三区 | 日本成人中文字幕 | 国产欧美日韩精品一区二区三区 | 久久精品性视频 | 黄色免费在线网址 | 国产日韩欧美 | 久久99精品久久久久久青青日本 | 女人天堂av| 日韩中文久久 | 狠狠躁躁夜夜躁波多野结依 | 亚洲自拍偷拍视频 | www.国产 | 免费精品 | 91久久爽久久爽爽久久片 | 欧美中文字幕一区二区三区 | 一区二区三区免费观看 | 日本三级全黄三级三级三级口周 | 日本一区二区高清视频 | 99精品久久 | 国产精品一区二区av | 亚洲www | 亚洲国产精品一区二区第一页 |