微机原理.docx

上传人:b****5 文档编号:8235200 上传时间:2023-01-30 格式:DOCX 页数:18 大小:406.73KB
下载 相关 举报
微机原理.docx_第1页
第1页 / 共18页
微机原理.docx_第2页
第2页 / 共18页
微机原理.docx_第3页
第3页 / 共18页
微机原理.docx_第4页
第4页 / 共18页
微机原理.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

微机原理.docx

《微机原理.docx》由会员分享,可在线阅读,更多相关《微机原理.docx(18页珍藏版)》请在冰豆网上搜索。

微机原理.docx

微机原理

微机原理课程设计

 

题目:

基于STM32的MP3

播放器设计

学院:

电气工程学院

指导老师:

朱卫华

班级:

电子卓越3班

姓名:

史延林

学号:

20094470321

摘要

Cortex-M3是ARM公司为要求高性能(1.25DhrystoneMIPS/MHz)、低成本、低功耗的嵌入式应用专门设计的内核。

STM32系列产品得益于Cortex-M3在架构上进行的多项改进,包括提升性能的同时又提高了代码密度的Thumb-2指令集和大幅度提高中断响应的紧耦合嵌套向量中断控制器,所有新功能都同时具有业界最优的功耗水平。

本系统是基于Cortex-M3内核的STM32微控制器的mp3播放器,在硬件方面主要有VS1053硬件音频解码器和12864点阵液晶屏,在软件方面主要有VS1053的驱动,SD卡工作在SPI模式下的读写驱动,FAT文件系统的移植,12864液晶的驱动,嵌入式操作系统ucOSii的移植以及嵌入式图形管理器ucGUI的移植。

整个设计过程包括电子系统的设计技术及调试技术,包括需求分析,原理图的绘制,pcb板

的绘制,制版,器件采购,安装,焊接,硬件调试,软件模块编写,软件模块测试,系统整体测试等整个开发调试过程。

关键词:

STM32,VS1053,FAT文件系统,12864液晶,ucOSii,ucGUI

Abstract

Cortex-M3areARMcompaniesthatrequirehighperformance(1.25DhrystoneMIPS/MHz),low-cost,low-powerembeddedapplicationsspeciallydesignedcore.STM32familybenefitsfromtheCortex-M3architectureatonanumberofimprovements,includingupgradingtheperformanceandatthesametimeimprovethecodedensityoftheThumb-2instructionsetandinterruptresponsesignificantlyimprovethetightlycouplednestedvectorinterruptcontroller,Allnewfeaturesareatthesametimetheoptimalpowerconsumptionleveloftheindustry.ThesystemisbasedontheCortex-M3coreSTM32microcontrollermp3player,mainlyinhardwarehaveVS1053hardwareaudiodecoderand12864dotmatrixLCDscreen,mainlyinthesoftwaredriverVS1053has,SDcardworkintheSPImodetoreadandwritedrive,FATfilesystemofthetransplant,12864LCDdrivers,embeddedoperatingsystemandembeddeducOSiitransplantgraphicsmanagerucGUItransplant.Theentiredesignprocessincludingthedesignofelectronicsystemstechnologyanddebuggingtechniques,includingneedsanalysis,mappingprinciple,pcbdrawingboard,platemaking,deviceprocurement,installation,welding,hardwaredebugging,preparationofsoftwaremodules,softwaremoduletesting,overallsystemtestingthroughoutthedevelopmentprocess.

KEYWORDS

STM32,VS1053,fatfilesystem,12864dotmatrixLCDscreen,ucOSii,ucGUI

1.系统描述

1.1综述

本系统是基于STM32微控制器所设计的MP3播放器,音频文件储存在SD卡上,由微控制器

读取数据并送到VS1053音频解码模块解码并输出,同时微控制器驱动液晶模块显示当前播放信息,提供同步歌词显示。

整个系统模块分为四个模块:

MCU主芯片最小板、CPU外围电路mainborad、VS1053音频解码、液晶显示。

