《 嵌入式系统原理 》课程设计基于stm32的mp3播放器设计与实现.doc
《《 嵌入式系统原理 》课程设计基于stm32的mp3播放器设计与实现.doc》由会员分享,可在线阅读,更多相关《《 嵌入式系统原理 》课程设计基于stm32的mp3播放器设计与实现.doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 嵌入式系统原理 课程设计说明书题 目: 利用STM32实现MP3播放器 院 (系): 信息与电气工程学院 专业班级: 通信二班 学生姓名: 学 号: 0904040209 指导教师: 20 12 年 2 月 30 日至20 12 年 3 月 23 日 STM32芯片应用 实验设计任务书一、设计题目利用STM32处理器实现简易MP3 Player的设计二、设计主要内容(1) 广泛查找文献资料,认真研究,反复论证,精心设计技术方案。(2) 较为深入的掌握ARM处理器的体系结构、指令系统、编程方法,初步了解ARM应用系统的软硬件开发方法及手段,较熟练地掌握ARM处理器几种重要的片内外设(定时器、P
2、LL、I2C、RTC等)的基本原理及编程方法,初步掌握ARM处理器外围电路的扩展方法。(3) 了解STM32、SPI接口、SD卡、TIMER、中断、FAT文件系统、USB等的应用。(4) 考虑简易声波播放器、简易MP3播放器两种方案实现。三、原始资料硬件资源:STM32系统板、用于ARM处理器的JTAG仿真器、PC机Pentium100以上。设计指导书:STM32系统板配套光盘四、要求的设计成果(1)使用STM103V100评估板令计时器TIM4工作在PWM模式下,将wav格式的声波文件从SD卡中读出,由TIM4产生不同频率的方波通过低通滤波器和放大器送喇叭实现与通过额外解码芯片实现。(2)撰
3、写课程设计说明书,要求简洁、通顺,格式规范,设计方案正确,实现技术路线明确,论述内容完整、清楚、规范,数据、资料真实可靠,软件程序运行良好。(3)要求有完整的电路设计原理图及软件源代码。五、进程安排(1)第 1 天:任务布置及相关知识讲解(2)第2-3天:资料查阅与方案制定(3)第4-8天:硬件设计、程序编制与调试阶段(4)第 9 天:撰写设计报告六、主要参考资料1 田泽. 嵌入式系统开发与应用实验教程. 北京航空航天工业大学出版社,2005.2 郭荣佐,王霖. 嵌入式系统原理.北京航空航天大学出版社,.2008.3 周根林.嵌入式系统原理与应用.南京大学出版社, 2006.4 谭浩强. C语
4、言程序设计(第2版).清华大学出版社,20085 丁峰. ARM系统开发从实践到提高. 中国电力出版社,2007.指导教师(签名): 20 年 月 日第一种方案是简易声波播放器,仅使用STM103V100评估板,令计时器TIM4工作在PWM模式下,将wav格式的声波文件从SD卡中读出,由TIM4产生不同频率的方波通过低通滤波器和放大器送喇叭,如图1所示;第二种方案则是简易MP3播放器,还需要使用额外的解码芯片,将MP3格式的文件从SD卡读出,然后送解码芯片解码播放,如图2所示。本节将先介绍SD卡、FAT16文件格式、VS1003编解码器等关键部分,然后再分别给出两种设计方案的软件设计。图1 简
5、易声波播放器方案图2 简易MP3 Player方案1 SD卡的结构及读写方法STM103V100评估板有SD连接器,其使用SPI总线与STM32处理器连接,如图3所示。图3 SD连接器与STM32处理器SPI连接图SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。本小节仅简要介绍在SPI模式下,STM32处理器如何读写SD卡,如果读者如希望详细了解SD卡,可以参考相关资料。SD卡内部结构及引脚如图4所示。图4 SD卡内部结构及引脚
6、SD卡主要引脚和功能为:n CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在025MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生025MHz的频率;n CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;n DAT03:数据线,数据可以从卡传向主机也可以从主机传向卡。 SD卡以命令形式来控制SD卡的读写等操作。可根据命令对多块或单块进行读写操作。在SPI模式下其命令由6个字节构成,其中高位在前。SD卡命令的格式如表1所示,其中相关参数可以查阅SD卡规范。-表1 SPI
7、命令格式Byte 1/ Byte2-5/Byte 67,6,5,0/31,0/7,00,1/Command/Command Argument/CRC,1-下面分别给出读写SD卡的两个函数:n 读取SD卡函数u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);/* Function Name : MSD_ReadBlock* Description : Reads a block of data from the MSD.* Input : - pBuffer : pointer to the buffer that re
8、ceives the data read* from the MSD.* - ReadAddr : MSDs internal address to read from.* - NumByteToRead : number of bytes to read from the MSD.* Output : None* Return : The MSD Response: - MSD_RESPONSE_FAILURE: Sequence failed* - MSD_RESPONSE_NO_ERROR: Sequence succeed */u8 MSD_ReadBlock(u8* pBuffer,
9、 u32 ReadAddr, u16 NumByteToRead) u32 i = 0; u8 rvalue = MSD_RESPONSE_FAILURE; /* MSD chip select low */ MSD_CS_LOW(); /* Send CMD17 (MSD_READ_SINGLE_BLOCK) to read one block */ MSD_SendCmd(MSD_READ_SINGLE_BLOCK, ReadAddr, 0xFF); /* Check if the MSD acknowledged the read block command:R1 response (0
10、x00: no errors) */ if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR) /* Now look for the data token to signify the start of the data */ if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ) /* Read the MSD block data : read NumByteToRead data */ for (i = 0; i NumByteToRead; i+) /* Save the received data
11、*/ *pBuffer = MSD_ReadByte(); /* Point to the next location where the byte read will be saved */ pBuffer+; /* Get CRC bytes (not really needed by us, but required by MSD) */ MSD_ReadByte(); MSD_ReadByte(); /* Set response value to success */ rvalue = MSD_RESPONSE_NO_ERROR; /* MSD chip select high */
12、 MSD_CS_HIGH(); /* Send dummy byte: 8 Clock pulses of delay */ MSD_WriteByte(DUMMY); /* Returns the reponse */ return rvalue;n 写读取SD卡函数u8 MSD_WriteBlock(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite) /* Function Name : MSD_WriteBlock* Description : Writes a block on the MSD* Input : - pBuffer : poi
13、nter to the buffer containing the data to be* written on the MSD.* - WriteAddr : address to write on.* - NumByteToWrite: number of data to write* Output : None* Return : The MSD Response: - MSD_RESPONSE_FAILURE: Sequence failed* - MSD_RESPONSE_NO_ERROR: Sequence succeed */u8 MSD_WriteBlock(u8* pBuff
14、er, u32 WriteAddr, u16 NumByteToWrite) u32 i = 0; u8 rvalue = MSD_RESPONSE_FAILURE; /* MSD chip select low */ MSD_CS_LOW(); /* Send CMD24 (MSD_WRITE_BLOCK) to write multiple block */ MSD_SendCmd(MSD_WRITE_BLOCK, WriteAddr, 0xFF); /* Check if the MSD acknowledged the write block command: R1 response
15、(0x00: no errors) */ if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR) /* Send a dummy byte */ MSD_WriteByte(DUMMY); /* Send the data token to signify the start of the data */ MSD_WriteByte(0xFE); /* Write the block data to MSD : write count data by block */ for (i = 0; i NumByteToWrite; i+) /* Send the p
16、ointed byte */ MSD_WriteByte(*pBuffer); /* Point to the next location where the byte read will be saved */ pBuffer+; /* Put CRC bytes (not really needed by us, but required by MSD) */ MSD_ReadByte(); MSD_ReadByte(); /* Read data response */ if (MSD_GetDataResponse() = MSD_DATA_OK) rvalue = MSD_RESPO
17、NSE_NO_ERROR; /* MSD chip select high */ MSD_CS_HIGH(); /* Send dummy byte: 8 Clock pulses of delay */ MSD_WriteByte(DUMMY); /* Returns the reponse */ return rvalue; 2 FAT16文件系统简介 SD卡如果采用FAT16文件格式,按照其不同的特点和作用大致可分为5 部分:MBR区、DBR区、FAT区、FDT区和DATA区。由于SD卡一般不做引导盘,一般也不分区,因此通常无MBR区,直接从DBR区开始。下面对后面四个区分别作简介:n
18、DBR区 内容为系统引导记录,它包括一个引导程序和一个被称为BPB(Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区根目录是否有操作系统引导文件,如果有则将其读入内存,并把控制权交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、根目录大小、FAT个数,分配单元大小等重要参数。本系统采用的DBR结构为:typedef _packed struct/* 由于Cortex-M3内核默认以对齐方式访问,因此可能导致结构体元素之间有“空隙”,读出的结构体元素有误,因此需要加上关键字_packed,强制其以压缩
19、方式存储结构体。这样该结构体在内存空间上是一片连续的空间,不存在“空隙”情况。其它地方同理 */ u8 BS_jmpBoot3; /ofs:0.典型的如:0xEB,0x3E,0x90 u8 BS_OEMName8; /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_RootEn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统原理 嵌入式系统原理 课程设计基于stm32的mp3播放器设计与实现 嵌入式 系统 原理 课程设计 基于 stm32 mp3 播放 设计 实现
限制150内