标题:
LD3320语音识别控制LED STM32源代码
[打印本页]
作者:
1515709128
时间:
2019-1-2 16:02
标题:
LD3320语音识别控制LED STM32源代码
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
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1