STM32F103C8T6+LD3320语音识别模块智能灯控

这篇具有很好参考价值的文章主要介绍了STM32F103C8T6+LD3320语音识别模块智能灯控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于代码需求量过大,不方便一一回复,请大家关注微信公众号“微电子基地”(头像与CSDN头像一致),点击智能灯控即可获取项目代码及功能介绍,注:仅供参考学习。

1、LD3320介绍

 LD3320 是一颗基于非特定人语音识别(SI-ASR:Speaker-Independent Automatic SpeechRecognition)技术的语音识别/声控芯片。提供了真正的单芯片语音识别解决方案。LD3320 芯片上集成了高精度的 A/D 和 D/A 接口,不再需要外接辅助的 Flash 和RAM,即可以实现语音识别/声控/人机对话功能。并且,识别的关键词语列表是可以动态编辑的。基于 LD3320,可以在任何的电子产品中,甚至包括最简单的 51 作为主控芯片的系统中,轻松实现语音识别/声控/人机对话功能。为所有的电子产品增加 VUI (Voice User Interface)语音用户操作界面。
主要特色功能:
1. 非特定人语音识别技术: 不需要用户进行录音训练可动态编辑的识别关键词语列表: 只需要把识别的关键词语以字符串的形式传送进芯片,即可以在下次识别中立即生效。比如,用户在 51 等 MCU 的编程中,简单地通过设置芯片的寄存器,把诸如“你好”这样的识别关键词的内容动态地传入芯片中,芯片就可以识别这样设定的关键词语了。
2. 真正单芯片解决方案: 不需要任何外接的辅助 Flash 和 RAM,真正降低系统成本。内置高精度 A/D 和 D/A 通道: 不需要外接 AD 芯片,只需要把麦克风接在芯片的 AD 引脚上;可以播放声音文件,并提供 550mW 的内置放大器。高准确度和实用的语音识别效果。
3. 支持用户自由编辑 50 条关键词语条: 在同一时刻,最多在 50 条关键词语中进行识别,终端用户可以根据场景需要,随时编辑和更新这 50 条关键词语的内容。

以上纯粹废话,能看到这里的说明都是有耐心的人哈,下边直接上干货,有手就行,轻松拿捏LD3320这个模块,喜欢的话点赞收藏加关注哈

2、LD3320使用

硬件上没什么好说的,LD3320可以直接用USB转TTL模块,也就是所谓的CH340下载,接线也很简单,这是我用的LD3320哈,可能不同商家的不太一样,但是原理肯定是一样的,用的单片机肯定也是STC11L..X的,所以不用担心哈,下载的时候只需要将上边的5V接上CH340的5V或者VCC,GND接GND,TX接RX,RX接TX,这样就能进行下载了,下载我用的是宏晶的STC-ISP,这就是硬件的全部了。 

STM32F103C8T6+LD3320语音识别模块智能灯控

STM32F103C8T6+LD3320语音识别模块智能灯控

当然,有的朋友喜欢用LD3320上的IO口来控制东西,这个也是可以的哈,但是我是不太喜欢的,因为LD3320毕竟功能比较局限,我还是喜欢和STM32通信后用32来控制,比如PWM这种功能。

下边就来讲讲代码部分。

我的LD3320是在某宝上买的,店家都会给资料的,这里发不出来,想要链接的朋友可以私信我哈,我看到都会回的,首先我讲讲我的代码框架

3、代码框架

由LD3320进行语音识别,然后进行串口通信,将数据发送给STM32,STM进行数据接收判断,然后再进行对应操作,如输出PWM或者高低电平或者OLED显示什么的。

4、LD3320代码

LD3320部分可操作的代码不多,很多都是不用看的,以我这份为例,可操作的地方只有几处。

第一处

位于LDChip.c里,用来做识别的代码,LD3320采用的是拼音识别,也就是你希望它识别什么,你就输入什么。

第一个就是数据的数量和宽度,上边的13是数量,30是宽度,宽度可以超出拼音的长度一些,但是不能超太多,不然会报错,下边就是对应的指令了,记住除了最后一个指令,其他指令后边都有,\,下边的那些CODE_...都是自己起的名字,有多少个指令就起多少个,除了第一个CODE_CMD不能改,其他的都随便改随便加。

STM32F103C8T6+LD3320语音识别模块智能灯控

第二处

第二处就是这个地方,在LDChip.c对应的LDChip.h里,这个和前边是对应的,只是对CODE_..进行一个声明,但是这个是必需的,值的话就随便,只要不重复就行,最后还是CODE_CMD不能改。下边是灵敏度调节,图上都讲有哈。

STM32F103C8T6+LD3320语音识别模块智能灯控

 第三处

第三处就是在主函数main.c里,就是通信函数处理,有个用户处理函数,其他的都不用改,只需要在switch——case里多加几个判断条件哈,然后通信发送函数也是有的,改改发送数据就好了。

STM32F103C8T6+LD3320语音识别模块智能灯控这些就是LD3320的所有部分哈,简单明了。

5、STM32代码

32部分也不难,学过32的都知道串口通信,也就是配置个串口,接收LD3320传过来的数据,再进行if判断,然后进行处理,串口配置我这也有,当然我这个是C8T6的,用其他的型号记得看看原理图对不对应得上哈,我记得ZET6和RTC6应该也是可以对应的。

