目錄
一、介紹
二、傳感器原理
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文件
#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文件
#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文件
#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; //波特率設置:9600USART_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); //初始化USART1USART_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);
}