MCU是STM32主芯片的最小板,上面有芯片工作需要的最少资源:

时钟控制电路、复位电路、JTAG控制口以及与外围电路相连的接口。

Mainboard上集成了稳压电源、滤波电路、SD卡、与液晶及音频解码芯片的连接电路。

VS1003和液晶分别是单独的音频解码、控制显示部分。

1.2系统框图

 

1.3功能实现

􀁺SD卡读写

􀁺FAT文件系统

􀁺LCD人机界面

􀁺MP3文件播放

􀁺歌词同步显示

2.2STM32微控制器

2.2.1芯片介绍

STM32F103xx增强型系列使用高性能的ARMCortex-M332位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。

所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:

多达2个I2C和SPI、3个USART、一个USB和一个CAN。

2.2.2管脚图

2.3VS1053音频解码器

2.3.1VS1053芯片介绍

VS1053是目前VLSI公司VS10xx系列最强悍的芯片了,除了能播放各种音乐格式,还支持OGG实时编码录音。

2.3.2VS1053特性:

􀁺OggVorbis解码;

MPEG1&2音频阶层III(CBR+VBR+ABR);阶层I和II可选;MPEG4/2AAC‐LC(+PNS),HE‐AACV2(级别3)(SBR+PS);

WMA4.0/4.1/7/8/9所有特性(profiles)(5‐84kbps);WAV(PCM+IMAADPCM);通用MIDI1/SP‐MIDI格式0的文件;

􀁺2、用软件插件进行OggVorbis编码

2.3.3结构框图

图2.3.3VS1053结构框图

2.3.4电路原理图

图2.3.4VS1053电路原理图

2.4SD卡模块

2.4.1SD卡介绍

SD卡(SecureDigitalMemoryCard)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。

SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。

大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。

2.4.2电路原理图

图2.4.2SD卡接口电路

SD卡主要引脚和功能为:

⏹        CLK:

时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz的频率;

⏹        CMD:

双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;

⏹        DAT0~3:

数据线,数据可以从卡传向主机也可以从主机传向卡。

SD卡以命令形式来控制SD卡的读写等操作。

可根据命令对多块或单块进行读写操作。

在SPI模式下其命令由6个字节构成,其中高位在前。

下面分别给出读写SD卡的两个函数:

读取SD卡函数u8MSD_ReadBlock(u8*pBuffer,u32ReadAddr,u16NumByteToRead);

/*****************************************************************

*FunctionName:

MSD_ReadBlock

*Description:

ReadsablockofdatafromtheMSD.

*Input:

-pBuffer:

pointertothebufferthatreceivesthedataread

*fromtheMSD.

*-ReadAddr:

MSD'sinternaladdresstoreadfrom.

*-NumByteToRead:

numberofbytestoreadfromtheMSD.

*Output:

None

*Return:

TheMSDResponse:

-MSD_RESPONSE_FAILURE:

Sequencefailed

*-MSD_RESPONSE_NO_ERROR:

Sequencesucceed

*****************************************************************/

u8MSD_ReadBlock(u8*pBuffer,u32ReadAddr,u16NumByteToRead)

{

u32i=0;

u8rvalue=MSD_RESPONSE_FAILURE;

/*MSDchipselectlow*/

MSD_CS_LOW();

/*SendCMD17(MSD_READ_SINGLE_BLOCK)toreadoneblock*/

MSD_SendCmd(MSD_READ_SINGLE_BLOCK,ReadAddr,0xFF);

/*CheckiftheMSDacknowledgedthereadblockcommand:

R1response(0x00:

noerrors)*/

if(!

MSD_GetResponse(MSD_RESPONSE_NO_ERROR))

{

/*Nowlookforthedatatokentosignifythestartofthedata*/

if(!

MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))

{

/*ReadtheMSDblockdata:

readNumByteToReaddata*/

for(i=0;i

{

/*Savethereceiveddata*/

*pBuffer=MSD_ReadByte();

/*Pointtothenextlocationwherethebytereadwillbesaved*/

pBuffer++;

}

/*GetCRCbytes(notreallyneededbyus,butrequiredbyMSD)*/

MSD_ReadByte();

MSD_ReadByte();

/*Setresponsevaluetosuccess*/

rvalue=MSD_RESPONSE_NO_ERROR;

}

}

/*MSDchipselecthigh*/

MSD_CS_HIGH();

/*Senddummybyte:

8Clockpulsesofdelay*/

MSD_WriteByte(DUMMY);

/*Returnsthereponse*/

returnrvalue;

}