void UART1_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART1, &USART_InitStructure);
    
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVIC_InitStructure);
    
    USART_Cmd(USART1, ENABLE);
}

这就是串口配置,我用的串口1哈

void USART1_IRQHandler(void)
{
    
    if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
    {
      uint8_t rx_data = USART_ReceiveData(USART1);
        if(rx_data == 'a') //LED1 0
        {
           a=1;                   
        }
        if(rx_data == 'b') //LED1 1
        {
          a=2;
        }
        if(rx_data == 'c') //LED1 2
        {
          a=3;
        }
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
        
    }
}
这是中断服务函数,当然这里只有一些判断,然后做完判断后会发现哈,接收到不同的数据,a的值就不一样,这样就可以用来做判断哈,在主函数里执行就好了,如图

STM32F103C8T6+LD3320语音识别模块智能灯控

分享就到这里哈,记得点赞收藏加关注哈。文章来源地址https://www.toymoban.com/news/detail-406633.html

到了这里,关于STM32F103C8T6+LD3320语音识别模块智能灯控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103C8T6板子介绍

    STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。  STM32F103C8T6 F1XX片上资源

    2024年02月11日
    浏览(22)
  • STM32F103C8T6系统板

    1.电源部分 2.复位 3.晶振 4. 电源电路——防反接 有关二极管 漫谈二极管防电源反接电路 本次采用上图右下角的NMOS防反接电路。 电源电路——电源芯片 AMS1117是AMS公司的 ,LM1117是NS(美国国家半导体)的,LM1117要贵很多,所以一般的用AMS1117就可以了。 (以下分析参考STM32F10

    2024年02月02日
    浏览(28)
  • STM32F103C8T6串口调试篇

    项目开发中,当出现bug时,由于不知道某个变量的值,所以很难定位问题,针对此问题,串口调试脱颖而出。通过串口printf()实时将需要显示的信息打印出来,这样就很方便的定位问题。 串口设置方法 1.购买调试器pwlink2。参考STM32F103C8T6程序烧录方法_stm32f103c8t6如何烧录_流

    2024年02月12日
    浏览(21)
  • stm32f103c8t6的外部中断

    在单片机中存在着中断系统,这个系统的逻辑和功能在51单片机中已经有所了解。 1.在32单片机中的内核有一个nvic 里面存放许多优先级的设定,外接许多中断源,比如“exti、tim、adc、usart等”接入之后,nvic再通过中断优先级进行排队,再内接入cpu中进行处理,这样子大大减少

    2024年02月09日
    浏览(19)
  • STM32F103C8T6移植FreeRTOS

    根据自己开发板型号下载地址:STM32相关内容下载地址 SDK直接下载地址:STM32直接下载地址 下载参考博客 FreeROTS下载地址 选用V9.0.0 版本 个人创建目录如下,可做参考 keil目录 链接头文件 • 修改堆栈大小 • 修改中断函数名 去掉stm32f10x_it.c终端函数 增加FreeRTOS中断 特别解释

    2024年02月12日
    浏览(25)
  • STM32F103C8T6 按键扫描输入

    第一章 STM32F103C8T6 点亮LED灯 系列文章目录 前言 一、原理  1.按键类型  2.按键消抖 3.IO口输入配置 1)模拟输出 2)浮空输入模式 3)下拉输入模式(PULL DOWN) 4)上拉输入模式(PULL UP) 二、代码部分 main.c key.c key.h 总结         上一章我们成功入门了STM32F103C8T6,今天我们来

    2023年04月23日
    浏览(32)
  • [STM32F103C8T6]ADC转换

    什么是ADC转换? ADC转换的全称是: Analog-to-Digital Converter ,指模拟 / 数字转换器 ADC的性能指标: ADC分辨率: SSA与VREF-一起接到地,DDA与VREF+接到3.3v,所以ADC转换的范围是0---3.3v 所以最后的ADC转换值应该是我们的测量值*分辨率    分辨率 = 3.3v/2^12 = (3.3/4096)   12位的转换器所

    2024年02月06日
    浏览(27)
  • STM32F103C8T6制作USB键盘

            1、原因:电脑每次开机都需要输入登录密码,感觉很麻烦,就想着能不能用单片机做一个USB键盘,按一下自动给电脑发一串密码实现开机。后来又想,其实不用按键也行,用延时,延时到电脑开机再发送密码就好了,于是便有了这个制作。         2、 功能:将做好

    2024年01月22日
    浏览(20)
  • 自制STM32F103C8T6最小系统板

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 记录自己绘制第一块STM32F103C8T6最小系统板,包括原理图的绘制,pcb图的绘制和布局,以及器材的选购。 提示:有任何问题和交流可以加q:2874160799, 我基本上不看评论和私信。 根据ST官方手册,查看引脚

    2024年02月07日
    浏览(19)
  • STM32F103C8T6 点亮LED灯

    一、开发板介绍 二、程序实现 1.配置函数 2.程序源码 main.c LED.c LED.h 总结​​​​​​​ 前言         今天我们开始来学习一下STM32F103Z8T6 点灯。这块芯片可用的IO口资源十分丰富,可用的通用IO口为32个 (注意:是在使用ST_LINK 和 J_LINK的情况下) 。这块芯片的操作方法与正

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包