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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3408|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

LD3320語音控制LED STM32單片機(jī)源碼下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
LD3320語音芯片的stm32單片機(jī)驅(qū)動(dòng)源碼工程:

完整源碼下載:
基于語音檢測(cè)的機(jī)器人控制.rar (303.11 KB, 下載次數(shù): 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主程序中表示程序運(yùn)行的狀態(tài),不是LD3320芯片內(nèi)部的狀態(tài)寄存器
  8. //        LD_ASR_NONE:                表示沒有在作ASR識(shí)別
  9. //        LD_ASR_RUNING:                表示LD3320正在作ASR識(shí)別中
  10. //        LD_ASR_FOUNDOK:                表示一次識(shí)別流程結(jié)束后,有一個(gè)識(shí)別結(jié)果
  11. //        LD_ASR_FOUNDZERO:        表示一次識(shí)別流程結(jié)束后,沒有識(shí)別結(jié)果
  12. //        LD_ASR_ERROR:                表示一次識(shí)別流程中LD3320芯片內(nèi)部出現(xiàn)不正確的狀態(tài)
  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. * 功    能: 主函數(shù)LD3320程序入口
  25. * 入口參數(shù):  
  26. * 出口參數(shù):
  27. * 說    明:
  28. * 調(diào)用方法:
  29. **********************************************************/

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

  39.         nAsrStatus = LD_ASR_NONE;                //        初始狀態(tài):沒有在作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)        //        啟動(dòng)一次ASR識(shí)別流程:ASR初始化,ASR添加關(guān)鍵詞語,啟動(dòng)ASR運(yùn)算
  50.                                         {               
  51.                                                 nAsrStatus = LD_ASR_ERROR;
  52.                                         }
  53.                                         break;

  54.                         case LD_ASR_FOUNDOK:
  55.                                          nAsrRes = LD_GetResult( );        //        一次ASR識(shí)別流程結(jié)束,去取ASR識(shí)別結(jié)果                                                                                 
  56.                                                 PrintCom(TEST_USART,"\r\n識(shí)別碼:");                       
  57.                                                 USART_SendData(TEST_USART,nAsrRes+0x30);                
  58.                                                                
  59.                                          switch(nAsrRes)                   /*對(duì)結(jié)果執(zhí)行相關(guān)操作,客戶修改*/
  60.                                                 {
  61.                                                         case CODE_LSD:                        /*命令“流水燈”*/
  62.                                                                 PrintCom(TEST_USART,"“流水燈”命令識(shí)別成功\r\n");
  63.                                                                                                                          break;
  64.                                                         case CODE_SS:         /*命令“閃爍”*/
  65.                                                                 PrintCom(TEST_USART,"“閃爍”命令識(shí)別成功\r\n");
  66.                                                                                                                          break;
  67.                                                         case CODE_AJCF:                /*命令“按鍵觸發(fā)”*/
  68.                                        
  69.                                                                 PrintCom(TEST_USART,"“按鍵觸發(fā)”命令識(shí)別成功\r\n");
  70.                                                                                                                         break;
  71.                                                         case CODE_QM:                /*命令“全滅”*/
  72.                                        
  73.                                                                 PrintCom(TEST_USART,"“全滅”命令識(shí)別成功\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.         //開發(fā)板測(cè)試延時(shí)部分(用戶可刪除)               
  86.                 Board_text(nAsrRes );
  87.         }// while

  88. }
  89. /***********************************************************
  90. * 名    稱:LD3320_Init(void)
  91. * 功    能:模塊驅(qū)動(dòng)端口初始配置
  92. * 入口參數(shù):  
  93. * 出口參數(shù):
  94. * 說    明:
  95. * 調(diào)用方法:
  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. * 功    能: 短延時(shí)
  108. * 入口參數(shù):  
  109. * 出口參數(shù):
  110. * 說    明:
  111. * 調(diào)用方法:
  112. **********************************************************/
  113. void Delay_( int i)
  114. {     
  115.     while(i--);
  116. }       
  117. /***********************************************************
  118. * 名    稱:        LD3320_delay(unsigned long uldata)
  119. * 功    能:        長(zhǎng)延時(shí)函數(shù)
  120. * 入口參數(shù):  
  121. * 出口參數(shù):
  122. * 說    明:
  123. * 調(diào)用方法:
  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. * 功    能:        運(yùn)行ASR
  140. * 入口參數(shù):  
  141. * 出口參數(shù):
  142. * 說    明:
  143. * 調(diào)用方法:
  144. **********************************************************/
  145. uint8 RunASR(void)
  146. {
  147.         uint8 i=0;
  148.         uint8 asrflag=0;
  149.         for (i=0; i<5; i++)                                        //        防止由于硬件原因?qū)е翷D3320芯片工作不正常,所以一共嘗試5次啟動(dòng)ASR識(shí)別流程
  150.         {
  151.                 LD_AsrStart();                                                //初始化ASR
  152.                 LD3320_delay(100);
  153.                 if (LD_AsrAddFixed()==0)        //添加關(guān)鍵詞語到LD3320芯片中
  154.                 {
  155.                         LD_reset();                                                        //        LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片
  156.                         LD3320_delay(50);                                //        并從初始化開始重新ASR識(shí)別流程
  157.                         continue;
  158.                 }
  159.                 LD3320_delay(10);
  160.                 if (LD_AsrRun() == 0)
  161.                 {
  162.                         LD_reset();                                                        //        LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片
  163.                         LD3320_delay(50);                                //        并從初始化開始重新ASR識(shí)別流程
  164.                         continue;
  165.                 }
  166.                 asrflag=1;
  167.                 break;                                                                                //        ASR流程啟動(dòng)成功,退出當(dāng)前for循環(huán)。開始等待LD3320送出的中斷信號(hào)
  168.         }       
  169.         return asrflag;
  170. }

  171. /***********************************************************
  172. * 名    稱:LD3320_GPIO_Cfg(void)
  173. * 功    能:初始化需要用到的IO口
  174. * 入口參數(shù):  
  175. * 出口參數(shù):
  176. * 說    明:
  177. * 調(diào)用方法:
  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. * 入口參數(shù):  
  195. * 出口參數(shù):
  196. * 說    明:
  197. * 調(diào)用方法:
  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外設(shè)時(shí)鐘
  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;                                                                                                           //時(shí)鐘極性 空閑狀態(tài)時(shí),SCK保持低電平
  229.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                                                                                                   //時(shí)鐘相位 數(shù)據(jù)采樣從第一個(gè)時(shí)鐘邊沿開始
  230.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                                                                                   //軟件產(chǎn)生NSS
  231.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;   //波特率控制 SYSCLK/128
  232.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                                                           //數(shù)據(jù)高位在前
  233.         SPI_InitStructure.SPI_CRCPolynomial = 7;                                                                                                                   //CRC多項(xiàng)式寄存器初始值為7
  234.         SPI_Init(LD3320SPI, &SPI_InitStructure);

  235.         SPI_Cmd(LD3320SPI, ENABLE);

  236. }
  237. /***********************************************************
  238. * 名    稱: LD3320_EXTI_Cfg(void)
  239. * 功    能: 外部中斷功能配置和相關(guān)端口配置
  240. * 入口參數(shù):  
  241. * 出口參數(shù):
  242. * 說    明:
  243. * 調(diào)用方法:
  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);        //使能復(fù)用功能時(shí)鐘

  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. * 功    能: 外部中斷函數(shù)
  273. * 入口參數(shù):  
  274. * 出口參數(shù):
  275. * 說    明:
  276. * 調(diào)用方法:
  277. **********************************************************/
  278. void EXTI15_10_IRQHandler(void)
  279. {
  280.         if(EXTI_GetITStatus(LD3320IRQEXITLINE)!= RESET )
  281.         {
  282.                 ProcessInt0();
  283.                 PrintCom(TEST_USART,"進(jìn)入中斷12\r\n");       
  284.                 EXTI_ClearFlag(LD3320IRQEXITLINE);
  285.                 EXTI_ClearITPendingBit(LD3320IRQEXITLINE);  //清除LINE2上的中斷標(biāo)志位  
  286.         }
  287. }

  288. /***********************************************************
  289. * 名    稱:void LED_gpio_cfg(void)
  290. * 功    能:LED端口配置
  291. * 入口參數(shù):  
  292. * 出口參數(shù):
  293. * 說    明:
  294. * 調(diào)用方法:
  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. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +6 收起 理由
gracture + 6 贊一個(gè)!

查看全部評(píng)分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男人的天堂亚洲 | 成人深夜福利 | 欧美在线观看网站 | 国产精品视频久久 | 国产高清精品一区二区三区 | 国产精品亚洲第一区在线暖暖韩国 | 久久精品二区亚洲w码 | 成人影 | 亚洲一区二区精品 | 天天色综网 | 久久青 | a在线v| 国产1区 | 欧美成人a∨高清免费观看 欧美日韩中 | 我要看免费一级毛片 | 欧美日韩国产在线观看 | 中文字幕成人在线 | 天天操天天干天天曰 | 日本一区二区高清不卡 | 亚洲字幕在线观看 | 国产91视频播放 | 国产精品色av | 精精国产视频 | 99这里只有精品视频 | heyzo在线| 久久网一区二区三区 | 日韩中文字幕在线观看视频 | 欧美一区二区三区大片 | 国产精品视频免费看 | 中文精品久久 | 成人在线不卡 | 欧美精品在线免费观看 | 久久精品国产久精国产 | 久久精品二区 | 精品国产青草久久久久福利 | 国产高潮好爽受不了了夜色 | 国产精品视频一区二区三区不卡 | 日本超碰 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 青青激情网 | 亚洲成人a v|