基于STM32单片机的MP3音乐播放器设计.docx

上传人:b****8 文档编号:28029942 上传时间:2023-07-07 格式:DOCX 页数:34 大小:1.56MB
下载 相关 举报
基于STM32单片机的MP3音乐播放器设计.docx_第1页
第1页 / 共34页
基于STM32单片机的MP3音乐播放器设计.docx_第2页
第2页 / 共34页
基于STM32单片机的MP3音乐播放器设计.docx_第3页
第3页 / 共34页
基于STM32单片机的MP3音乐播放器设计.docx_第4页
第4页 / 共34页
基于STM32单片机的MP3音乐播放器设计.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

基于STM32单片机的MP3音乐播放器设计.docx

《基于STM32单片机的MP3音乐播放器设计.docx》由会员分享,可在线阅读,更多相关《基于STM32单片机的MP3音乐播放器设计.docx(34页珍藏版)》请在冰豆网上搜索。

基于STM32单片机的MP3音乐播放器设计.docx

基于STM32单片机的MP3音乐播放器设计

基于STM32单片机的MP3播放器设计

摘要

众所周知,越来越多的人对MP3的追求逐渐下降,MP3的功能并没有像酷狗一样显示歌词等那么方便。

通过对STM32F103C8T6单片机MP3播放器的研究设计,来提升整个系统的功能。

系统运行的原理是利用数据卡存储歌曲歌词在,然后通过LCD1602显示屏根据个人的选择进行播放和显示。

整个屏幕类似酷狗界面,可以进行歌曲的各种模式的设置,具有很强的画面感,为了贴近生活需求,采用触屏的模式来操作。

系统的编程主要是利用上C语言,根据自身的需求可以进行不同功能款式的设计,整个电路的设计是相对比较简单的,MP3体积小容易携带,加上能够进行触屏影像,会更受到广大消费者的喜爱。

关键词:

MP3播放器;STM32F103C8T6;VS1003;SD卡

 

1绪论

1.1课题研究背景

随着科技的进步,每个家庭都拥有者许多家电产品和电子产品。

目前存在着许多数码产品中,便携式MP3播放器因为其存储数据和播放音频的功能被大家所熟知。

它虽然体积十分小,但是却包含了包括存储器,显示屏和处理器等多个模块。

其中最为关键的部分,便是中央处理器。

其向显示屏等部位发出指令,使得各个部分正常工作。

自从MP3播放器在市场上飞快的进步与发展,它被人们热爱且广泛应用,于是它的功能也越来越多。

在市场中,国产品牌的MP3以纽曼、蓝魔、魅族等企业占据了国内的大部分市场。

如今,在让播放器保证高质量的同时,汲取其它电子产品的功能和优点,可以使其增加更多卖点。

1.2国内外研究现状

MP3全称是MPEGLayer3,很多人都知道MP3是一种便捷式的音频播放系统,不管走到哪里都能听到喜欢的歌曲来充实生活,第一款MP3是在韩国推出的,由于该系统的音乐质感很好,并且能够将其随身携带,给很多消费者带来了方便。

于是市场销量也开始上升,很多企业开始推出自己的产品,但是不同的只是外观和性能的差异。

随着播放器的需求量的提升,系统也就面临着升级,只有升级才能获得更多的市场占有率。

播放器升级主要是针对芯片进行代码程序的编写。

IC供应商为此提供了很多解码的芯片,有在Micronas方案(MAS3507+DAC3550),和台湾创品方案(T33510,T33520)以及美国SigmaTel方案(STMP3400)和TI的DA-250解决方案。

由于芯片解决方案产生,使得播放器的开发和设计更加简单,并且成本也会比较低,这使得播放器市场更加强大。

STM32系列微控制器主要是利用ARM公司的CortexM3内核。

VS1003音频解码芯片为VS10xx系列的第三代产品,是芬兰VLSISolution公司生产的单片MP3/WMA/MIDI解码和ADPCM编码芯片。

