zoukankan      html  css  js  c++  java
  • 基于stm32的语音识别设计(离线语音识别、DMA传输)

    之所以写这篇,是因为在网上看到这个资料很少,所以自己写一下就当作是记录。这个模块的识别率亲测还是很高的,就是商家那边不提供开源,要的话只能定制就很。。。。但是作为一个小功能需求也就够了。但是要大批量的话还要做自己的产品就不建议了。毕竟没有二次开发的东西不实用。
    硬件:snr6812、stm32f103、usb转ttl、杜邦线、喇叭
    **实现功能:**通过识别关键词向串口发送对应内容
    实现视频:
    由于无法直接上传视频文件,所以放在了百度网盘里面,想知道实现的效果是怎么样的,可以自己下载视频去看看。
    链接
    提取码:a0bl
    **采用通信:**串口通信
    识别函数设计:

    void Judgment_data(void){
    //	判断指令在这里添加你的操作
    	if((a1=='0')&& (a2=='4')){printf("语音控制已开启!
    ");}
    	if((a1=='0')&& (a2=='5')){printf("灯已打开!
    ");}
    	if((a1=='0')&& (a2=='6')){printf("灯已关闭
    ");}
    	if((a1=='0')&& (a2=='7')){printf("收音机已打开!
    ");}
    	if((a1=='0')&& (a2=='8')){printf("收音机已关闭!
    ");}
    	if((a1=='8')&& (a2=='0')){printf("智能跟随模式已打开!
    ");}
    	if((a1=='7')&& (a2=='0')){printf("智能跟随模式已关闭!
    ");}
    	if((a1=='6')&& (a2=='0')){printf("已拨打第二个联系人!
    ");}
    	if((a1=='5')&& (a2=='0')){printf("已拨打第一个联系人!
    ");}
    	if((a1=='4')&& (a2=='0')){printf("已拨打第三个联系人!
    ");}
    	if((a1=='3')&& (a2=='0')){printf("已挂掉电话!
    ");}
    	if((a1=='2')&& (a2=='0')){printf("退下
    ");}
    	if((a1=='9')&& (a2=='0')){printf("已全部打开
    ");}
    	if((a1=='0')&& (a2=='0')){printf("已全部关闭
    ");}
    	
    }
    

    DMA配置:

    ///USART2 DMA发送配置部分//	   		    
    //DMA1的各通道配置
    //这里的传输形式是固定的,这点要根据不同的情况来修改
    //从存储器->外设模式/8位数据宽度/存储器增量模式
    //DMA_CHx:DMA通道CHx
    //cpar:外设地址
    //cmar:存储器地址    
    void UART_DMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar)
    {
    	DMA_InitTypeDef DMA_InitStructure;
     	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);	//使能DMA传输
      DMA_DeInit(DMA_CHx);   //将DMA的通道1寄存器重设为缺省值
    	DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //DMA外设ADC基地址
    	DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA内存基地址
    	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //数据传输方向,从内存读取发送到外设
    	DMA_InitStructure.DMA_BufferSize = 0;  //DMA通道的DMA缓存的大小
    	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址寄存器不变
    	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器递增
    	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //数据宽度为8位
    	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
    	DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //工作在正常缓存模式
    	DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级 
    	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x没有设置为内存到内存传输
    	DMA_Init(DMA_CHx, &DMA_InitStructure);  //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器	
    } 
    //开启一次DMA传输
    void UART_DMA_Enable(DMA_Channel_TypeDef*DMA_CHx,u8 len)
    {
    	DMA_Cmd(DMA_CHx, DISABLE );  //关闭 指示的通道        
    	DMA_SetCurrDataCounter(DMA_CHx,len);//DMA通道的DMA缓存的大小	
    	DMA_Cmd(DMA_CHx, ENABLE);           //开启DMA传输
    }	   
    / 									 
    稍后会上传工程文件。
    
    
    
    
    
    一键三连呀!
  • 相关阅读:
    ajaxUtil
    AJAX学习-----与 XML 文件进行交互式通信
    AJAX-----数据库实例
    AJAX学习-----服务器响应
    AJAX学习-----ASP/PHP 请求实例
    scrapy 反扒措施
    scrapy 中文官网学习
    scrapy 破解图片网站防盗链下载
    scrapy 随机中间件配置
    flask 邮件发送
  • 原文地址:https://www.cnblogs.com/jee-cai/p/14095365.html
Copyright © 2011-2022 走看看