基于LD3320的语音识别模块LD-V7使用记录

本文记录了使用STM32F103C8T6微控制器与LD-V7语音识别模块进行串口通信的过程。主要内容包括硬件平台介绍,特别是语音模块和STM32的串口交互,如串口中断和超时接收方法的实现,通过这些方法可以在主循环中获取并处理语音识别的返回数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件平台

stm32f103c8t6,LD-V7语音识别模块

语音模块介绍

   语
在这里插入图片描述
重点!!

串口通信

语音模块串口发送的内容(被修改了,不是出厂内容,修改步骤看资料)

			 switch(dat)		   /*对结果执行相关操作,客户可删除Printcom 串口输出语句替换为其他需要控制的代码*/
			  {
				  case CODE_DMCS:			/*命令“亮一点”*/
						PrintCom("亮一点\r\n"); /*text.....*/
													 break;
					case CODE_KFBYZ:	 /*命令“变暗”*/
						PrintCom("变暗\r\n"); /*text.....*/
													 break;
					case CODE_KD:		/*命令“开灯”*/				
						PrintCom("开灯\r\n"); /*text.....*/
													break;
					case CODE_GD:		/*命令“关灯”*/				
						PrintCom("关灯\r\n"); /*text.....*/
													break;
					case CODE_BJ:		/*命令“亮度30”*/				
						PrintCom("亮度30\r\n"); /*text.....*/
													break;
					case CODE_SH:		/*命令“亮度60”*/				
						PrintCom("亮度60\r\n"); /*text.....*/
													break;
					case CODE_GZ:		/*命令“亮度100”*/				
						PrintCom("亮度100\r\n"); /*text.....*/
													break;																											
							default:PrintCom("请重新识别发口令\r\n"); /*text.....*/break;
				}	
			}	
			else 	
			{
				PrintCom("请说出一级口令\r\n"); /*text.....*/	
			}

STM32C8T6接收

主要分为串口中断,超时方式接收,比较
超时方式接收被放到了主循环,配合串口中断使用,是一个不太成熟的函数,不过用在这里绰绰有余。

//串口中断函数:
 u8 rev_buf[100];//接收缓冲区
 u8 addr=0;     //地址偏移量
 u8 revice_ok=0;//接收完成标志
 u8 revice_start=0;//开始接收受标志
 u32 time_out=0;//超时计数值
//串口1中断服务函数

void USART1_IRQHandler(void)
{
	u8 data;
	
	data=USART1->DR;//读取同时会清除标志
	rev_buf[addr++]=data;
	//printf("addr:%d\r\n",addr);
	
	revice_start=1;//开始接收
	time_out=0;//超级计数值清零
}
//串口中断接收函数
int ld3320_uart_receive(void)
{
	//char * buf = NULL;
	int num = 0;
	if(revice_ok)
	{
			revice_ok=0;//清标志
			printf("%s\r\n",rev_buf);
		
			printf("%s\r\n",rev_buf);
			printf("rev_buf is ok \r\n");
		  num = compare_usart((char *) rev_buf);
		 return num;
		}
	
	if(revice_start)//开始接收
	{
			Main_delay();
			time_out++;
		  num=0;
			if(time_out>=50)//超时就
			{
				revice_ok=1;
				rev_buf[addr]='\0';
				addr=0;
				time_out=0;
				revice_start=0;
			}
	}
	return 0;
}
//比较
/*
对比的BUF是直接定好的,宏定义方便使用
#define BUF_XIAOCHEN "收到\r\n"
#define BUF_LIANG    "亮一点\r\n"
#define BUF_AN       "变暗\r\n"
#define BUF_KAI      "开灯\r\n"
#define BUF_GUAN     "关灯\r\n"
#define BUF_SANSHI   "亮度30\r\n"
#define BUF_LIUSHI   "亮度60\r\n"
#define BUF_YIBAI    "亮度100\r\n"
#define BUF_CONGFA   "请重新识别发口令\r\n"
#define BUF_FA       "请说出一级口令\r\n"
*/
int compare_usart(char * string_data)
{
		if(strcmp(string_data, ( char *)BUF_XIAOCHEN) == 0)     //比较接受字符内容   收到
		{
			
			printf("this is compare  return 1\r\n");
     return 1;
		}
		else if(strcmp((char *)rev_buf, (char *)BUF_LIANG) == 0)
		{
		 return 2;
		}
	
		else if(strcmp((char *)rev_buf, (char *)BUF_AN) == 0)
		{
		 return 3;
		}
		
		else if(strcmp((char *)rev_buf, (char *)BUF_KAI) == 0)
		{
		 return 4;
		}
				else if(strcmp((char *)rev_buf, (char *)BUF_GUAN) == 0)
		{
		 return 5;
		}
				else if(strcmp((char *)rev_buf, (char *)BUF_SANSHI) == 0)
		{
		 return 6;
		}
				else if(strcmp((char *)rev_buf, (char *)BUF_LIUSHI) == 0)
		{
		 return 7;
		}
				else if(strcmp((char *)rev_buf, (char *)BUF_YIBAI) == 0)
		{
		 return 8;
		}
		
		else if(strcmp((char *)rev_buf, (char *)BUF_CONGFA) == 0)
		{
		 return 9;
		}
		
		else if(strcmp((char *)rev_buf, (char *)BUF_FA) == 0)
		{
		 return 10;
		}
		
	return 0;
}

经过这三步,就可以在主循环得到返回值,根据返回数值执行对应操作。

		j=ld3320_uart_receive();//得到接受函数的字符串buff
		//i=compare_usart(buff);     //字符串buff和已知字符串对比的值
		//i=1;
		printf("j = %d\r\n",j);
		switch(j)
		{

			case 1:
				//printf("1\r\n");
			  OLED_ShowChar(48,6,1);
				//OLED_Clear(); 
			break;//小陈
			case 2: printf(" switch :2\r\n");break;//亮一点
			case 3: printf(" switch :3\r\n");break;//变暗
			case 4: printf(" switch :4\r\n");break;//开灯
			case 5: printf(" switch :5\r\n");break;//关灯
			case 6: printf(" switch :6\r\n");break;//
			case 7: printf(" switch :7\r\n");break;//
			case 8: printf(" switch :8\r\n");break;//
			case 9: printf(" switch :9\r\n");break;//请重新识别发口令
			case 10: printf(" switch :10\r\n");break;//请说出一级口令
			//case 11: printf("11\r\n");break;//
			default:break;
		}
	}	

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值