|
ld3320 語音控制LED
1、如果您采用的不是keil4 編譯器 可以自行建立工程進行編譯,本工程建立的格式如下圖,客戶可以參考下圖添加所需要的C文件。
0.png (8.65 KB, 下載次數: 33)
下載附件
2019-1-3 03:05 上傳
單片機源程序如下:
- /*****************************************************
- ** 工程名稱:YIXIN 語音識別開發板程序
- ** CPU: STM32f103VET6
- ** 晶振:8MHZ
- ** 波特率:9600 bit/S
- ** 說明:本程序 具備語音識別、串口通信、開發板基本功能演示。
- *********************************************************/
- #include "includes.h"
- /* Private function prototypes -----------------------------------------------*/
- void RCC_Configuration(void);
- //void NVIC_Configuration(void);
- void USART_Configuration(void);
- void PrintCom(USART_TypeDef* USARTx, uint8_t *Data);
- extern void LD3320_main(void);
- /***********************************************************
- * 名 稱: 主函數
- * 功 能: 程序入口
- * 入口參數: 無
- * 出口參數: 無
- * 說 明: 無
- * 調用方法: 無
- **********************************************************/
- int main(void)
- {
- /* System Clocks Configuration */
- RCC_Configuration(); //外設時鐘配置
- USART_Configuration();//USART 配置
- LD3320_main(); //LD3320執行函數
- while (1)
- {
- ;
- }
-
- }
- /***********************************************************
- * 名 稱: void USART_Configuration(void)
- * 功 能: 串口配置
- * 入口參數:
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- void USART_Configuration(void)
- {
- USART_InitTypeDef USART_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitStructure.USART_BaudRate = 9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- /* Configure USART1 */
- USART_Init(USART1, &USART_InitStructure); //類似與GPIO口,配置完后初始化一次
- USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收 中斷
- USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //使能發送 中斷
- USART_Cmd(USART1, ENABLE);
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //USART1 TX
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
- GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1 RX
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //復用開漏輸入
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口
- }
- /***********************************************************
- * 名 稱:void PrintCom(USART_TypeDef* USARTx, uint8_t *Data)
- * 功 能:串口數據打印
- * 入口參數:
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- void PrintCom(USART_TypeDef* USARTx, uint8_t *Data)
- {
-
- while(*Data)
- {
- USART_SendData(USARTx, *Data++); /*發送單個數據 */
- while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);/* 檢查指定的USART標志位即RESET=1時發送完成*/
- }
- }
- /***********************************************************
- * 名 稱:void RCC_Configuration(void)
- * 功 能:配置外設時鐘
- * 入口參數:
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- void RCC_Configuration(void)
- {
- SystemInit();
- /* Enable USART1, GPIOA, GPIOx and AFIO clocks */
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
- RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
- RCC_APB2Periph_GPIOE, ENABLE); //開啟相關的AHP外設時鐘
- /* Enable USART2 clock */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
- }
- /**
- * @brief Configures the different GPIO ports.
- * @param None
- * @retval : None
- */
復制代碼- /*******************************************************
- ** 文件名稱:語音模塊底層驅動
- ** CPU: STM32f103RBT6
- ** 晶振:8MHZ
- ** 波特率:9600 bit/S
- ** 說明:本程序 具備語音識別、串口通信、開發板基本功能演示。
- *********************************************************/
- #include "includes.h"
- uint8 nLD_Mode = LD_MODE_IDLE; // 用來記錄當前是在進行ASR識別還是在播放MP3
- uint8 ucRegVal;
- extern uint8 nAsrStatus;
- /***********************************************************
- * 名 稱:void LD_reset(void)
- * 功 能:LD芯片硬件初始化
- * 入口參數:
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- void LD_reset(void)
- {
- LD_RST_H();
- LD3320_delay(100);
- LD_RST_L();
- LD3320_delay(100);
- LD_RST_H();
- LD3320_delay(100);
- LD_CS_L();
- LD3320_delay(100);
- LD_CS_H();
- LD3320_delay(100);
- }
- /***********************************************************
- * 名 稱: void LD_Init_Common(void)
- * 功 能: 初始化命令
- * 入口參數:
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- void LD_Init_Common(void)
- {
- LD_ReadReg(0x06);
- LD_WriteReg(0x17, 0x35);
- LD3320_delay(5);
- LD_ReadReg(0x06);
- LD_WriteReg(0x89, 0x03);
- LD3320_delay(5);
- LD_WriteReg(0xCF, 0x43);
- LD3320_delay(5);
- LD_WriteReg(0xCB, 0x02);
-
- /*PLL setting*/
- LD_WriteReg(0x11, LD_PLL_11);
- if (nLD_Mode == LD_MODE_MP3)
- {
- LD_WriteReg(0x1E, 0x00);
- LD_WriteReg(0x19, LD_PLL_MP3_19);
- LD_WriteReg(0x1B, LD_PLL_MP3_1B);
- LD_WriteReg(0x1D, LD_PLL_MP3_1D);
- }
- else
- {
- LD_WriteReg(0x1E,0x00);
- LD_WriteReg(0x19, LD_PLL_ASR_19);
- LD_WriteReg(0x1B, LD_PLL_ASR_1B);
- LD_WriteReg(0x1D, LD_PLL_ASR_1D);
- }
- LD3320_delay(5);
-
- LD_WriteReg(0xCD, 0x04);
- LD_WriteReg(0x17, 0x4c);
- LD3320_delay(1);
- LD_WriteReg(0xB9, 0x00);
- LD_WriteReg(0xCF, 0x4F);
- LD_WriteReg(0x6F, 0xFF);
- }
- /***********************************************************
- * 名 稱:void LD_Init_ASR(void)
- * 功 能:初始化ASR
- * 入口參數:
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- void LD_Init_ASR(void)
- {
- nLD_Mode=LD_MODE_ASR_RUN;
- LD_Init_Common();
- LD_WriteReg(0xBD, 0x00);
- LD_WriteReg(0x17, 0x48);
- LD3320_delay( 5 );
- LD_WriteReg(0x3C, 0x80);
- LD_WriteReg(0x3E, 0x07);
- LD_WriteReg(0x38, 0xff);
- LD_WriteReg(0x3A, 0x07);
- LD_WriteReg(0x40, 0);
- LD_WriteReg(0x42, 8);
- LD_WriteReg(0x44, 0);
- LD_WriteReg(0x46, 8);
- LD3320_delay( 1 );
- }
- /***********************************************************
- * 名 稱:void ProcessInt0(void)
- * 功 能:識別處理函數
- * 入口參數:
- * 出口參數:
- * 說 明:可以利用查詢方式,或中斷方式進行調用
- * 調用方法:
- **********************************************************/
- void ProcessInt0(void)
- {
- uint8 nAsrResCount=0;
- ucRegVal = LD_ReadReg(0x2B);
- // 語音識別產生的中斷
- // (有聲音輸入,不論識別成功或失敗都有中斷)
- LD_WriteReg(0x29,0) ;
- LD_WriteReg(0x02,0) ;
-
- if((ucRegVal & 0x10) && LD_ReadReg(0xb2)==0x21 && LD_ReadReg(0xbf)==0x35)
- {
- nAsrResCount = LD_ReadReg(0xba);
-
- if(nAsrResCount>0 && nAsrResCount<=4)
- {
- nAsrStatus=LD_ASR_FOUNDOK;
- }
- else
- {
- nAsrStatus=LD_ASR_FOUNDZERO;
- }
- }
- else
- {
- nAsrStatus=LD_ASR_FOUNDZERO; //執行沒有識別
- }
- LD_WriteReg(0x2b, 0);
- LD_WriteReg(0x1C,0);/*寫0:ADC不可用*/
-
- LD_WriteReg(0x29,0) ;
- LD_WriteReg(0x02,0) ;
- LD_WriteReg(0x2B, 0);
- LD_WriteReg(0xBA, 0);
- LD_WriteReg(0xBC,0);
- LD_WriteReg(0x08,1); /*清除FIFO_DATA*/
- LD_WriteReg(0x08,0); /*清除FIFO_DATA后 再次寫0*/
- //LD3320_delay(1);
- }
- /***********************************************************
- * 名 稱:uint8 LD_Check_ASRBusyFlag_b2(void)
- * 功 能:檢測 ASR 是否忙狀態
- * 入口參數:flag ---1:空閑狀態
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- uint8 LD_Check_ASRBusyFlag_b2(void)
- {
- uint8 j;
- uint8 flag = 0;
- for (j=0; j<10; j++)
- {
- if (LD_ReadReg(0xb2) == 0x21)
- {
- flag = 1;
- break;
- }
- LD3320_delay(10);
- }
- return flag;
- }
- /***********************************************************
- * 名 稱: void LD_AsrStart(void)
- * 功 能:
- * 入口參數: ASR初始化
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- void LD_AsrStart(void)
- {
- LD_Init_ASR();
- }
- /***********************************************************
- * 名 稱: uint8 LD_AsrRun(void)
- * 功 能: ASR執行函數
- * 入口參數:
- * 出口參數:
- * 說 明:
- * 調用方法:
- **********************************************************/
- uint8 LD_AsrRun(void)
- {
- LD_WriteReg(0x35, MIC_VOL);
- LD_WriteReg(0x1C, 0x09);
- LD_WriteReg(0xBD, 0x20);
- LD_WriteReg(0x08, 0x01);
- LD3320_delay( 5 );
- LD_WriteReg(0x08, 0x00);
- LD3320_delay( 5);
- if(LD_Check_ASRBusyFlag_b2() == 0)
- {
- return 0;
- }
- LD_WriteReg(0xB2, 0xff);
- LD_WriteReg(0x37, 0x06);
- LD_WriteReg(0x37, 0x06);
- LD3320_delay( 5);
- LD_WriteReg(0x1C, 0x0b);
- LD_WriteReg(0x29, 0x10);
-
- LD_WriteReg(0xBD, 0x00);
- return 1;
- }
- /***********************************************************
- * 名 稱:uint8 LD_AsrAddFixed(void)
- * 功 能:添加識別關鍵詞語
- * 入口參數:
- * 出口參數: flag-- 1:success
- * 說 明:開發者可以學習"語音識別芯片LD3320高階秘籍.pdf"中
- 關于垃圾詞語吸收錯誤的用法,提高識別率。
- * 調用方法:
- **********************************************************/
- uint8 LD_AsrAddFixed(void)
- {
- uint8 k, flag;
- uint8 nAsrAddLength;
- #define DATE_A 4 /*數組二維數值*/
- #define DATE_B 20 /*數組一維數值*/
- uint8 sRecog[DATE_A][DATE_B] = {
- "liu shui deng you yi",\
- "shan shuo",\
- "liu shui deng zuo yi",\
- "quan mie"\
- }; /*添加關鍵詞,用戶修改*/
- uint8 pCode[DATE_A] = {
- CODE_LSDYY,\
- CODE_SS,\
- CODE_LSDZY,\
- CODE_QM\
- }; /*添加識別碼,用戶修改*/
- flag = 1;
- for (k=0; k<DATE_A; k++)
- {
- if(LD_Check_ASRBusyFlag_b2() == 0)
- {
- flag = 0;
- break;
- }
-
- LD_WriteReg(0xc1, pCode[k] );
- LD_WriteReg(0xc3, 0 );
- LD_WriteReg(0x08, 0x04);
- LD3320_delay(1);
- LD_WriteReg(0x08, 0x00);
- LD3320_delay(1);
- for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
- {
- if (sRecog[k][nAsrAddLength] == 0)
- break;
- LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
- }
- LD_WriteReg(0xb9, nAsrAddLength);
- LD_WriteReg(0xb2, 0xff);
- LD_WriteReg(0x37, 0x04);
- // LD_WriteReg(0x37, 0x04);
- }
- return flag;
- }
- /***********************************************************
- * 名 稱: uint8 LD_GetResult(void)
- * 功 能: 獲取識別結果
- * 入口參數:
- * 出口參數: 返回識別碼 LD_ReadReg(0xc5 );
- * 說 明:
- * 調用方法:
- **********************************************************/
- uint8 LD_GetResult(void)
- {
- return LD_ReadReg(0xc5 );
- }
復制代碼
所有資料51hei提供下載:
YS-V0.4 stm32 - 副本.7z
(161.25 KB, 下載次數: 58)
2019-1-3 03:06 上傳
點擊文件名下載附件
ld3320 語音控制LED 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|