BY8001-16P 语音模块STM32串口代码

1、概述
BY8001-16P 是深圳市百为电子科技有限公司自主研发的一款小巧的新型高品质插卡MP3模块。采用
BY8001-SSOP24 MP3主控芯片,支持MP3、WAV格式双解码。模块内置TF卡座,可插卡进行更换语音内容;也
可外接U盘或USB数据线连接电脑更换TF内容。该模块内置3W功放,可以直接驱动3W的喇叭,使用更方便。
2、产品特性
 支持MP3 、WAV 高品质音频格式文件,声音优美。
 24 位DAC 输出,动态范围支持90dB,信噪比支持85dB。
 支持15 段语音一对一触发播放,3 IO 口硬件选择8 种触发方式,应用更广泛。
 支持UART 异步串口控制:支持播放、暂停、上下曲、音量加减、选曲播放、广告插播等。
 内置音量、曲目、EQ 掉电记忆功能。
 配置TF(Micro SD)卡座,可插卡更换语音内容,最大支持32G 内存卡。
 支持读取U 盘,最大支持32G;也可通过USB 数据线直接更换TF 里面内容。
 自带3W 的功放,直接外接喇叭即可完成播放;客户也可外接单、双通道功放。
 标准2.54mm 间距DIP16 排针封装,小巧美观。
3、技术规格
名称参数
MP3、WAV 文件格

支持采样率8~48K、比特率8~320Kbps 音频文件
UART 接口标准串口,3.3V TTL 电平,波特率9600
输入电压3.6V-5V(推荐值4.2V,5V 时芯片供电建议串个二极管)
静态电流16MA(整个模块)
功放功率接2W/4Ω或1W/8Ω以上喇叭
尺寸22mm21mm
工作温度-40℃~70℃
湿度5%~95%
/

