




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一 设计名称3二 设计要求3三 设计目的3四 设计环境4五 设计思路41. 总体设计方案45.1.1控制模块45.1.2电源模块45.1.3音频解码模块55.1.4显示模块55.1.5总结62.硬件电路设计65.2.1SD卡模块75.2.2音频解码模块85.2.3液晶显示模块83. 软件程序设计95.3.1MP3播放流程设计9六调试过程106.1设计调试部分106.1.1USB转串口106.1.2使用Flash loader进行串口连接106.1.3 SD卡设置116.2问题分析116.2.1软件部分问题分析116.2.2硬件部分问题分析12七 心得体会12八 参考文献131 设计名称基于STM32的嵌入式MP3设计2 设计要求实现简单的MP3音乐播放功能,单曲循环播放,下一首,音量调节,添加歌曲等简单功能。3 设计目的 1.了解所选择的ARM芯片各个引脚的功能,工作方式,计时/定数,I/O口,中断等的相关原理,并巩固学习嵌入式的相关内容知识。 2.了解STM32、SPI接口、SD卡、TIMER、中断、FAT文件系统、USB等的应用。 3.通过MP3播放器设计掌握嵌入式开发的基本方法和步骤。 4.注重培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练。4 设计环境硬件:PC机、 ARM Cortex系列为控制器开发套件 USB串口线软件:windows 98/XP/2000系统、 Flash loader 5 设计思路1. 总体设计方案 本次设计采用STM32系列微控制器,结合解码芯片VSl003、SD卡、LCD等外围设备设计并实现了MP3播放器。其主要功能有:播放VSl003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。5.1.1控制模块 此方案采用STM32 ARM板实现,它使用高性能的ARM Cortex-M3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强型I/O端口以及包含2个12位的ADC、3个通用16位定时器和一个PWM定时器。使得处理速度大大提高,机器功耗大大降低,整体性能得到很大提高。32位的处理器使得控制更加稳定、迅速,窗口型看门狗,使得程序运行更加高效。另外,比较方便的是该板支持硬件仿真,通过Ulink仿真器可以方便实现在线逐步调试,这大大方便了系统的开发与调试工作。5.1.2电源模块电源设计是一个系统设计中的关键部分,对于整个系统,一个稳定的、具有一定功率的电源和合理的电源管理是必不可少的。本系统有以下几种电源:CPU的内核数字和模拟电源电压+1.8 V,CPU的IO口数字和模拟电源电压+3.3 V、总线的隔离电源、LCD的驱动电源、其他外围设备电源电压+5 V等电源。出于调试的方便和即插即用性,以及本系统的侧重点在MP3播放器上,所以我采用USB为系统供电,如此一来使系统的实现变得更加简便、迅速。5.1.3音频解码模块VS1003可以作为一个微控制器的从机,通过串行SPI接口来接收输入的比特流,输入的比特流被解码后,可以通过一个数字音量控制器到达一个18 位过采样多位DAC。通过串行总线控制解码器。这样利用一个VS1003芯片与STM32F103x处理器配合,STM32处理器读取SD卡中的MP3文件,将其通过SPI接口送往VS1003芯片播放,然后再利用STM32F10X处理器的一些GPIO口来控制VS1003即可以实现一个MP3 Player的原形设计。5.1.4显示模块1)常见的基于单片机设计的音乐播放器基本不能显示歌曲。该音乐播放系统设计上增加液晶显示器,LCD显示模块主要完成数据显示、输出数据与显示数据的同步等功能,可为使用者提供曲目信息。由于LED数码管只能显示数字而无法显示其他中英文字符,并对成本及功能考虑,因此从设计的成本及功能的角度考虑,采用LCD1602显示模块,它可以显示每目的英文名字。LCD1602驱动电路简单,可以由CPU输出命令驱动。2)又由于STM32V100开发板中没有液晶控制器的功能模块,如果所选择的液晶屏内部也没有液晶控制器,那么,要使CPU可以对液晶进行控制,就必须加设计一个液晶驱动控制电路。另外,由于液晶用来显示调节播放音量的ADC转换值和歌曲的顺序,所以字符型的LCD1602基本上能够满足显示要求。又由于系统设计时间的限制,因此本系统中选择自带控制器的液晶屏LCD1602液晶显示。其连接电路图如图5.1所示。 图5.1 LCD液晶管脚连接图5.1.5总结通过上述论证,本系统采用STM32作为微控制器,VS1003作为解码芯片,采用SD卡存储MP3/WMA文件,LCD作为显示器件,最终完成MP3的播放设计。同时PC机可以通过USB接口操作开发板上SD卡中的文件,也可以通过串口通信控制音乐播放。具体方案图如图4.2所示 图4.2 总体设计方案框图2.硬件电路设计本系统在硬件上分为4个模块:微控制器STM32F103、存储模块SD卡、解码模块VSl003、和显示屏LCD。MP3播放功能模块的工作分为两个部分:第一部分是循环播放MP3歌曲,该功能需要首先做一些初始化工作,MP3解码器一旦开始工作,就会一直向CPU请求数据,直至歌曲结束,只有通过键盘操作才会使该功能提前结束。因为MP3文件的数据量较大,在flash存储器内是以页为单位进行存储的,所以MP3的播放程序初始化就是要把该文件的首地址和页数先读出到CPU中,然后CPU可以根据如上数据进行取数据工作。第二部分则一直在等待中断发生,该程序是与键盘结合起来的,主要用于使用者对播放过程的控制。键盘操作对MP3播放过程的控制还包括后退、跃进、跳到下一首、音量控制等。因为整个播放过程的键盘控制功能比较单一,没有键的复合操作,所以程序都很容易实现。当MP3播放器插入到USB接口时,系统执行USB通讯功能模块,该模块主要用于对flash存储器内的文件数据进行管理。STM32F103x使用SPI2端口与VS1003芯片的SI、SO、SCLK连接;VS1003芯片的控制引脚xCS、xRESET、xDCS分别与STM32F103的PA1、PA0和PA2连接,低电平有效;VS1003的状态引脚DREQ与STM32F103处理器的PA3连接,低电平表示需要送数据,高电平表示正在处理数据。 模块化电路设计5.2.1 SD卡模块该系统使用STM32内部接口SPIl与SD卡进行通信,下面介绍其引脚连接情况。 PE3:低电平有效,连接到SD卡的片选引脚CDDAT3。SPI在和SD卡进行通信时,需要将PE3拉低才能对SD卡进行操作。 PA7:映射为STM32内部接口SPIl的主输出从输入(MOSI)信号线。这里STM32是主设备,SD卡是从设备。数据流的传输方向是从STM32传输给SD卡。该信号线用于传输一些控制命令来完成SD卡的操作,如读、写等。 PA5:已连接到STM32内部接口SPIl的时钟(SCLK)信号线。可设置SPI的时钟频率来调整读取SD卡数据的快慢。 PA6:已连接到STM32内部接口SPIl的主输入从输出(MISO)信号线。数据的传输方向是从SD卡传输给STM32,主要返回SD卡的一些状态、内部寄存器值等。 PCI2:用于检测SD卡是否完全插入。当SD卡完全插入时,PCl2为低电平,否则为高电平。由于本系统采用STM103V100-II开发板,所以就以其自带的SD卡的结构及读写方法进行介绍,STM103V100-II评估板有SD连接器,其使用SPI总线与STM32处理器连接,如图5.3所示 图5.3 SD连接器与STM32处理器SPI连接图5.2.2音频解码模块该系统使用STM32内部接口SPl2与VSl003进行通信,下面具体介绍其引脚连接以及使用情况。 PA3:VSl003的中断请求引脚。当VSl003内部数据已处理完毕,需要新的数据时,将DREQ拉高。STM32根据这个信号来给VSl003发送新的数据流。 PBl3:已连接到STM32内部接口SPI2的时钟(SCLK)信号线。 PBl4:已连接到STM32内部接口SPI2的主输入从输出(MISO)信号线。这里STM32是主设备,VSl003是从设备。数据流的传输方向是从VSl003传输给STM32。主要用于读取VSl003的一些状态和内部寄存器值,比如寄存器测试返回的内部寄存器的值。 PBl5:已连接到STM32内部接口SPl2的主输出从输入(MOSI)信号线。这里STM32是主设备,VSl003是从设备。数据流方向是从STM32传输给VSl003,主要传输给VSl003一些控制命令、MP3WMA数据流等。PAl:低电平有效,如果拉低该引脚,那么通过SPI传输的是控制信号。控制信号包括读写VSl003的内部寄存器、对VSl003进行初始化、设置左右声道音量等。PA2:低电平有效,如果拉低该引脚,那么通过SPI传输的是数据信号。比如在向VSl003传输MP3WMA的数据流时需要拉低该引脚。PA0:低电平有效,拉低该引脚则硬件复位VSl003。5.2.3液晶显示模块LCD液晶显示模块主要完成数据显示、输出数据与显示数据的同步等功能,可为使用者提供曲目信息。由3.3.4 显示模块方案可知,前期为了简化电路的设计,以及充分利用开发板资源,此次系统显示模块设计采用STM32V100开发板有自带的LCD液晶屏,如果时间允许,我将对支持汉字液晶屏进行研究以用于显示歌词,音量等。LCD液晶屏硬件电路如图5.4所示 图5.4 LCD硬件电路图3. 软件程序设计本系统的工作过程大致为:STM32通过SPIl从SD卡中读取MP3WMA文件,将所读取的数据流通过SPl2发送到VSl003解码中播放;PC机可通过USB总线读写SD卡的内容,传送MP3WMA等文件;LCD显示屏用于显示MP3的文件名、播放状态。有硬件系统可得软件的系统流程图: 软件系统流程图5.3.1MP3播放流程设计通过SPI1从SD卡中读取声波文件,将所读取的部分存放在一个缓冲器中,利用TIMER2通道1定期产生的中断,从缓冲器中读取声音数据,然后根据声音数据通过TIMER4的通道3产生不同频率方波输出。这里使用了两个缓冲器,一个用于存放从SD卡读到的声音数据,另一个用于将声音数据输出到PWM,两个缓冲区的功能不断交替,形成一个由2个缓冲区构成的环形缓冲。具体流程如图 所示 六调试过程6.1设计调试部分6.1.1USB转串口如果使用的电脑是笔记本电脑或者没有串口的电脑,则需要安装USB串口驱动程序和转换线。(1)安装USB 驱动程序CH341SER.EXE(2)将USB串口线连接到笔记本电脑的USB接口,右击“我的电脑”,在“属性”“高级系统设置”“硬件”“设备管理器”中找到新生成的USB-SERIAL CH340端口,端口编号为COM3注意:要记住是COM几,每台电脑每个USB口会有不同的值 6.1.2使用Flash loader进行串口连接 (1)用串口线一头插在STM32开发板的串口座上,一头插在电脑串口上(若使用笔记本,请自备USB转串口线)。 (2)设置BOOT:使得BOOT0=1,且BOOT1=0。 (3)给目标板上电。 (4)打开ISP下载软件如下,在开始菜单程序STMicroelectronicsFlashLoaderdemostratorFlashLoaderDemo,点击打开该软件。(5)点击UART,然后选择串口COM1,波特率为115200(9600115200间的波特率都OK)。一定要注意,第3步,校验方式选择为None然后点击“Next”。如果连接正常,电源上电,则会进入上面这个界面,提示Flash是512KB大小。(6)界面提示目标板上的flash的详细信息。再点击下一步Next。(7)选择Downloadtodevice,然后第2步选择需要下载的HEX文件,这里选择了GPIO-LED-V1.0例程中的HEX文件。点击下一步,即可开始下载。(8)目标板关掉电源,重新设置BOOT:BOOT0=0 BOOT1=0,重新上电,则就会看到LED灯在闪烁。 6.1.3 SD卡设置 (1)在SD卡根目录下创建文件夹SYSTEM,拷贝至该目录,在SD卡根目录下创建文件夹Music,拷贝MP3文件至该目录 (2)将SD Card插入SD卡座。 (3)请将配套LCD模块插上板子CN6。 (4)HEX文件下载到板子后,LED灯闪烁,LCD模块显示MP3播放界面。 6.2问题分析 6.2.1软件部分问题分析 问题:白屏设计刚开始,我们小组就出现了程序烧入开发板后出现严重白屏的问题。对于这一问题,我们小组展开多方猜测,细心调试,最终得以克服。猜想一:程序没有烧入开发板烧入不带LCD显示屏的USB鼠标控制程序,发现可以通过按键控制鼠标左右上下移动,猜想不成立。猜想二:LCD显示屏未驱动成功出厂程序自带循环播放的LCD显示画面,猜想不成立。猜想三:程序兼容性问题通过查阅资料,发现硬件设备和程序设计存在版本更新问题,下载最新的LCD程序,依然存在白屏问题,猜想不成立。经过多次实践,最终得以克服白屏问题。原因是多次程序载入导致开发板的Flash产生混乱,从而无法正常显示LCD屏幕内容。解决方法:对先前载入的程序进行彻底的擦除。 6.2.2硬件部分问题分析 问题:SD卡无法读取 烧入MP3 Player程序之后,开发板屏幕显示“No Detect HZLib Writing HZLib HZLib Error”字样。 无法检测到SD中的汉字库.bin文件,猜想SD的内存出现问题,我们对SD卡进行多次格式化,重复实验,依然无法检测到汉字库,MP3屏幕无法显示。 由此我们小组猜想SD卡与STM32连接的端口可能出现硬件故障导致无法读出SD卡中的内容。7 心得体会 本次的课程设计我们虽然没有完成MP3成品的设计,但是在调试和测试的过程中我们依然学习和掌握到了许多嵌入式系统的知识。对于嵌入式开发的基本流程也有所掌握。 在硬件电路部分,通过查阅资料和自我学习,加深了解了STM32芯片的一些基本功能和外部引脚,对于VS1003解码芯片也有了一定的了解。通过文献和原理图的介绍理解MP3的工作原理,提高了自己的自主学习能力。 在软件设计过程中,我接触到了嵌入式系统的软件设计,这不同与以往在PC机上的程序设计,其程序规模也远远大于类似科创系列课程中所设计到的软件,同时在很多地方需要移植现成的代码,。在次过程中,我接触到了平时不大涉及的位操作,宏定义,多进程多线程等等。 大多数的知识是在课本之外,而且是比较新的技术,课程设计的目的就是要求我们有足够的搜索资源寻找答案的能力,借助互联网的强大力量和老师的帮助,使我们接触到了许多新新的知识,大大开拓了这方面的见识。总而言之,本次的课程设计使我受益良多。 8 参考文献(1) STM32F103V8en.pdf, /, 2009 (2) UM0306_STM32F10XXX 使用手册.pdf (3) 基于MDK的STM32处理器开发应用 北京航空航天大学出版社,李宁编著 2008年(4) 嵌入式系统程序设计 清华大学出版社,赖晓晨、原旭、孙宁编著 2010年(5) ARM系统开发从实践到提高 中国电力出版社,丁峰 2007年附录: 程序代码18* Function Name : TargetInit* Description : 初始化系统和外设 * Input : None* Output : None* Return : None* Attention : Nonestatic void TargetInit(void) uint8_t HZLib2;INT8U err; SPI_FLASH_Init(); SPI_FLASH_Test(); GPIO_Configuration(); NVIC_Configuration(); USART_Configuration(); printf(- Basic MP3 Project %s rn, SOFTPACK_VERSION); printf(- %s -rn, BOARD_NAME); printf(- Compiled: %s %s rn, _DATE_, _TIME_); /* 检测SD卡存在 */ LCD_Clear(Black); if( SD_Detect() = SD_PRESENT ) ; else printf(- Please connect a SD card rn); GUI_Text(36,100,Please insert SD card,White,Black); while(SD_Detect()!=SD_PRESENT); printf(- SD card connection detected rn); GUI_Text(44,120,SD card detected OK,White,Black); OSTimeDlyHMSM(0, 0, 1, 0); /* 1 second */ SearchMusic(MUSIC_DIRECTORY); df_read_open(0); df_read(HZLib,2); /* 写入字库 */ if( !( HZLib0 = 0xaa & HZLib1 = 0x55 ) ) LCD_Clear(Black); GUI_Text(60,100,No Detect HZLib,White,Black);GUI_Text(68,120,Writing HZLib,White,Black); df_write_open( HZLIB_ADDR ); f_mount(0,&fs); /* 挂载文件系统 */ res = f_open(&mp3FileObject , SYSTEM_FILE_HZLIB , FA_OPEN_EXISTING | FA_READ);if( res != 0 ) GUI_Text(76,140,HZLib Error,White,Black); while(1);SSTF016B_Erase( HZLIB_ADDR/SEC_SIZE , mp3FileObject.fsize/SEC_SIZE + 1 ); do res = f_read(&mp3FileObject,readBuf,READBUF_SIZE,&n_Read); df_write(readBuf,n_Read); while( n_Read = READBUF_SIZE & res = 0 );if( mp3FileObject.fptr != mp3FileObject.fsize ) GUI_Text(76,140,HZLib Error,White,Black); while(1);GUI_Text(88,140,HZLib OK,White,Black); /* 字库存在标志 */HZLib0 = 0xaa; HZLib1 = 0x55;df_write_open(0); df_write(HZLib,2); OSTimeDlyHMSM(0, 0, 1, 0); /* 1 second */ OSFlagPost(Sem_F, 2, OS_FLAG_SET, &err); /* TargetIni初始化完成 */ /* Function Name : GetMP3Time* Description : 计算MP3播放时间* Input : - path: MP3存放路径* Output : None* Return : None* Attention : None*/int GetMP3Time(char* path) int TotalTime=0; /* 音乐播放的总时间 */ uint16_t mp3recordstart=0; res = f_open(&mp3FileObject ,path, FA_OPEN_EXISTING | FA_READ); /* 获取MP3文件的播放时间 */ if(mp3FileObject.fsize != 0) /* 歌曲长度不为零 */ /* 计算歌曲播放总时间 */ while(mp3recordstart filename, ,sizeof(PlayFile-filename) ); /* 空格 */strcpy(PlayFile-filename,ShortFileName);printf(- search %s ,ShortFileName);PlayFile-next = NULL;PlayFile-back = NULL;before_node = PlayFile;strcpy(Filepath,path);strcat(Filepath,/);strcat(Filepath,ShortFileName);printf(- file path %s ,Filepath); TimeFormat(GetMP3Time(Filepath), &destime); /* 保存播放时间*/printf(- play time %d:%d rn, destime.minute , destime.second );PlayFile-filenamestrlen(PlayFile-filename) = ; /* 寻找字符串结束符*/PlayFile-filename sizeof(PlayFile-filename) -6 = destime.minute/10 + 0; /* 分钟 */PlayFile-filename sizeof(PlayFile-filename) -5 = destime.minute%10 + 0; /* 分钟 */PlayFile-filename sizeof(PlayFile-filename) -4 = :; PlayFile-filename sizeof(PlayFile-filename) -3 = destime.second/10 + 0; /* 秒 */PlayFile-filename sizeof(PlayFile-filename) -2 = destime.second%10 + 0; /* 秒 */PlayFile-filename sizeof(PlayFile-filename) -1 = 0; /* 字符串结束符 */printf(- listbox display %s rn, PlayFile-filename ); else new_node = (dlink) malloc(sizeof( struct PlayF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年煤气作业考试模拟题集
- 2025年燃气储运工高级专业知识点解析与模拟题练习
- 2025年焊接技术面试官出题热点与模拟题答案分析
- 布袋除尘节能课件
- 2025年生活用纸项目规划申请报告模板
- 2025年职业技能汽车修理工-汽车修理工(初级)参考题库含答案解析
- 2025年变频器柜体系统项目提案报告模范
- 2025年特种作业类金属非金属矿山安全作业金属非金属矿山爆破作业-金属非金属矿山排水作业参考题库含答案解析
- 2025年特种作业类危险化学品安全作业磺化工艺作业-生产经营从业参考题库含答案解析
- 2025年特种作业类危险化学品安全作业氯碱电解工艺作业-生产经营从业参考题库含答案解析
- 金氏五行升降中医方集
- 血液透析中出血的原因及预防
- 珠宝品牌价值构建-深度研究
- 预备役退出申请书
- 三农村集体经济组织内部审计操作手册
- 2025年1月浙江省高考地理试卷(含答案)
- 锂电池项目经济效益及投资价值分析
- 2025年中国维生素C咀嚼片市场供需格局及未来发展趋势报告
- 广东省汕头市金平区2021-2022学年八年级下学期期末英语卷
- 物流行业固废处理方案
- 测绘项目投标技术文件范例
评论
0/150
提交评论