SNR8016语音模块详解(STM32)

目录

一、介绍

二、传感器原理

1.原理图

2.引脚描述

三、程序设计

main文件

usart.h文件

usart.c文件

四、实验效果

五、资料获取

项目分享


一、介绍

SNR8016语音模块是智纳捷科技生产的一种离线语音识别模块,设计适合用于DIY领域,开放用户设定命令此界面。板载烧录器电路,使用USB连接电脑即可实现程序更新。模块采用麦克风即可实现10米超远距离语音识别,识别率达97%以上。

以下是SNR8016语音模块的参数:

|-------|-----------|
| 型号 | SNR8016VR |
| 工作电压 | DC:5V |
| 待机电流 | 50mA |
| 功放输出 | DAC(1W) |
| 语音指令数 | 160个(最大) |
| 通讯方式 | UART/IO |
| 扬声器 | 1W4Ω |

哔哩哔哩视频链接:

SNR8016语音模块(STM32)

(资料分享见文末)

二、传感器原理

1.原理图

2.引脚描述

三、程序设计

1.使用STM32F103C8T6使用SNR8016语音模块通过语音控制单片机指示灯亮灭。

|------------|------|
| SNR8016_TX | PB11 |
| SNR8016_RX | PB10 |
| LED | PC13 |
| OLED_SCL | PB1 |
| OLED_SDA | PB0 |

main文件

cpp 复制代码
#include "stm32f10x.h"
#include "led.h"
#include "usart3.h"
#include "delay.h"
#include "oled.h"
#include "key.h"

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	SNR8016语音模块实验                     
 * 版本			: V1.0
 * 日期			: 2025.2.8
 * MCU			:	STM32F103C8T6
 * 接口			:	参看usart3.h						
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

extern u8 Res;

int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	delay_init(72);
	LED_Init();
	LED_On();
	USART3_Config();//串口初始化
	Key_Init();
	OLED_Init();
//	printf("AF:30");//声音调到31档   最大
	delay_ms(1000);
	
	OLED_Clear();
	//显示"灯光状态:"
	OLED_ShowChinese(0,0,0,16,1);
	OLED_ShowChinese(16,0,1,16,1);
	OLED_ShowChinese(32,0,2,16,1);
	OLED_ShowChinese(48,0,3,16,1);
	OLED_ShowChar(64,0,':',16,1);

  while (1)
  {
			
			switch(Res)
			{
				case 1:
					LED_On();
					OLED_ShowChinese(56,30,4,16,1);		//开
				break;
					
				case 2:
					LED_Off();
					OLED_ShowChinese(56,30,5,16,1);		//关
				break;
				
				default:
					break;
			}
  }
}

usart.h文件

cpp 复制代码
#ifndef __USART1_H
#define	__USART1_H

#include "stm32f10x.h"
#include <stdio.h>

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	SNR8016语音模块实验                     
 * 版本			: V1.0
 * 日期			: 2025.2.7
 * MCU			:	STM32F103C8T6
 * 接口			:	参串口1						
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

void USART1_Config(void);
int fputc(int ch, FILE *f);
void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...);
void UART1SendByte(unsigned char SendData);


#endif /* __USART1_H */

usart.c文件

cpp 复制代码
#include "usart.h"
#include <stdarg.h>

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	SNR8016语音模块实验                     
 * 版本			: V1.0
 * 日期			: 2025.2.7
 * MCU			:	STM32F103C8T6
 * 接口			:	参串口1						
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

void USART1_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;

	/* 使能 USART1 时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); 

	/* USART1 使用IO端口配置 */    
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);    
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;	//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);   //初始化GPIOA
	  
	/* USART1 工作模式配置 */
	USART_InitStructure.USART_BaudRate = 9600;	//波特率设置:9600
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;	//数据位数设置:8位
	USART_InitStructure.USART_StopBits = USART_StopBits_1; 	//停止位设置:1位
	USART_InitStructure.USART_Parity = USART_Parity_No ;  //是否奇偶校验:无
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;	//硬件流控制模式设置:没有使能
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收与发送都使能
	USART_Init(USART1, &USART_InitStructure);  //初始化USART1
	USART_Cmd(USART1, ENABLE);// USART1使能
}


 /* 描述  :重定向c库函数printf到USART1*/ 
int fputc(int ch, FILE *f)
{
/* 将Printf内容发往串口 */
  USART_SendData(USART1, (unsigned char) ch);
  while (!(USART1->SR & USART_FLAG_TXE));
 
  return (ch);
}

 /*发送一个字节数据*/
void UART1SendByte(unsigned char SendData)
{	   
		USART_SendData(USART1,SendData);
		while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);	    
} 

四、实验效果

五、资料获取

项目分享

相关推荐
海绵波波1075 小时前
DeepSeek谈《凤凰项目 一个IT运维的传奇故事》
运维·服务器·数据库
邪恶马铃薯5 小时前
SQL常用数据清洗语句
数据库·sql
Sunlight_7777 小时前
第六章 QT基础:9、Qt中数据库的操作
数据库·qt·oracle
凭君语未可7 小时前
详解 MyBatis-Plus 框架中 QueryWrapper 类
数据库·oracle·mybatis
PXM的算法星球9 小时前
Elasticsearch--自带“搜索引擎“的数据库
数据库·elasticsearch·搜索引擎
理想奋斗中9 小时前
快速上手非关系型数据库-MongoDB
数据库·mongodb·nosql
Themberfue9 小时前
Redis ⑧-RESP | 渐进式遍历 | 数据库管理
数据库·redis·sql·缓存
刀一寸9 小时前
PGSql查看表结构以及注释信息
数据库·sql
XY.散人10 小时前
初识Redis · 缓存
数据库·redis·缓存
zyxzyx66610 小时前
Redis实现分布式锁
数据库·redis·分布式