本次设计主要是使用微处理器进行系统的控制,同时利用相关的芯片和存储卡以前音频设备来进行播放器的设计,整个播放器不仅能够进行音频文件的播放还能输出相关的画面模式,并且音质效果是十分可观的。

在播放音乐的同时能够自由转换,根据个人需求喜好选择自己所感兴趣的曲目,能够进行上下首歌曲调节,音量的调节。

在PC机能够利用接口对存储卡进行读写,利用这种读写方式进行文件的拷贝和线上下载。

1.3课题设计内容

1、了解基于STM32单片机应用程序的设计和开发过程;

2、了解并熟练掌握相关C语言的代码编写;

3、LCD1602界面设计合理;

4、能够对mp3文件读取和播放;

5、具有播放、暂停、切歌的功能;

6、可以储存歌曲,利用内存卡为介质。

 

 

2系统的总体设计

2.1系统核心硬件的选择

在构造硬件电路之前必须明确设计的方案,尤其是模块与模块之间哪些互斥哪些互通要进一步规划好,进而选择合适的硬件设施。

2.1.1主控芯片的选择

方案一:

将STM32单片机当做控制器的芯片

STM32单片机是一类高性能的控制器,能够支持32位和实时控制仿真处理器,在很多领域被广泛运用,由于创新的系统设计和特殊的芯片结构使得该处理器在系统控制上发挥了最大功能,因此能够进行最大程度的合成,有利于设计者的开发和运用,该处理器在销售市场上迅速打开。

方案二:

采用MSP430单片机作为主控芯片

MSP430单片机就是我们所说的混合信号处理器,不仅能够形成多个数字电路和模拟电路,还能形成具备多样功能未处理器。

这类单片机能够在单个或者多个芯片上进行各种电路的组合,并且功能消耗低,各种程序指令相对比较简单容易理解。

经常在各种便携式的仪器中使用如玩具车等等,但是开发比较有难度,并且成本很高,一般不会被接受。

综合上述的描述,考虑到资源的合理利用和成本,还有开发的时间和难易程度,减少能源的消耗和操作的简单,选择方案一来进行系统的设计。

2.1.2显示模块的选择

方案一:

采用LED数码管动态扫描显示

LED数码管价格上有优势并且重量小,能够及时显示各种数字和字母。

如果要进行动态显示那么就需要很多接口才能满足,加上单片机接口的电流很小并不能给数码管提供稳定的电压,所以需要利用驱动器来进行连接,从而来加大电流,进而控制其显示功能。

如果数字或者字母多的话显示比较麻烦需要焊接很多电路。

方案二:

采用LCD1602液晶显示屏

LCD1602作为液晶显示器不仅能够各种字母还能显示各种数字,可以将16*2也就是32个字符全部显示出来,这些字符主要包括数字,字母,符号,自定义字符。

LCD1602主要用于小范围的显示场合,主要是5*7点阵组成的一个字符,其在数据传输主要是采用串行数据传输,因此看起来十分简单,控制方法基本上大同小异。

方案三:

采用LCD12864液晶显示屏

LCD12864是一种大屏幕的显示器,其显示的分辨率为128*64,一共具有8192个,由4位/8位串行和并行组成的液晶显示屏,其的主要接口比较简单,方便操作,可以在系统上显示各种画面,不管是文字还是图像都能一一显示出来,主要对8*4行16*16的点阵汉字进行显示,这样就能够对能源大大减少消耗,在显示功能上表现很全面,但是如果不全部用完就会造成空间的浪费,因此如果在设计不需要这么大的屏就不要用,不然造成成本上的浪费。

综合上述的描述,考虑到本设计显示内容比较大,最终选用LCD1602液晶显示屏来显示。

2.1.3数据存储芯片的选择

方案一:

通过使用单片机内部的Flash进行存储数据

STM32芯片内部带有Flash功能,STM32的Flash是通过ISP/IAP技术读写内部FLASH来实现Flash。

STM32的Flash起始地址为0x2000,以512字节为一个扇区,EERPOM的大小为2K字节。

方案二:

采用专门的数据存储芯片AT24C02

