概述
DY-SV5W MP3模块
- 软硬件条件
- 硬件条件
- 开发环境
- DY-SV5W MP3模块介绍
- 产品概述
- 产品特性
- 工作模式
- UART串口模式
- DY-SV5W 串口通信格式
- 代码实现
- usart2.c
- MP3.c
软硬件条件
硬件条件
-
DY-SV5W MP3模块
-
STM32F407ZET6
开发环境
- keil MDK(5)
DY-SV5W MP3模块介绍
产品概述
DY-SV5W是一款智能语音模块,集成IO分段触发,UART串口控制,ONE_line单总线串口控制,标准MP3等7种工作模式,简单拨码开关设置;板载5W D类功放,可直接驱动4Ω,3~5W喇叭;支持MP3,WAV解码格式,最大支持32G TF卡存储,可通过USB数据线连接电脑更新TF卡存储音频文件。
产品特性
1、完全支持FAT16/FAT32文件系统,最大支持32G的TF卡。
2、自带5W D类功放,可直接驱动4Ω,3~5W喇叭。
3、UART串口控制语音播报功能,可控制播放,暂停,选曲,音量加减等功能,最大选曲65535首曲目,波特率9600bit/s。
4、支持IO触发播放功能,8个IO口单独触发8首曲目或8个IO口组合触发255首曲目。
5、支持3个配置IO进行多达7种工作模式选择,拨码开关设置简单。
工作模式
UART串口模式
配置DY-SV5W为UART串口模式需将拨码开关配置引脚CON3拉高,其他拉低。
DY-SV5W 串口通信格式
采用全双工串口通信;
波特率为 9600,数据位:8 ,停止位 1 位,检验位 N。
起始码-指令类型-数据长度(n)-数据 1-数据 n-和检验(SM)
※ 指令码 :固定为 AA。
※ 指令类型 : 用来区分指令类型。
※ 数据长度:指令中的数据的字节数。
※ 数据 :指令中的相关数据,当数据长度为 1 时,表示只有 CMD,没有数据位。
※ 和检验 :为之前所有字节之和的低 8 位,即起始码到数据相加后取低 8 位。
※ 数据格式:发送的数据或命令,高 8 位数据在前,低 8 位在后。
代码实现
本程序中 使用STM32F407 串口2 与 MP3模块进行串口通信,注意需将STM32F407 串口2波特率设置为9600。
曲目名称必须按照5位数字进行命名。例如:00001.mp3,00002.mp3。
usart2.c
串口配置可参考正点原子教程
#include "sys.h"
#include "usart2.h"
#include "math.h"
#include "stdlib.h"
u16 USART2_RX_STA=0;
u8 Res ;
u16 len;
u8 USART2_RX_BUF[USART2_REC_LEN];
void usart2_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); //使能GPIOD时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //使能USART2时钟
GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2); //GPIOD5复用为USART2
GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_USART2); //GPIOD6复用为USART2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; //PD5,PD6,复用功能,上拉输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PD5,PD6
USART_InitStructure.USART_BaudRate = bound; //一般设置为9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
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(USART2, &USART_InitStructure); //初始化串口
USART_Cmd(USART2, ENABLE); //使能串口
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //开启相关中断
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //串口2中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
}
void USART2_IRQHandler(void) //串口2中断服务程序 可以
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART2); //读取接收到的数据
if((USART2_RX_STA&0x8000)==0) //接收未完成
{
if(USART2_RX_STA&0x4000) //
{
if(Res!=0x0a)USART2_RX_STA=0; //接收错误,重新开始
else USART2_RX_STA|=0x8000; //接收完成了
}
else
{
if(Res==0x0d)USART2_RX_STA|=0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
MP3.c
这里给出DY-SV5W 串口配置部分指令,其他指令可参考此程序,自行对着DY-SV5W数据手册编写
#include "mp3.h"
#include "delay.h"
// 0x00 全盘循环
// 0x01 单曲循环
// 0x02 单曲停止
// 0x03 全盘随机
// 0x04 目录循环
void Loop_mode(u8 mode)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x18);
delay_ms(10);
USART_SendData(USART2,0x01);
delay_ms(10);
USART_SendData(USART2,mode);
delay_ms(10);
USART_SendData(USART2,0xC3+mode);
delay_ms(10);
}
//播放 从头开始播放当前曲目
void Mp3_play(void)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x02);
delay_ms(10);
USART_SendData(USART2,0x00);
delay_ms(10);
USART_SendData(USART2,0xAC);
delay_ms(10);
}
//暂停
void Mp3_suspend(void)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x03);
delay_ms(10);
USART_SendData(USART2,0x00);
delay_ms(10);
USART_SendData(USART2,0xAD);
delay_ms(10);
}
//停止
void Mp3_stop(void)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x04);
delay_ms(10);
USART_SendData(USART2,0x00);
delay_ms(10);
USART_SendData(USART2,0xAE);
delay_ms(10);
}
//上一曲
void Mp3_prev(void)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x05);
delay_ms(10);
USART_SendData(USART2,0x00);
delay_ms(10);
USART_SendData(USART2,0xAF);
delay_ms(10);
}
//下一曲
void Mp3_next(void)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x06);
delay_ms(10);
USART_SendData(USART2,0x00);
delay_ms(10);
USART_SendData(USART2,0xB0);
delay_ms(10);
}
//指定曲目
//入口参数
//high 曲目高8位
//low 曲目低8位
void Assigned_music(u8 high ,u8 low)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x07);
delay_ms(10);
USART_SendData(USART2,0x02);
delay_ms(10);
USART_SendData(USART2,high);
delay_ms(10);
USART_SendData(USART2,low);
delay_ms(10);
USART_SendData(USART2,0xB3+high+low);
delay_ms(10);
}
//设置音量
//入口参数vol 音量大小
void Set_vol(u8 vol)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x13);
delay_ms(10);
USART_SendData(USART2,0x01);
delay_ms(10);
USART_SendData(USART2,vol);
delay_ms(10);
USART_SendData(USART2,0xBE);
delay_ms(10);
}
//加音量
void Add_vol(void)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x14);
delay_ms(10);
USART_SendData(USART2,0x00);
delay_ms(10);
USART_SendData(USART2,0xBE);
delay_ms(10);
}
//减音量
void Minus_vol(void)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x15);
delay_ms(10);
USART_SendData(USART2,0x00);
delay_ms(10);
USART_SendData(USART2,0xBF);
delay_ms(10);
}
//设置循环次数
//入口参数
//hightimes 次数高8位
//lowtimes 次数低8位
void Set_looptimes(u8 hightimes ,u8 lowtimes)
{
USART_SendData(USART2,0xAA);
delay_ms(10);
USART_SendData(USART2,0x19);
delay_ms(10);
USART_SendData(USART2,0x02);
delay_ms(10);
USART_SendData(USART2,hightimes);
delay_ms(10);
USART_SendData(USART2,lowtimes);
delay_ms(10);
USART_SendData(USART2,0xC5+hightimes+lowtimes);
delay_ms(10);
}
最后
以上就是踏实小丸子为你收集整理的【STM32串口控制DY-SV5W MP3模块】软硬件条件DY-SV5W MP3模块介绍UART串口模式代码实现的全部内容,希望文章能够帮你解决【STM32串口控制DY-SV5W MP3模块】软硬件条件DY-SV5W MP3模块介绍UART串口模式代码实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复