MP3音乐播放器芯片VS1053B芯片使用教程
c_SPI_SI = 1 c_SPI_SI = 0 c_SPI_CLK = 1 c_SPI_CLK = 0
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
//#define SPIWait() { while((S0SPSR & 0x80) == 0); }//等待 SPI 将数据发送完毕
MP3 音乐播放器芯片 VS1053B 芯片使用教程
MP3,MP4,数码相机曾经是奢侈品。科技发展了,这些东西也就成了普通手 机的附属品了。但是作为手艺人学习这些芯片了解这些高性能芯片是很有必要的。 学习了解它既拓展了自己的眼界,也可以提升自己对嵌入式系统的认识。原子战 舰板上就板载了一颗高性能 MP3 音乐播放器芯片 VS1053B 芯片。通过原子源码对 一些参数的修改,也能欣赏美妙的音乐。这是一款真正的数字产品。还可以作为 录音机使用。
static uchar SPI_RecByte(void)
{
uchar ucReadData; uchar ucCount;
ucReadData = 0; Macro_Set_SI_High();
for(ucCount=0; ucCount<8; ucCount++) {
ucReadData <<= 1; //降低时钟频率
S0SPCCR = 0x08;
// SPI 时钟设置
S0SPCR = (0 << 3) |
// CPHA = 0,
(0 << 4) |
// CPOL = 0,
(1 << 5) |
// MSTR = 1,
(0 << 6) |
// LSBF = 0,
(0 << 7);
// SPIE = 0,
*/
c_SPI_SO = 1;
*************************************
** 函数名称: INT8U SPI_RecByte()
Name: INT8U SPI_RecByte()
** 功能描述: 从 SPI 接口接收一个字节
Function: receive a byte from SPI
interface
MP3_XRESET = 1; MP3_XCS = 1; MP3_XDCS = 1; }
//uint8 SD_SPI_ReadByte(void); //void SD_SPI_WriteByte(uintyte() SD_SPI_ReadByte() //#define SPIPutChar(x) SD_SPI_WriteByte(x)
uchar ucTempCount; uchar uci;
for(ucTempCount=0; ucTempCount<ucDelayCount; ucTempCount++)
{
//
uci = 200; //Err
//
uci = 250; //OK
uci = 230;
while(uci--)
{
_nop_();
VS1053 是继 VS1003 后荷兰 VLSI 公司出品的又一款高性能解码芯片。 该芯片可以实现对 MP3/OGG/WMA/FLAC/WAV/AAC/MIDI 等音频格式的解码,同时还 可以支持 ADPCM/OGG 等格式的编码,性能相对以往的 VS1003 提升不少。VS1053 拥有一个高性能的 DSP 处理器核 VS_DSP,16K 的指令 RAM,0.5K 的数据 RAM,通 过 SPI 控制,具有 8 个可用的通用 IO 口和一个串口,芯片内部还带了一个可变 采样率的立体声 ADC(支持咪头/咪头+线路/2 线路)、一个高性能立体声 DAC 及 音频耳机放大器。
MP3_DREQ = 1;
}
/**********************************************************/
/* 函数名称 : InitPortVS1003
*/
/* 函数功能 : MCU 与 vs1003 接口的初始化
*/
/* 参数 : 无
*/
/* 返回值 : 无
Macro_Set_CLK_Low();
if(c_SPI_SO) {
ucReadData |= 0x01; } Macro_Set_CLK_High();
下面是电路图:
下面是音频驱动电路图:即耳机驱动电路。
这两张电路图是战舰板原理图,电路图设计是核心技术。本人对原子的电路设计只有学 习和佩服的份。其中 74HC4052 和 TDA1308 分别是用作音频选择和耳机驱动,74HC4052 芯 片将板载的 MP3,FM 收音机和 STM32 发出的方波信号通过程序控制做出选择;也就是说将 众多音频信号集于一身可以分别单独送到耳机驱动电路输出,既节约了空间也节约了成本。 设计非常精妙!
新增
* Huafeng Lin
20010/09/10
修改
*
*/
#include "vs1003.h" #include "MusicDataMP3.c"
#include <intrins.h>
#define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define bool bit #define true 1 #define flase 0
/* 返回值 : 无
*/
/*--------------------------------------------------------*/
void MSPI_Init(void)
{
/*
PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500; //选择 SPI
通过学习 VS1053B,对电路分析能力也有提高。如果看不懂电路图,即便 c 语言代码分 析的多么透彻也无济于事。 通过学习类似 VS1053B 芯片的驱动,能真正提高手艺人的编程 能力。通过数据手册,写出相应芯片的驱动程序实现一些简单功能是一个程序员的核心竞争 力!这里涉及到许多 c 语言编程技巧。一句话,目前我是没有这个能力。也就只能好好学习 别人源码的份了。有所收获就记录下来。
#if 1
/**********************************************************/
/* 函数名称 : SPIPutChar
*/
/* 函数功能 : 通过 SPI 发送一个字节的数据
*/
/* 参数 : 待发送的字节数据
*/
/* 返回值 : 无
*/
/*--------------------------------------------------------*/
** 输 入: 无
Input: NULL
** 输 出: 收到的字节
Output: the byte that be received
*******************************************************************************
*************************************/
//#define SPI_RESULT_BYTE S0SPDR
//extern long volatile timeval; //用于延时的全局变量 //1ms Delayfunction //void Delay(uchar ucDelayCount) void wait(uchar ucDelayCount) {
* 用途:MP3 模块测试程序
*
vs1003 的硬件测试程序,主控芯片为 STC12LE5A60S2
*
其他的微处理器(带 SPI 接口的)只需稍加修改即可适用
*
对于不带硬 SPI 接口的微处理器可以用 IO 进行 SPI 的时序模拟
*
* 作者
日期
备注
* Huafeng Lin
20010/09/10
Macro_Set_CLK_Low();
if(ucMaskCode & ucSendData) {
Macro_Set_SI_High(); } else {
Macro_Set_SI_Low(); }
Macro_Set_CLK_High(); ucMaskCode >>= 1;
} }
/******************************************************************************
// IODIR |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS 均为输出口
// IOSET |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS 默认输出高电平
MP3_DREQ = 1;
//置为输入
//针对 SD 卡读写板调整引脚 #define uint8 unsigned char
MP3音乐播放器芯片VS1053B芯片使用教程
#if 1
/**********************************************************/
/* 函数名称 : SPIPutChar
*/
/* 函数功能 : 通过 SPI 发送一个字节的数据
*/
/* 参数 : 待发送的字节数据
*/
/* 返回值 : 无
*/
/*--------------------------------------------------------*/
*/
/*--------------------------------------------------------*/
void InitPortVS1003(void)
{
MSPI_Init();//SPI 口的初始化
// IODIR &= 0xfffeffff; //其他接口线的设置,其中 dreq 为输入口
** 输 入: 无
Input: NULL
** 输 出: 收到的字节
Output: the byte that be received
*******************************************************************************
*************************************/
// IODIR |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS 均为输出口
// IOSET |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS 默认输出高电平
VS1053B中文资料应用
7.2.2 VS1001 兼容模式(不推荐) . . . . .. . . . . . . . . . . . . . . . . . . 18
7.3 数据请求引脚 DREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.4 功率消耗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.5 数字电路特性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.2.4 支持的 Ogg Vorbis 格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.1 LQFP‐48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6 接线图, LQFP‐48167 SPI 总线
18
7.1 通用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
VS1053_MP3模块用户手册.pdf
项目 接口特性 解码格式 编码格式 对外接口 板载录音 其他特性 模块尺寸
项目 DAC 分辨率 总谐波失真(THD) 动态范围(A-加权) 信噪比 通道隔离度(串扰) 咪头(MIC)放大增益 咪头(MIC)总谐波失真 咪头(MIC)信噪比 LINE IN 信号幅度 LINE IN 总谐波失真 LINE IN 信噪比 LINE IN 阻抗
用户手册 4
VS1053 MP3 模块用户手册
高性能音频编解码模块
主机必须在判断 DREQ 有效(高电平有效)后,才可以发送数据,每次可以发送 32 字节。 这里我们重点介绍一下 SCI。SCI 串行总线命令接口包含了一个指令字节、一个地址字 节
和一个 16 位的数据字。读写操作可以读写单个寄存器,在 SCK 的上升沿读出数据位,所 以主机必须在下降沿刷新数据。SCI 的字节数据总是高位在前低位在后的。第一个字节指 令 字节,只有 2 个指令,也就是读和写,读指令为:0X03,写指令为:0X02。
图 2.3.3.2 SCI 写时序 图 2.3.3.2 中,其时序和图 2.3.3.1 基本类似,都是先发指令,再发地址。不过写时序中, 我们 的指令是写指令(0X02),并且数据是通过 SI 写入 VS1053 的, SO 则一直维持低电 平。另 外,在图 2.3.3.1 和图 2.3.3.2 中,DREQ 信号上都产生了一个短暂的低脉冲,也就是 执行时间。这个不难理解,我们在写入和读出 VS1053 的数据之后,它需要一些时间来处理 内部的事情,这段时间,是不允许外部打断的,所以,我们在 SCI 操作之前,最好判断一 下 DREQ 是否为高电平,如果不是,则等待 DREQ 变为高。 了解了 VS1053 的 SPI 读写,我们再来看看 VS1053 的 SCI 寄存器。 2.3.2 SCI 寄存器 VS1053 总共有 16 个 SCI 寄存器,通过这些寄存器实现对 VS1053 的各种控制,VS1053 的所有 SCI 寄存器如表 2.3.2.1 所示:
基于STM32的多功能音频播放器的设计
福建电脑2012年第12期基于STM32的多功能音频播放器的设计高云红1,刘志群2(1.山东行政学院计算机系山东济南2500142.闽江学院物理学与电子信息工程系福建福州350108)【摘要】:文章设计了一款基于STM32F103RBT6的多功能音频播放器,系统以STM32F103RBT6为控制核心,利用高性能、低功耗的音频解码芯片VS1053B实现音频数据解码,文件管理控制芯片CH376实现SD卡中的音频文件、图片、电子书等内容的读写,并配合2.8寸TFT触摸液晶屏,构建友好的人机交互系统。
整个系统实现了音频的高质量播放、图片和电子书浏览等功能,具有操作方便稳定可靠等特点。
【关键词】:STM32F103RBT6;VS1053B;音频解码;CH3761、引言自从1998年韩国第一款MP3播放器诞生以来,就受到了广大消费者的青睐,MP3播放器以其广阔的市场容量、丰厚的利润和较低的产业门槛等优势,吸引了众多电子企业积极参与,并且成为了IT行业的一个新增长点。
随着电子技术的发展和芯片集成度的提高,现阶段的MP3播放器在维持自身轻巧、时尚、下载方便、存储容量大、高音质等优势的前提下,还应尽可能吸收其它产品的功能,以便增加产品的卖点。
系统包括以下几个电路模块:STM32F103RBT6最小系统模块、VS1053音频解码模块、JTAG下载接口电路、SD卡、EEPROM模块24C04、2.8寸TFT液晶、USB转串口PL2303模块、USB控制芯片CH376等。
其中,STM32F103RBT6最小系统模块是整个系统的控制核心,USB转串口PL2303模块负责将电脑的USB口转换成串口;EEPROM存储器24C04用来存储系统掉电后的一些信息;SD卡模块用来储存音乐文件、汉字字库、图片等资源;TFT触摸液晶模块实现信息显示和触摸屏的控制;VS1053B音频解码模块主要获取STM32F103RBT6传入的音频文件信息与控制信息,同时解码输出音频信号;电源模块提供+3.3V 直流电压。
VS1003中文说明
VS1003-MP3/WMA 音频解码器VS1003 DataSheet 翻译版VS1003 特性:●能解码MPEG 1 和MPEG2 音频层III(CBR+VBR+ABR);WMA 4.0/4.1/7/8/9 5-384kbps 所有流文件;WAV(PCM+IMAAD-PCM);产生MIDI/SP-MIDI 文件。
●对话筒输入或线路输入的音频信号进行IMAADPCM编码●支持MP3 和WAV 流●高低音控制●单时钟操作12..13MHz●内部PLL锁相环时钟倍频器●低功耗●内含高性能片上立体声数模转换器,两声道间无相位差●内含能驱动30 欧负载的耳机驱动器●模拟,数字,I/O 单独供电●为用户代码和数据准备的5.5KB片上RAM●串行的控制,数据接口●可被用作微处理器的从机●特殊应用的SPI Flash引导●供调试用途的UART接口●新功能可以通过软件和4 GPIO 添加VS1003概述:●VS1003 是一个单片MP3/WMA/MIDI音频解码器和ADPCM编码器。
它包含一个高性能,自主产权的低功耗DSP 处理器核VS_DSP4,工作数据存储器,为用户应用提供5KB 的指令RAM 和0.5KB 的数据RAM。
串行的控制和数据接口,4 个常规用途的I/O 口,一个UART,也有一个高品质可变采样率的ADC和立体声DAC,还有一个耳机放大器和地线缓冲器。
●VS1003 通过一个串行接口来接收输入的比特流,它可以作为一个系统的从机。
输入的比特流被解码,然后通过一个数字音量控制器到达一个18 位过采样多位ε-ΔDAC。
通过串行总线控制解码器。
除了基本的解码,在用户RAM 中它还可以做其他特殊应用,例如DSP 音效处理。
PDF created with pdfFactory Pro trial version 4.1参数容许最大范围参数符号最小最大单位模拟正电源AVDD -0.3 3.6 V数字正电源CVDD -0.3 2.7 VI/O 正电源IOVDD -0.3 3.6 V所有数字口输出电流±50 mA所有数字口输入电压-0.3 IOVDD+0.31 V操作温度-40 +85 ℃存储温度-60 +150 ℃1 不能超过3.64.2建议操作环境参数符号最小值典型值最大值单位环境温度-25 +70 ℃模拟和数字地1 AGND DGND 0.0 V模拟正电源AVDD 2.6 2.8 3.6 V数字正电源CVDD 2.4 2.5 2.7 VI/O 正电源IOVDD CVDD-0.6V 2.8 3.6 V输入时钟频率2 XTAL1 12 12.288 13 MHz内部时钟频率CLKI 12 36.864 50.04 MHz内部时钟倍频数3 1.0x 3.0x 4.0x主机时钟占空比40 50 60 %1 必须相互连接并尽量靠近VS1003 以避免锁存上拉2 最大的采样率XTAL1/256,决定了能以正确的速度播放的音频采样率。
VS1053的应用
VS1053的应用VS1053本身是一款非常强大的MP3解码芯片,然而大多是人实践上才用了它很小一部份功能。
我也是第一次使用VS1053,所以也只用了它非常少的功能。
1. 最常见的方法就是,通过MCU控制VS1053进行解码。
用这中方法是最为简单的,只要正确使用VS1053的命令就可以实现。
当然这样可以快速使用VS1053,是入门的最好方法,但是成本比较高。
2. 直接使用VS1053进行控制,这样就节约了一块MCU。
不过需要应用VSIDE平台,所以使用起来相当比较麻烦。
本人就讲讲使用第一种方法的应用,等以后利用第二种方法进行开发时,在和大家一起学习。
VS1053的应用其实非常简单,基本的步骤如下:1. 编写好SPI总线驱动代码;2. 编写好VS1053初始化代码;3. 编写正弦波测试代码;4. 内存测试代码。
完成以上几个步骤后就可以进行MP3解码了。
/************************************************************** ************************* FunctionName : VS1053SineTest()* Description : 正弦波测试* EntryParameter : freq - 测试频率 0x24,0x44等* ReturnValue : None*************************************************************** ***********************/void VS1053SineTest(uint8 freq){uint8 i;uint8 test[] = {0x53, 0xEF, 0x6E, 0x24, 0x00, 0x00, 0x00,0x00}; // 向vs发送正弦测试命令uint8 back[] = {0x45, 0x78, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00}; // 向vs发送退出测试命令VS_XRESET_CLR(); // xreset = 0VS1053_Delay(100);SSP1Send(0xFF); // 发送一个字节的无效数据,启动SPI传输VS_CS_SET(); // cs = 1VS_XDCS_SET(); // xdcs = 1VS_XRESET_SET(); // xreset = 1VS1053_Delay(100);VS1053WriteReg(VS_SCI_MODE, 0x0820); // enter vs1003 test modelwhile (VS_DREQ_PIN() == 0); // wait for DREQ Highlevel GPIOSetValue(1, 2, 0); // xdcs = 0test[3] = freq; // 写入频率for (i=0; i<8; i++){VS1053WriteData(test[i]); // 程序执行到这里后应该能从耳机听到一个单一频率的声音}VS_XDCS_SET(); // xdcs = 1VS1053_Delay(100000);GPIOSetValue(1, 2, 0); // xdcs = 0for (i=0; i<8; i++){VS1053WriteData(back[i]); // 退出正弦测试}VS_XDCS_SET(); // xdcs = 1VS1053_Delay(200);/************************************************************** ************************* FunctionName : VS1053RamTest()* Description : 内存测试,0x8000表示测试完成,0x83FF表示完好* EntryParameter : None* ReturnValue : 完好返回0,否则返回1*************************************************************** ***********************/uint8 VS1053RamT est(void){uint16 res = 0x0000;uint8 i;uint8 test[] = {0x4D, 0xEA, 0x6D, 0x54, 0x00, 0x00, 0x00, 0x00}; //VS_XRESET_CLR(); // xreset = 0VS1053_Delay(100);SSP1Send(0xFF);VS_CS_SET(); // cs = 1VS_XDCS_SET(); // xdcs = 1VS_XRESET_SET(); // xreset = 1VS1053_Delay(100);VS1053WriteReg(VS_SCI_MODE, 0x0820); // Allow SCI tests while (VS_DREQ_PIN() == 0); // wait for DREQ Highlevel //After this sequence wait for 1100000 clock cycles.//The result can be read from the SCI register SCL_HDATA0 GPIOSetValue(1, 2, 0); // xdcs = 0for (i=0; i<8; i++)VS1053WriteData(test[i]); // 写入测试代码}VS_XDCS_SET(); // xdcs = 1VS1053_Delay(10000);res = VS1053ReadReg(VS_SCI_HDAT0); // 如果得到的值为0x83FF,则表明完好。
MP3-stm32-资料
Cortex-M3 是ARM 公司为要求高性能(1.25 Dhrystone MIPS/MHz)、低成本、低功耗的嵌入式应用专门设计的内核。
STM32 系列产品得益于Cortex-M3 在架构上进行的多项改进,包括提升性能的同时又提高了代码密度的Thumb-2 指令集和大幅度提高中断响应的紧耦合嵌套向量中断控制器,所有新功能都同时具有业界最优的功耗水平。
本系统是基于Cortex-M3 内核的STM32 微控制器的mp3 播放器,在硬件方面主要有VS1003 硬件音频解码器和12864 点阵液晶屏,在软件方面主要有VS1003 的驱动,SD 卡工作在SPI 模式下的读写驱动,FAT 文件系统的移植,12864 液晶的驱动,(嵌入式操作系统ucOSii 的移植以及嵌入式图形管理器ucGUI 的移植)。
首先将MP3歌曲文件从内存中取出并读取存储器上的信号→到解码芯片对信号进行解码→通过数模转换器将解出来的数字信号转换成模拟信号→再把转换后的模拟音频放大→低通滤波后到耳机输出口,输出后就是我们听到的音乐。
STM32不同的外设是挂载在不同的总线上的,见图5-8。
有AHB总线、APB2总线、APB1总线从芯片角度来说,时钟源分为内部时钟与外部时钟源,内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用内部高速时钟。
而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号。
所以,STM32有以下4个时钟源:高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。
高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz,但不稳定。
低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。
野火M3实验板上用的是32.768KHz,6p负载规格的晶振。
基于STM32的多功能音乐播放器设计
• 123•基于STM32的多功能音乐播放器设计绵阳职业技术学院 罗金生 王荣海 李 岷 刘 成以音乐播放器为研究对象,提出一种基于STM32的音乐播放器的硬件和软件的设计方法,系统以STM32F103ZET6为控制核心,音频解码芯片VS1053B实现音频数据解码,挂载FATFS文件系统实现对SD卡中的音频文件进行读取,利用FFT快速傅里叶变换将音频信号转为频谱,加入了一个小型GUI显示界面配合OLED显示屏,实时的将界面、播放状态以及频谱生动的展示出来,此外还加入了蓝牙音频功能,通过手机蓝牙即可连接播放器播放音乐。
实验表明,该音乐播放器连接耳机能流畅播放多种格式的音乐文件,具有多功能、高性能、低功耗、操作方便、稳定可靠等特点。
引言:音乐可能是人类史上最古老、最具普遍性以及感染力的艺术形式之一。
音乐能提高人的审美能力,净化人们的心灵,树立崇高的理想。
不论时代怎么发展,人们的生活娱乐都离不开音乐。
因此,设计一款简单实用,多功能化的音乐播放器完全可以符合人们的爱好及需求。
本文介绍一种基于STM32F103处理器的SDIO接口模块及外围音频解码芯片实现一个SD卡的音乐播放器,它读取存储在SD卡里的音频格式文件,并通过立体声音解码芯片输出,能进行频谱显示,还可以通过手机蓝牙与其连接播放音乐等功能。
1.系统硬件电路设计基于STM32F103VET6微控制器所设计的MP3播放器,主要包括:存储模块、蓝牙音频模块、音频解码模块、显示模块。
系统方案设计的系统框图如图1所示。
主控制器芯片,利用其SDIO接口不断读取SD卡音频文件送入缓存区;使用了三组SPI接口,第一组SPI接口将读取的音频数据流送至音频解码芯片VS1053进行解码,第二组SPI接口连接了字库存储芯片,用于显示歌曲名等,第三组SPI接口连接OLED显示屏幕实现人机交互以及显示歌曲信息和频谱等;使用了一个定时器、一个DMA以及一个ADC通道实时快速采集音频输出,并利用FFT将其从时域转换为频域;使用通用IO控制蓝牙以及音频切换芯片和键盘。
MP3播放器实验
它使用的 IO 为:
VS1053 的 SPI 支持两种模式: 1, VS1002 有效模式 (即新模式) 。 2, VS1001 兼容模式。这里我们仅介绍 VS1002 有效模式(此模式也是 VS1053 的默认模 式) 。 从原理图中,我们看出 VS1053 跟单片机相连的引脚主要有 7 根,他们是: 1) VS_MISO:SPI 输入线 2) VS_MOSI:SPI 输出线 3) VS_SCK:SPI 时钟线 4) VS_XCS:器件片选 5) VS_XDCS:数据片选和字节同步 6) VS_DREQ: 数据请求, 输入总线。 这个信号引脚是用来反馈 VS1053 的 2048 字节 FIFO 是否可以接受数据。如果它为高电平,则 VS1053 可以接收最少 32 字节的 SDI 数据或者接受 SCI 命令。 当流缓冲区太 满和 SCI 命令正在执行的期间,DREQ 会转换到低电平,此时应该 停止想 VS1053 发送新数据和命令。 7) VS_RST:复位端 31.2 VS1053 的操作 VS1053 通信支持 SPI 协议,所以我们使用 STM32 的硬件 SPI 发送接收数据 就可以了, 开发板上面使用的是 STM32 的硬件 SPI1, 具体操作跟之前介绍的 SPI 操作时一样的,这么我们就不详细介绍了。 1. SCI 串行命令写操作 此串行命令接口 SCI 的串行总线协议包括:一个指令字节、一个地址字节和 一个 16 位的数据字,也就是 4 个字节。
MP3 播放器实验
学习目标 1. 复习 STM32 硬件 SPI 2. 学会操作 VS1053 播放音乐 前几年,MP3 曾经风行一时,几乎人手一个,今天我们用开发板自己来实现 一个 MP3 播放器。 31.1 VS1053 简介 VS1053 是继 VS1003 后荷兰 VLSI 公司出品的又一款高性能解码芯片。该 芯片可以实现对 MP3/OGG/WMA/FLAC/WAV/AAC/MIDI 等音频格式的解码, 同 时还可以支持 ADPCM/OGG 等格式的编码, 性能相对以往的 VS1003 提升不少。 开发板上面自带了一个 VS1053 解码芯片,电气原理图为:
在VS1003上实现wma格式音乐的播放
在VS1003上实现wma格式音乐的播放在VS1003上实现wma格式音乐的播放今天晚上我在我做的mp3上试验了播放wma音乐。
vs1003手册上说可以解码吗mp3 wma和midi格式的音乐。
试验发现播放wma音乐可以像播放mp3那样播放,只要把wma 文件数据送给vs1003就可直接播放。
刚开始在从正在播放的wma音乐转入下一首音乐会出现不能播放的问题。
wma格式不像mp3格式那样容易播放,因此不能播放的原因是其不能正确结束当前播放的数据帧。
后来查datasheet发现可以通过设置SCI_MODE的SM_OUTOFWAV位来结束wma的播放。
由于我的程序没有判断当前播放的音乐是什么类型音乐的程序。
所以我有找了个变通的方法,就是复位。
我用的是软件复位,通过设置SCI_MODE的SM_RESET位来实现。
即在播放每一首歌前复位一下vs1003就可解决wma歌曲的切换。
按手册上的要求复位前最好向VS1003填充2048个0 且这些数据要根据DREQ引脚的请求送给芯片。
另外复位后还要延时约1.35ms芯片才能恢复到先前的工作频率。
接下来就可以发送你的mp3或wma数据了。
不过这种方法只能整首的播放wma音乐,不能快进。
如要快进VLSI网站上有示例代码。
现在我的mp3可以播放mp3和wma两种格式的音乐了,至于midi有空再研究。
不知阿永第三版的mp3板是否支持wma,如果没有可以考虑把它加上去,不复杂的,只要按我上面的方法就可。
今天早上我又把vs1003的midi功能做出来了。
不过在播放midi之前要把SMF1格式的midi转成SMF0格式的midi文件。
在应用手册上的网址/doc/b36593691.html,/下载转换程序GN1:0转换。
将转换后的文件拷到sd卡中按播放mp3及wma的方式播放即可。
但要注意在从正在播放的midi曲子跳出来,在复位前就不要填充2048个零了如果填充了将会花很长时间才能进入下一首歌的播放,因为midi 需要的数据量很小。