AT24C02是一个2K位串行CMOSFlash,这个芯片里面含有着很多字节,在功能消耗上很低,另外还有16位的字节缓冲器,能够进行字节的自我调整,并且能够针对字节进行保护。

存储数据的系统要进行除去才能进行更新,况且是自带的,因此十分方便。

最终决定采用Flash存储芯片。

2.1.4按键模块的选择

方案一:

利用单一按键进行系统输入

不同按键有着不同的功能,端口的检测是很重要的。

检测次数有按键数的多少来决定,一旦按键数目很大,那么就需要很多端口,那别的器件就没有地方连接,由于按键数据多线路多,反应速度也会逐渐变慢。

方案二:

利用矩阵键盘进行系统输入

矩阵键盘将键的两端分别连接到行线和列线上,然后将每行线和列线连接到单片机上,利用读取程序算法来明确需要按哪个键。

尽管编程有困难,但节省了I/O端口的使用。

综合上述的描述,最终还是决定采用独立键盘作为输入设备。

2.1.5MP3解码方案

方案一:

利用软件进行编程,不仅能够减少成本,还能降低硬件设施设计,但是在编写程序上面是很复杂的,需要花费很长的时间,不管是速度层面还是软件性能方面,都是有着很高的要求。

方案二:

利用硬件进行音频解码,这类硬件设施功能多种多样并且价格很低,播放效果好,音质可以跟酷狗蓝牙等相当,主要采用VS1003MP3解码芯片,能够支持多种模式的解码功能。

因此方案二是最好的选择方案。

2.1.6MP3储存介质方案

方案一:

利用内部存储器来进行读取各种代码,这种ROM存储器的读取速度尽管很快,但是存储的数据量并不大,可能连一首歌曲都不能完好的保存下来,这样存储器并不适用,不能满足消费者对歌曲量的需求。

方案二:

利用U盘来储存各类文件,使得存储的歌曲量提高了很多。

方案三:

利用SD卡进行数据的存放。

这类存储卡不仅在进行数据读取上面的速度够快,而且体型小,容量也是比较大的。

因此方案三是我们最好的选择,不管是性能还是操作上都是比较符合要求的。

2.2系统总体方案

由STM32F103C8T6单片机核心板、LCD1602液晶显示、MP3模块、LM386音频放大模块、按键组成了该系统。

1、通过按键可以操作MP3模块,启动/停止、音量+、音量-、上一首、下一首的按键操作。

2、MP3接收到按键操作命令,做出相应的动作,声音播放时通过LM386音频放大模块进行播放。

3、按键的任何操作,液晶有相应的操作显示。

本设计的系统总体框架图如图2.2所示。

 

音频放大电路

2.2系统总体框架图

3硬件介绍和设计

3.1单片机及最小系统

STM32单片机处理器是一种能够进行实时跟踪信息的控制系统,这个芯片控制系统主要是在满足设计者的需求下不断加大对各项功能的设计,尤其是对接口的设计,和各种电路的衔接,都进行了全面系统的研发,使得整个系统的运行比较方便快捷,并且在很多领域都被广泛的应用。

整个系统的电路也是比较简单的,并没有那么复杂的设计,融合很多细节点,才形成了单片机处理系统。

STM32F103C8T6单片机核心板接口电路图如图3.1.1所示。

图3.1.1STM32单片机核心板接口原理图

 

STM32单片机核心板内部电路图如下图3.1.2所示。

图3.1.2STM32单片机核心板内部原理图

STM32单片机实物图如下图3.1.3所示。

图3.1.3STM32单片机核心板实物图

一般来说STM32单片机复位电路电路图如下图3.1.4所示。

图3.1.4复位电路电路图

本设计中复位电路与单片机的NRST相连接,负责单片机的复位工作。

本设计中复位电路的供电电压为3.3V。

当给复位电路3.3V电压时,整个电容开始进行通电,整个时候电阻R1电压开始通过,在电压的驱动下,促使单片机连接。

当电容在电压的作用下达到电压最大值,通过的电流就变成0A,这个时候的电压也会变成0V,单片机开启工作模式。

