微机原理.docx
《微机原理.docx》由会员分享,可在线阅读,更多相关《微机原理.docx(18页珍藏版)》请在冰豆网上搜索。
![微机原理.docx](https://file1.bdocx.com/fileroot1/2023-1/29/67261d1d-3b03-47c2-ad26-e502f536ed7c/67261d1d-3b03-47c2-ad26-e502f536ed7c1.gif)
微机原理
微机原理课程设计
题目:
基于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; //