写读取SD卡函数u8MSD_WriteBlock(u8*pBuffer,u32WriteAddr,u16NumByteToWrite)

/*****************************************************************

*FunctionName:

MSD_WriteBlock

*Description:

WritesablockontheMSD

*Input:

-pBuffer:

pointertothebuffercontainingthedatatobe

*writtenontheMSD.

*-WriteAddr:

addresstowriteon.

*-NumByteToWrite:

numberofdatatowrite

*Output:

None

*Return:

TheMSDResponse:

-MSD_RESPONSE_FAILURE:

Sequencefailed

*-MSD_RESPONSE_NO_ERROR:

Sequencesucceed

*****************************************************************/

u8MSD_WriteBlock(u8*pBuffer,u32WriteAddr,u16NumByteToWrite)

{

u32i=0;

u8rvalue=MSD_RESPONSE_FAILURE;

/*MSDchipselectlow*/

MSD_CS_LOW();

/*SendCMD24(MSD_WRITE_BLOCK)towritemultipleblock*/

MSD_SendCmd(MSD_WRITE_BLOCK,WriteAddr,0xFF);

/*CheckiftheMSDacknowledgedthewriteblockcommand:

R1response(0x00:

noerrors)*/

if(!

MSD_GetResponse(MSD_RESPONSE_NO_ERROR))

{

/*Sendadummybyte*/

MSD_WriteByte(DUMMY);

/*Sendthedatatokentosignifythestartofthedata*/

MSD_WriteByte(0xFE);

/*WritetheblockdatatoMSD:

writecountdatabyblock*/

for(i=0;i

{

/*Sendthepointedbyte*/

MSD_WriteByte(*pBuffer);

/*Pointtothenextlocationwherethebytereadwillbesaved*/

pBuffer++;

}

/*PutCRCbytes(notreallyneededbyus,butrequiredbyMSD)*/

MSD_ReadByte();

MSD_ReadByte();

/*Readdataresponse*/

if(MSD_GetDataResponse()==MSD_DATA_OK)

{

rvalue=MSD_RESPONSE_NO_ERROR;

}

}

/*MSDchipselecthigh*/

MSD_CS_HIGH();

/*Senddummybyte:

8Clockpulsesofdelay*/

MSD_WriteByte(DUMMY);

/*Returnsthereponse*/

returnrvalue;

}

2.5液晶12864模块

2.5.1液晶12864介绍

12864系列是一种图形点阵型液晶显示模块。

它主要由行驱动器与列驱动器组成,可显示128(列)*64(行)点阵。

可完成图形显示,也可显示8*4个(16*16点阵)汉字。

七条控制指令,与CPU接口采用8位数据总线并口输入输出方式。

作温度:

-20~70°C,储存温度:

-30~80°C。

工作电压为+5.0V。

2.5.2结构框图

图2.5.2液晶结构框图

2FAT16文件系统简介

    SD卡如果采用FAT16文件格式,按照其不同的特点和作用大致可分为5部分:

MBR区、DBR区、FAT区、FDT区和DATA区。

由于SD卡一般不做引导盘,一般也不分区,因此通常无MBR区,直接从DBR区开始。

下面对后面四个区分别作简介:

⏹        DBR区

   内容为系统引导记录,它包括一个引导程序和一个被称为BPB(BiosParameterBlock)的本分区参数记录表。

引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区根目录是否有操作系统引导文件,如果有则将其读入内存,并把控制权交给该文件。

BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、根目录大小、FAT个数,分配单元大小等重要参数。

本系统采用的DBR结构为:

typedef__packedstruct

{/*由于Cortex-M3内核默认以对齐方式访问,因此可能导致结构体元素之间有“空隙”,读出的结构体元素有误,因此需要加上关键字__packed,强制其以压缩方式存储结构体。

这样该结构体在内存空间上是一片连续的空间,不存在“空隙”情况。

其它地方同理*/

    u8        BS_jmpBoot[3];   //ofs:

0.典型的如:

0xEB,0x3E,0x90

    u8        BS_OEMName[8]; //ofs:

3.典型的如:

“MSWIN4.1”

    u16       BPB_BytesPerSec; //ofs:

11.每扇区字节数

    u8        BPB_SecPerClus;        //ofs:

13.每簇扇区数

    u16       BPB_RsvdSecCnt;       //ofs:

14.保留扇区数,从DBR到FAT的扇区数

    u8        BPB_NumFATs;    //ofs:

16.FAT的个数,通常为2

    u16       BPB_RootEntCnt;       //ofs:

17.根目录项数

    u16       BPB_TotSec16;          //ofs:

19.分区总扇区数(<32M时用)

    u8        BPB_Media;       //ofs:

21.分区介质标识,SD卡一般用0xF8

    u16       BPB_FATSz16;           //ofs:

22.每个FAT占的扇区数

    u16       BPB_SecPerTrk;         //ofs:

24.每道扇区数,对于SD卡无意义

    u16       BPB_NumHeads;  //ofs:

26.磁头数,对于SD卡无意义

    u32       BPB_HiddSec;     //ofs:

28.隐藏扇区数,从MBR到DBR的扇区数

    u32       BPB_TotSec32;    //ofs:

32.分区总扇区数(≥32M时用)

    u8        BS_DrvNum;       //ofs:

36.软盘:

0x00,硬盘:

0x80,SD卡无意义

    u8        BS_Reservedl;     //ofs:

37.保留

    u8        BS_BootSig;       //ofs:

38.扩展引导标记:

0x29,通常对于SD卡无意义

    u32       BS_VolID;         //ofs:

39.盘序列号

    u8        BS_VolLab[11];   //ofs:

43.如“Msdos”

    u8        BS_FilSysType[8]; //ofs:

54.“FAT16”

    u8        ExecutableCode[448];       //ofs:

62.引导代码

    u8        ExecutableMarker[2];  //ofs:

510.结束标识:

0xAA55

}FAT_BPB;

⏹        FAT区

   该区内容为文件分配表,FAT16文件系统进行空间分配的最基本单位是簇。

文件分配表反映了SD卡所有簇的使用情况,通过查文件分配表可以得知任一簇的使用情况。

对于FAT16来说,FAT表每项占用两个字节。

FAT表的第一项通常为FFF8H。

对于其它项,若其值为0000H表示可用;FFF7H表示为坏簇;FFF8H-FFFFH之间表示该簇为某文件或目录的最后一个簇,FFF0H-FFF6H之间为保留值;其它值则指示下一个簇的簇号。

⏹        FDT区

  该区的内容为文件目录表,FAT文件系统的一个重要思想是把目录(文件夹)当作一个特殊的文件来处理,FAT32甚至将根目录当作文件处理。

FAT分区中所有目录文件,实际上可以看作是一个存放其它文件(文件夹)入口参数的数据表。

因此,目录占用空间的大小并不等同于其下所有数据的大小,但也不等于0,通常是占很小的空间。

其具体的存储原理是:

不管目录文件所占空间为多少簇,一簇为多少扇区、多少字节;系统都会以32个字节为单位,进行目录文件所占簇的分配。

本系统目录项使用的结构体如下:

typedef__packedstruct

{

u8         FileName[8];          //ofs:

0.文件名

u8          ExtName[3];          //ofs:

8.扩展名

u8           Attribute;               //

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

当前位置:首页 > 表格模板 > 合同协议

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

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