当整个单片机开始进行工作的时候,将开关打下,使得电容将电释放出来,当电阻上有电压通过的时候,单片机就会复位。

这个时候再松开开关,整个电容又处于充电模式,进而单片机又开启工作模式。

晶振的主要功能就是信号的反馈,一般是和锁相环电路结合一起,给系统的时间显示提供频率信号。

一旦需要不同的信号显示,就可以利用同一个晶振和不同的锁进行电路的链接。

图3.1.5晶振电路电路图

3.2LCD1602液晶显示模块

字符型液晶显示模块主要是进行各种符号和数字等的显示,这类显示类型多种多样,常用16*1,16*2,20*2和40*2行等模块。

正常情况下该显示模块有14条引脚线甚至是16条,16条引脚的多余两条主要是接地线和背光线多出来的,其他引脚和14条的一致的,这类显示模块的实物图如下图3.2.1。

图3.2.1液晶显示器实物图

一般该显示模块主要分为两种类型一种背光一种不背光,正常情况下背光的设计比较厚,但是功能上没有什么差别,只是个人需求不同而已,这两类的差别主要如下图所示图3.2.2:

 

图3.2.2液晶显示模块图

 

LCD1602引脚说明表格3.2.1如下:

表3.2.1LCD1062引脚说明表

编号

符号

引脚说明

编号

符号

引脚说明

1

Vss

电源地

9

D2

数据口

2

VDD

电源正极

10

D3

数据口

3

VO

液晶显示对比度调节端

11

D4

数据口

4

RS

数据/命令选择端(H/L)

12

D5

数据口

5

R/W

读写选择端(H/L)

13

D6

数据口

6

E

使能信号

14

D7

数据口

7

D0

数据口

15

BLA

背光电源正极

8

D1

数据口

16

BLK

背光电源负极

液晶引脚与单片机连接:

第1脚:

VSS主要是连接地线;

第2脚:

VDD的电压是5V;

第3脚:

VO接3K的电位器来进行显示清晰度;

第4脚:

RS是进行数据寄存;

第5脚:

R/W即为信号反馈器;

第6脚:

一旦E端的电平出现从高到低的变化,那么该模块开始工作,如果是从低到高电平,那么该模块停止工作;

第7~14脚:

D0~D7为8位双向数据线接单片机P0口;

第15脚:

背光源正极接电源;

第16脚:

背光源负极接地。

图3.2.3液晶引脚与单片机连接

3.3按键电路设计

按键的类型是多种多样,有些按键需要重重按压才能执行指令,有些按键只要轻微触屏就能执行指令。

原来的按键设计主要是利用金属片来进行弹起和闭合,但是长期下来,金属片在多次按压的作用下容易损坏,这种也就是所谓的物理开关。

所谓的电子开关就是利用电平进行控制,在没有进行按压的情况下,引脚是处于高电平状态,一旦开关按压下去,就会变成低电平,此时就有实现系统的信息输入。

按键个数可变。

其电路原理图如下图3.3.1所示。

图3.3.1按键电路原理图

3.4MP3串口控语音模块

MP3模块不仅能够进行语音的读写,还能支持各种格式的转换,并且存储量大,能够利用数据线在电脑作用下下载各种音频文件,其中UART串口控制,ONE_line单总线串口控制。

1、模块参数

(1)支持MP3、WAV解码格式。

(2)支持采样率(KHz):

8/11.025/12/16/22.05/24/32/44.1/48。

(3)24位DAC输出。

(4)存储空间大,最大程度能承受32G的U盘。

(5)能够进行语音的播放,实时进行暂停,播放模式的选择,能存储选曲65535首曲目,波特率9600bit/s。

(6)支持IO触发功能,8个IO口单独触发8首曲目或8个IO口组合触发255首曲目。

(7)支持One_line单总线串口控制,可控制播放,暂停,选曲,音量加减等功能。

(8)支持3个配置IO进行模式选择。

2、接口说明

模块实物接口图如下图3.4.1所示。

图3.4.1模块实物接口图

