BY9301-16P语音播报

需要用到这个模块播放特定的语音,主要是基于这个文章复刻的,博主给的代码很全,非常感谢

STM32驱动BY9301语音播报模块-CSDN博客文章浏览阅读2.3k次,点赞4次,收藏52次。简介:STM32F103C8T6驱动BY9301语音播报模块源码介绍。_by9301https://blog.csdn.net/m0_50669075/article/details/130067516

BY9301-16P语音播报模块实物如下图所示:

原理图如下:

为了方便在这里使用USART2通信,开发板使用的是正点原子探索者STM32F407,连接PA2,PA3

以下是sound.h的代码,定义了初始化函数,音量设置,选着特定文件播报,播放暂停功能。

#ifndef __BY9301_AS_H
#define	__BY9301_AS_H
 
#include "stm32f4xx.h"
 

typedef struct {
	void (* init)(uint32_t);
	void (* sayFileID)(uint8_t);
	void (* setVolume)(uint8_t);
	void (* playPause)(uint8_t);
	void (* sound_play)(uint8_t);
} BY9301ClassStruct;
 
extern BY9301ClassStruct BY9301Class;//声明个外部可见的结构体变量,用于在其他源文件中引用 BY9301 模块的功能接口。
 
#endif

其中比较重要的两个关于播报的函数如下:

/**
	* @brief  语音串口发送 具体协议参见手册
	* @param  str: 要发送的内容
  * @retval None
  */
static void BY9301_SendString(uint8_t *str)
{
	if(str[1] == 0) return;
	uint8_t i;
	for(i = 0; i < str[1] + 2; i++) 
	{
		USART_SendData(USART2, str[i]);
		while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET){}
	}
	while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET){}
}
/**
  * @brief  指定序号播报 
  * @param  NOx: mp3文件序号
  中文:黑1 白2 红3 绿4 蓝5
  英文:黑6 白7 红8 绿9 蓝10
  * @retval None
  */
static void BY9301_Say(uint8_t NOx)
{
	uint8_t arr[8] = {0};
	arr[0] = 0x7E;
	arr[1] = 0x05;
	arr[2] = 0x41;
	arr[3] = 0x00;
	arr[4] = NOx;
	arr[5] = arr[1]^arr[2]^arr[3]^arr[4];
	arr[6] = 0xEF;
	BY9301_SendString(arr);
}

效果演示:

by9301效果演示

参考 

STM32驱动BY9301语音播报模块-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值