("//项目名:MP3 芯片参考代码\n");
("//功能要求:按键操作播放MP3 功能和音量设置");
("//硬件配置:STM32 最小系统和串口通信");
("//1) MCU 型号:STM32F103");
("//2) 外部振荡频率为:8M");
("//软件版本:UART1: “);
(”//公司名: 深圳市百为电子科技有限公司\n");
("//作者: lanq");
("// 硬件仿真:Pro");
("// 软件文件:Code\n");
("// 开发环境:keil5\n")
("//技术支持:E-mail:balway@163.com\n");
("//修改记录:
*/
#include “stm32f10x.h”
#include “USART1.h”
//位带操作,实现51 类似的GPIO 控制功能
//具体实现思想,参考<<CM3 权威指南>>第五章(87 页~92 页).
//IO 口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr
&0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//IO 口地址映射
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入
#define LED_H GPIO_SetBits(GPIOA, GPIO_Pin_1) // PC1 高电平
#define LED_L GPIO_ResetBits(GPIOA, GPIO_Pin_1) // PC1 低电平
#define KEY_1 PBin(7) //按键使能
#define KEY_2 PBin(10) //按键使能
#define KEY_3 PBin(13) //按键使能
#define KEY_4 PBin(15) //按键使能
#define KEY_5 PBin(12) //按键使能
#define KEY_6 PBin(16) //按键使能
u8 Check = 0;
u8 Play[]={0x7E,0x03,0x01,0x02,0xEF};//播放指令
u8 Call[]={0x7E,0x03,0x0E,0x0D,0xEF};//停止指令
u8 Next[]={0x7E,0x03,0x03,0x00,0xEF};//下一曲指令
u8 Last[]={0x7E,0x03,0x04,0x07,0xEF};//上一曲指令
u8 Add[]={0x7E,0x03,0x05,0x06,0xEF}; //音量+指令
u8 Sub[]={0x7E,0x03,0x06,0x05,0xEF}; //音量减指令
u8 BCCheck(u8 *nDataBuf, u8 nLen)//异或检验函数
{
u8 nSum = 0;
u8 i = 0;
for(i=0; i<nLen; i++)
{
nSum ^= nDataBuf[i];//异或检验函数
}
return nSum;
}
void Key_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
//按键检测
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_10| GPIO_Pin_13| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void Led_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
//按键检测
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY_10||KEY_20||KEY_3 0||KEY_40||KEY_50||KEY_60))
{
key_up=0;
if(KEY_10) return ‘1’;
else if(KEY_2
0)return ‘2’;
else if(KEY_30)return ‘3’;
else if(KEY_4
0)return ‘4’;
else if(KEY_50)return ‘5’;
else if(KEY_6
0)return ‘6’;
}
if(KEY_11&&KEY_21&&KEY_31&&KEY_41&&KEY_51&&KEY_61)key_up=1;
return 0;// 无按键按下
}
int main(void)
{
u8 t;
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2);
USART1_init(9600); //初始化串口波特率9600
USART1_Send_String(“123456789\r\n”,11);
while(1)
{
t = KEY_Scan(0);
if(t)
{
switch(t)
{
case 1:USART1_Send_String(Play,sizeof(Play));break;
case 2:USART1_Send_String(Call,sizeof(Call));break;
case 3:USART1_Send_String(Next,sizeof(Next));break;
case 4:USART1_Send_String(Last,sizeof(Last));break;
case 5:USART1_Send_String(Add,sizeof(Add));break;
case 6:USART1_Send_String(Sub,sizeof(Sub));break;
}
}
}
}

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用HC-05蓝牙模块STM32微控制器进行串口通信时,你可以按照以下步骤编写代码: 1. 首先,确保你已经正确地连接了HC-05模块STM32的串口引脚。一般来说,HC-05的TX引脚连接到STM32的RX引脚,HC-05的RX引脚连接到STM32的TX引脚,同时还要连接HC-05的电源和地。 2. 在STM32的开发环境中创建一个新的工程,并在代码中包含必要的库文件。 3. 初始化串口通信。配置STM32的串口设置,包括波特率、数据位、停止位和奇偶校验位等。 4. 编写代码以实现与HC-05模块的通信。以下是一个简单的例子,演示了如何向HC-05发送数据并接收其返回的数据: ```c #include "stm32f4xx.h" // 定义串口配置 #define USARTx USART2 #define USARTx_CLK_ENABLE() RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE) #define USARTx_RX_PIN GPIO_Pin_3 #define USARTx_RX_GPIO_PORT GPIOA #define USARTx_RX_GPIO_CLK_ENABLE() RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE) #define USARTx_TX_PIN GPIO_Pin_2 #define USARTx_TX_GPIO_PORT GPIOA #define USARTx_TX_GPIO_CLK_ENABLE() RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE) #define USARTx_IRQn USART2_IRQn #define USARTx_IRQHandler USART2_IRQHandler // 初始化串口 void USARTx_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 使能串口时钟和GPIO时钟 USARTx_CLK_ENABLE(); USARTx_RX_GPIO_CLK_ENABLE(); USARTx_TX_GPIO_CLK_ENABLE(); // 配置串口引脚 GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure); // 配置串口参数 USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USARTx, &USART_InitStructure); // 使能接收中断 USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE); // 使能串口 USART_Cmd(USARTx, ENABLE); } // 发送数据到HC-05 void USARTx_SendData(uint8_t data) { while (!(USARTx->SR & USART_SR_TXE)); USART_SendData(USARTx, data); } // 接收HC-05返回的数据 uint8_t USARTx_ReceiveData(void) { while (!(USARTx->SR & USART_SR_RXNE)); return USART_ReceiveData(USARTx); } int main(void) { // 初始化串口 USARTx_Init(); // 发送数据到HC-05 USARTx_SendData('H'); USARTx_SendData('e'); USARTx_SendData('l'); USARTx_SendData('l'); USARTx_SendData('o'); // 接收HC-05返回的数据 uint8_t receivedData = USARTx_ReceiveData(); // 处理接收到的数据 while (1) { // 此处添加其他代码 } } ``` 这只是一个简单的示例,你可以根据实际需求进行修改和扩展。记得根据你的HC-05模块的配置和需求,调整代码中的参数和设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值