模块实物接口说明如下表3.4.1所示

表3.4.1模块实物接口说明

引脚序号

引脚名称

引脚描述

1

IO0/UART_TX

IO触发模式下为输入引脚IO0;UART控制模式下为TX引脚

2

IO1/UART_RX

IO触发模式下喂输入引脚IO1;UART控制模式下为RX引脚

3

IO2

IO触发模式输入引脚IO2

4

IO3

IO触发模式输入引脚IO3

5

IO4/ONE_LINE

IO触发模式输入引脚IO4;One_Line一线串口控制模式数据发送引脚

6

IO5

IO触发模式输入引脚IO5

7

IO6

IO触发模式输入引脚IO6

8

IO7

IO触发模式输入引脚IO7

9

GND

10

CON1

模式配置引脚1

11

CON2

模式配置引脚2

12

CON3/BUSY

模式配置引脚3;Busy信号输出,播放音乐输出高电平,暂停音乐输出低电平。

13

USB_DM

USBDM信号

14

USB_DP

USBDP信号

15

VDD/5V

模块供电,3.3-5V电压输入引脚

16

3.3V

LDO3.3V输出引脚,最大输出电流100mA

17

DACL

音频左声道输出

18

DACR

音频右声道输出

3、模块接口原理图如下图3.4.2所示。

图3.4.2传感器接口电路原理图

3.5LM386功放模块

LM386功放模块是很重要的部分,主要是在各种收音机当中使用,由于其功能消耗低,并且使用的元件很少,播放音质效果好。

为了减少连接的配件,因此增加了电压增加幅度为20。

在第一个脚和第八个脚之间进行电阻和电容的连接,然后调整电压,不断加大到200左右,慢慢可以发现,当电压等于6V的时候,系统的功能消耗是24mW,利用电池供电就能满足该模块的运转。

1、LM386功放模块参数如下表所示

表3.5.1LM386功放模块参数

序号

名称

参数

1

芯片

LM386

2

板载可调电阻

10K

3

工作电压

5~12V

4

板子尺寸

41(mm)x13(mm)

(1)芯片:

LM386。

(2)10K的板载可调电阻,可调节和放大的音量

(3)工作电压:

5~12V

(4)板子尺寸:

41(mm)x13(mm)

2、接口说明如下表3.5.2所示

表3.5.2接口说明

序号

接口

说明

1

V

外接5-12V

2

G

外接GND

3

I

音频输入端

4

O

音频输出端

(1)V接口接5-12V

(2)G接口外接GND

(3)I接口接音频输入端

(4)O接口接音频输出端

3、模块接口原理图如下图3.5.1所示。

图3.5.1传感器接口电路原理图

4、LM386功放模块实物图如下图3.5.2所示。

图3.5.2LM386功放模块实物图

3.6VS1003解码电路设计

在设计VS1003解码电路时,数字地与模拟地必须相互连接并尽量靠近VS1003以避免锁存上拉,为了能播放48KHz采样率的音频文件,输入时钟使用12.288MHz。

具体设计电路如图3.6.1所示。

VS1003通过MISO﹑MOSI﹑SCK(SPI接口)来接收输入的MP3数据,经过VS1003内置的采样DAC转换为音频模拟量,最后通过Left﹑Right输出。

图3.6.1音频解码电路

3.7电源模块 

电源是电子设备中必不可少的一部分,它为设备提供了能量。

电源模块电路如图3.7.1所示。

本系统有以下几种电源:

CPU的内核数字和模拟电源电压+1.8V,CPU的I/O口数字和模拟电源电压+3.3V、总线的隔离电源、LCD的驱动电源、LCD的背光逆变电源、其他外围设备电源电压+5V等电源。

5V电源适配器经过AMS1117-3.3和AMS1117-2.5产生3.3V和2.5V的直流电源供系统使用。

图3.7.1电源电路

系统整体的电路工作原理图如下图3.7.2所示

图3.7.2系统整体电路工作原理图

4系统软件的设计

4.1系统程序工作分析

在整个系统中,单片机在系统中的主要作用就是起到控制系统的效果。

对于MP3模块的系统主要是对显示屏选择和按键的程序选择和开发。

整个程序开发利用的主要是C语言,进行数据信息的编程。

对于本次设计上,我们主要利用Keil单片机软件对整个系统进行编程,首先将模块按照不同信息分为几类进行编写,在编写完成之后存储在编译器并形成相关的文件。

然后针对编写的程序进行仿真调试,是否能够满足本次实验的需求。

一旦满足需求,在测试相关的液晶显示屏和按键,看看整个系统的运转是否正常可行,如果存在不足的地方,要及时更正修改。

要对每一个细节进行核查,发现有问题及时跟进反馈完善,确保程序的万无一失。

整个设计的主要程序是液晶显示和按键程序等,必须确保各种硬件系统的可行性才能进行系统的操作和识别。

图4.1.1KEIL

AltiumDesigner是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows操作系统。

这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合。

图4.1.2AltiumDesigner

4.2主流程图设计

Yes

图4.2.1程序设计流程图

本系统的程序设计流程图如图4.2.1所示,工作过程大致为:

STM32通过从SD卡中读取MP3文件,然后把数据的信息输送到解码器VSl003中,解码器在解码之后进行歌曲的播放。

TFT触摸屏主要是进行歌曲播放状态和各种歌词的显示,不仅能够进行功能按键,还能切换播放模式等。

4.3显示子流程图设计

利用LCD动态扫描来进行。

首先用单片机的P2.2口与使能端口E连接起来。

接着将单片机的P2.0口连接数据/命令选择端RS,P0口与数据端D0~D7相连接,再将显示数值传送到P0口。

然后开始调节延时功能,将P2.2口调成0,P2.0口调成1,输入指令,将P2.2口调成为1,P2.0口调成为1,开始写数据,直到所有我们需要用到的数字都出现在液晶上,显示流程图如图4.3.1所示。

图4.3.1显示流程图

4.4音乐播放功能的设计

音乐的播放需要有音乐信息,也就是所谓的音乐文件,这类文件需要到系统进行拷贝存放在存储卡上,SD卡利用读卡系统进行数据的读写,每次读取512个字节,并进行数据的转化。

当VS1003已经初始化完成并等待接收数据(DREQ引脚为高电平)时,将读到的数据以每次32字节的速度送入VS1003的RAM中,VS1003会自动去处理这些数据并得到模拟音频信号。

在每次读取新的音频文件时,采用文件名比较(只比较前3个字节)的方法查找存在SD卡中的歌词文件,如果存在歌词文件,就将文件数据全部复制到RAM中(超过6144个字节的部分将丢弃),同时初始化30ms中断的定时器用于歌词显示的刷新操作。

音乐播放功能实现的具体流程如图4.4.1所示。

图4.4.1音乐播放功能的实现流程

4.5详细代码结构

启动文件是任何处理器在上点复位之后最先运行的一段汇编程序。

在我们编写的c语言代码运行之前,需要由汇编为c语言的运行建立一个合适的环境,接下来才能运行我们的程序[9]。

液晶屏驱动程序

/**

*@brieflcd初始化

*@param无

*@return无

*/

voidLCD_Init(void)

{

LCD_GPIO_Config();//配置IO端口

LCD_FSMC_Config();//LCDFSMC模式的配置

LCD_Rst();//LCD软件复位

LCD_REG_Config();//配置LCD初始化寄存器

}

文件系统驱动程序

/**

*@brieffs文件系统初始化

*@param无

*@return无

*/

voidSd_fs_init(void)

{

/*SD卡中断初始化*/

SDIO_NVIC_Configuration();

/*SD卡硬件初始化,初始化盘符为0*/

f_mount(0,&myfs[0]);/./ff9文件库

}

 

/*

*@briefSDIO优先级配置为最高优先级

*@param无

*@return无

*/

voidSDIO_NVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;

/*ConfiguretheNVICPreemptionPriorityBits*/

NVIC_PriorityGroupConfig(NVIC_PriorityG

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1