版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
畢業(yè)論文PAGEIstm32mp3播放器畢業(yè)論文題目:基于STM32的MP3播放系統(tǒng)設(shè)計(jì)專業(yè) 電子信息科學(xué)與技術(shù) 摘要MP3是一種高質(zhì)量音樂(lè)壓縮標(biāo)準(zhǔn),采用MP3壓縮的數(shù)據(jù)量可以縮小到1/12,音質(zhì)卻沒(méi)有多少損失。由于MP3音樂(lè)的較小數(shù)據(jù)量和高質(zhì)量的播放效果,使它很快成為一種集音頻播放、數(shù)據(jù)存儲(chǔ)為一身的數(shù)碼產(chǎn)品,并深受人們的喜愛。本文采用STM32系列微控制器,結(jié)合解碼芯片VS1003、SD卡、LCD等外圍設(shè)備設(shè)計(jì)并實(shí)現(xiàn)了MP3播放器。其主要功能有:播放VS1003支持的所有音頻文件,如MP3、WMA、WAV文件,且音質(zhì)非常好;通過(guò)搖桿控制播放上一首/下一首,通過(guò)電位計(jì)來(lái)控制音量增減,通過(guò)LCD顯示音量圖標(biāo)和播放狀態(tài)等;本系統(tǒng)還計(jì)劃實(shí)現(xiàn)讀卡器功能,PC機(jī)可通過(guò)USB接口直接對(duì)開發(fā)板上的SD卡進(jìn)行讀寫操作,以方便拷貝音頻文件。關(guān)鍵字:MP3播放器、CortexM3、STM32V100、VS1003
ABSTRACTIsahighqualityMP3musiccompressionstandard,withMP3compresseddatacanbereducedto1/12,butthereislittlelossofsoundquality.MP3musicasthesmalleramountofdataandhigh-qualityplayback,itwillsoonbecomeasetofaudioplayback,thedataisstoredasadigitalproduct,andverypopular.Inthispaper,STM32familyofmicrocontrollers,combinedwithdecoderchipVS1003,SDcard,LCDandotherperipheralsdesignandimplementationofMP3players.Itsmainfunctionsare:PlayVS1003supportsallaudiofiles,suchasMP3,WMA,WAVfiles,andthesoundqualityisverygood;throughthejoystickcontrolplaybackona/tothenext,throughapotentiometertocontrolvolumechange,throughtheLCDshowthevolumeiconandplaystatus,etc.;Thesystemalsoplanstoachievereaderfunction,PCmachineinterfacesviaUSBdirectlytothedevelopmentboardoftheSDcardreadandwriteoperationstofacilitatethecopyingaudiofiles.Keywords:MP3Players;CortexM3;STM32V100;VS1003
目錄摘要 IABSTRACT II目錄 III第一章緒論 11.1選題背景 11.2國(guó)內(nèi)外研究現(xiàn)狀及意義 11.3設(shè)計(jì)和研究方向 2第二章系統(tǒng)設(shè)計(jì)理論基礎(chǔ) 32.1Arm嵌入式系統(tǒng) 32.2STM32V100Arm開發(fā)板 32.3SD卡 32.4FAT16文件系統(tǒng) 42.4.1DBR區(qū) 42.4.2FAT區(qū) 52.4.3FDT區(qū) 52.4.4DATA區(qū) 52.5音頻編解碼器 52.6液晶顯示器 62.7電路焊接 6第三章系統(tǒng)總體設(shè)計(jì)方案及硬件環(huán)境 73.1設(shè)計(jì)目標(biāo) 73.2設(shè)計(jì)原理 73.2.1中央處理器工作原理 73.2.2電源部分原理 83.2.3音頻解碼器介紹 83.2.5液晶顯示原理 93.3模塊設(shè)計(jì)方案對(duì)比 103.3.1控制模塊 103.3.2電源模塊 103.3.3音頻解碼器模塊 113.3.4顯示模塊 113.4最終設(shè)計(jì)方案 12第四章硬件電路設(shè)計(jì) 134.1系統(tǒng)硬件設(shè)計(jì)平臺(tái) 134.2總體架構(gòu)設(shè)計(jì) 134.3模塊化電路設(shè)計(jì) 144.3.1SD卡模塊 144.3.2音頻解碼器模塊 154.3.3液晶顯示模塊 16第五章軟件程序設(shè)計(jì) 175.1系統(tǒng)軟件開發(fā)平臺(tái) 175.2程序?qū)崿F(xiàn)思想 175.3整體軟件系統(tǒng)流程圖 175.4各模塊軟件系統(tǒng)設(shè)計(jì) 185.4.1SD卡讀寫模塊設(shè)計(jì) 185.4.2FAT16文件系統(tǒng) 185.4.2MP3播放流程設(shè)計(jì) 195.4.3液晶顯示設(shè)計(jì) 195.5程序設(shè)計(jì)結(jié)果 20第六章測(cè)試和調(diào)試 216.1運(yùn)行過(guò)程 216.3問(wèn)題分析 216.3.1硬件方面 216.3.2軟件方面 22第七章結(jié)論 23結(jié)束語(yǔ) 24參考文獻(xiàn) 25致謝 26附錄 27附錄一 27第一章緒論1.1選題背景隨著信息技術(shù)的飛速發(fā)展,形式多樣的數(shù)字化產(chǎn)品已經(jīng)開始成為繼PC機(jī)后的信息處理工具,在這種數(shù)字化潮流下,嵌入式系統(tǒng)已成為當(dāng)前研究和應(yīng)用的熱點(diǎn)之一,嵌入式手持設(shè)備的視音頻多媒體應(yīng)用也越來(lái)越廣泛。由于嵌入式系統(tǒng)的應(yīng)用要求及成本因素決定了嵌入式系統(tǒng)在系統(tǒng)資源,包括硬件資源和軟件資源方面都是非常精簡(jiǎn)和高效的。隨著數(shù)字編解碼及壓縮技術(shù)的發(fā)展,語(yǔ)音文件也朝著高壓縮比、高保真的方向發(fā)展,從MP1、MP2到目前的MP3格式。便攜式MP3播放器作為一種集音頻播放、數(shù)據(jù)存儲(chǔ)為一身的數(shù)碼產(chǎn)品,其功能結(jié)構(gòu)為電子設(shè)計(jì)人員所津津樂(lè)道。MP3是MPEG一1音頻III(1ayerIII)的簡(jiǎn)稱。MPEG一1音頻(ISO/IECll172—3)是目前普遍應(yīng)用的音頻壓縮標(biāo)準(zhǔn),其中層III的算法最為復(fù)雜,但壓縮比最大,效果也最好,在低碼率的條件下基本能達(dá)到CD的音質(zhì)效果。MP3標(biāo)準(zhǔn)用盡可能低的碼流實(shí)現(xiàn)CD音質(zhì)的聲音而不會(huì)產(chǎn)生數(shù)據(jù)損失。如果對(duì)于一段聲音不進(jìn)行壓縮的話,那么每存儲(chǔ)一秒鐘的立體聲CD音質(zhì)音樂(lè)必須用1.4Mbit,這是個(gè)十分大的開銷。通過(guò)運(yùn)用MPEG音頻標(biāo)準(zhǔn)的壓縮技術(shù),我們可以把存儲(chǔ)空間壓縮到原來(lái)的1/12而不會(huì)降低聲音的音質(zhì)。即使使用1/24的壓縮因子,仍然比單純降低采樣率的音質(zhì)要好。低數(shù)據(jù)量和高播放品質(zhì)的優(yōu)點(diǎn)使其成為音樂(lè)存儲(chǔ)、數(shù)字廣播、網(wǎng)上音樂(lè)傳輸?shù)闹饕绞?。人們不僅可以使用計(jì)算機(jī)軟件,還可以通過(guò)數(shù)字隨身聽來(lái)欣賞音樂(lè)。1.2國(guó)內(nèi)外研究現(xiàn)狀及意義MP3全稱是MPEGLayer3,狹義的講就是以MPEGLayer3標(biāo)準(zhǔn)壓縮編碼的一種音頻文件格式。在INTERNET廣泛普及的今天,MP3音樂(lè)以其較小數(shù)據(jù)量和近似完美的播放效果已經(jīng)成為計(jì)算機(jī)上和INTERNET最流行的音樂(lè)格式了。將CD格式的音樂(lè)數(shù)據(jù)壓縮成MP3格式,音效相差無(wú)幾(除非你有很好的音響和鑒賞力),文件大小至少可以壓縮12倍(每首PCM格式的CD歌曲大約40~50MB數(shù)據(jù)量)。自韓國(guó)世韓(Seahan)公司1998年推出世界上第一臺(tái)MP3隨身聽以來(lái),MP3播放器以其小巧的外形,不錯(cuò)的近乎于CD的音質(zhì),前衛(wèi)的功能,越來(lái)越受到消費(fèi)者的青睞,也就成為業(yè)界甚至大眾媒體關(guān)注的一個(gè)熱門話題。它的記錄媒介是芯片或卡,無(wú)需轉(zhuǎn)動(dòng)部件,徹底擺脫了磁帶和光碟的束縛,因而,抗震和節(jié)電性能更好。在市場(chǎng)消費(fèi)刺激下,各大公司紛紛推出了自己的mp3播放器產(chǎn)品,IC供應(yīng)商提供了眾多的MP3解碼芯片及其解決方案。除了Micronas方案(MAS3507+DAC3550)、ST方案(ST92163+STA013/015)、Crystal軟解壓?jiǎn)涡酒桨?EP7209,EP7212)、TI軟解壓?jiǎn)涡酒桨?TMS320C5409),還有臺(tái)灣創(chuàng)品方案(T33510,T33520)、美國(guó)SigmaTel方案(STMP3400)和TI的DA-250解決方案。這使mp3播放器的研制與生產(chǎn)變得更加容易,成本也大大降低,市場(chǎng)更加廣闊。1.3設(shè)計(jì)和研究方向STM32系列微控制器采用ARM公司最新的CortexM3內(nèi)核。VS1003音頻解碼芯片為VS10xx系列的第三代產(chǎn)品,是芬蘭VLSISolution公司生產(chǎn)的單片MP3/WMA/MIDI解碼和ADPCM編碼芯片。本文采用STM32系列微控制器,結(jié)合解碼芯片VS1003、SD卡、LCD等外圍設(shè)備設(shè)計(jì)并實(shí)現(xiàn)了MP3播放器。其主要功能有:播放VS1003支持的所有音頻文件,如MP3、WMA、WAV文件,且音質(zhì)非常好;通過(guò)搖桿控制播放上一首/下一首,通過(guò)電位計(jì)來(lái)控制音量增減等;通過(guò)LCD顯示音量圖標(biāo)和播放狀態(tài);本系統(tǒng)還計(jì)劃實(shí)現(xiàn)讀卡器功能,PC機(jī)可通過(guò)USB接口直接對(duì)開發(fā)板上的SD卡進(jìn)行讀寫操作,以方便拷貝音頻文件。
第二章系統(tǒng)設(shè)計(jì)理論基礎(chǔ)2.1Arm嵌入式系統(tǒng)嵌入式系統(tǒng)的體系結(jié)構(gòu)(architecture)是嵌入式設(shè)備的一種抽象,這意味著體系結(jié)構(gòu)是系統(tǒng)的一般化,它典型的展現(xiàn)詳細(xì)的現(xiàn)實(shí)信息,例如軟件源代碼或硬件電路設(shè)計(jì)。在體系結(jié)構(gòu)層次,一個(gè)嵌入式系統(tǒng)中的硬件和軟件組件表示為相互作用的要素的某種組合。要素是硬件或軟件的表示,它們的實(shí)現(xiàn)細(xì)節(jié)被抽象掉了,只留下行為和相互關(guān)系的信息。體系結(jié)構(gòu)的要素可以在內(nèi)部集成于嵌入式設(shè)備之中,或者存在于嵌入式系統(tǒng)外部并且與內(nèi)部的要素相互作用。簡(jiǎn)而言之,嵌入式體系結(jié)構(gòu)包括嵌入式系統(tǒng)的要素、與嵌入式系統(tǒng)相互作用的要素、每個(gè)單獨(dú)的要素的屬性、以及要素之間相互作用的關(guān)系。2.2STM32V100Arm開發(fā)板STM32F103VBT6增強(qiáng)型系列使用高性能的ARMCortex-M332位的RISC內(nèi)核,工作頻率為72MHz,內(nèi)置高速存儲(chǔ)器(高達(dá)128K字節(jié)的閃存和20K字節(jié)的SRAM),豐富的增強(qiáng)I/O端口和聯(lián)接到兩條APB總線的外設(shè)。所有型號(hào)的器件都包含2個(gè)12位的ADC、3個(gè)通用16位定時(shí)器和一個(gè)PWM定時(shí)器,還包含標(biāo)準(zhǔn)和先進(jìn)的通信接口:多達(dá)2個(gè)I2C和SPI、3個(gè)USART、一個(gè)USB和一個(gè)CAN。STM32F103VBT6增強(qiáng)型系列工作于-40°C至+105°C的溫度范圍,供電電壓2.0V至3.6V,一系列的省電模式保證低功耗應(yīng)用的要求。2.3SD卡SD卡(SecureDigitalMemoryCard)是一種為滿足安全性、容量、性能和使用環(huán)境等各方面的需求而設(shè)計(jì)的一種新型存儲(chǔ)器件,SD卡允許在兩種模式下工作,即SD模式和SPI模式,本系統(tǒng)采用SPI模式。本小節(jié)僅簡(jiǎn)要介紹在SPI模式下,STM32處理器如何讀寫SD卡,如果讀者如希望詳細(xì)了解SD卡,可以參考相關(guān)資料。SD卡內(nèi)部結(jié)構(gòu)及引腳如圖2-1所示圖2.1SD卡內(nèi)部結(jié)構(gòu)及引腳SD卡主要引腳和功能為:CLK:時(shí)鐘信號(hào),每個(gè)時(shí)鐘周期傳輸一個(gè)命令或數(shù)據(jù)位,頻率可在0~25MHz之間變化,SD卡的總線管理器可以不受任何限制的自由產(chǎn)生0~25MHz的頻率;CMD:雙向命令和回復(fù)線,命令是一次主機(jī)到從卡操作的開始,命令可以是從主機(jī)到單卡尋址,也可以是到所有卡;回復(fù)是對(duì)之前命令的回答,回復(fù)可以來(lái)自單卡或所有卡;DAT0~3:數(shù)據(jù)線,數(shù)據(jù)可以從卡傳向主機(jī)也可以從主機(jī)傳向卡。SD卡以命令形式來(lái)控制SD卡的讀寫等操作??筛鶕?jù)命令對(duì)多塊或單塊進(jìn)行讀寫操作。在SPI模式下其命令由6個(gè)字節(jié)構(gòu)成,其中高位在前。SD卡命令的格式如表1所示,其中相關(guān)參數(shù)可以查閱SD卡規(guī)范。2.4FAT16文件系統(tǒng)SD卡如果采用FAT16文件格式,按照其不同的特點(diǎn)和作用大致可分為5部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、FDT區(qū)和DATA區(qū)。由于SD卡一般不做引導(dǎo)盤,一般也不分區(qū),因此通常無(wú)MBR區(qū),直接從DBR區(qū)開始。下面對(duì)后面四個(gè)區(qū)分別作簡(jiǎn)介2.4.1DBR區(qū)內(nèi)容為系統(tǒng)引導(dǎo)記錄,它包括一個(gè)引導(dǎo)程序和一個(gè)被稱為BPB(BiosParameterBlock)的本分區(qū)參數(shù)記錄表。引導(dǎo)程序的主要任務(wù)是當(dāng)MBR將系統(tǒng)控制權(quán)交給它時(shí),判斷本分區(qū)根目錄是否有操作系統(tǒng)引導(dǎo)文件,如果有則將其讀入內(nèi)存,并把控制權(quán)交給該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲(chǔ)格式、根目錄大小、FAT個(gè)數(shù),分配單元大小等重要參數(shù)。2.4.2FAT區(qū)該區(qū)內(nèi)容為文件分配表,F(xiàn)AT16文件系統(tǒng)進(jìn)行空間分配的最基本單位是簇。文件分配表反映了SD卡所有簇的使用情況,通過(guò)查文件分配表可以得知任一簇的使用情況。對(duì)于FAT16來(lái)說(shuō),F(xiàn)AT表每項(xiàng)占用兩個(gè)字節(jié)。FAT表的第一項(xiàng)通常為FFF8H。對(duì)于其它項(xiàng),若其值為0000H表示可用;FFF7H表示為壞簇;FFF8H-FFFFH之間表示該簇為某文件或目錄的最后一個(gè)簇,F(xiàn)FF0H-FFF6H之間為保留值;其它值則指示下一個(gè)簇的簇號(hào)。2.4.3FDT區(qū)該區(qū)的內(nèi)容為文件目錄表,F(xiàn)AT文件系統(tǒng)的一個(gè)重要思想是把目錄(文件夾)當(dāng)作一個(gè)特殊的文件來(lái)處理,F(xiàn)AT32甚至將根目錄當(dāng)作文件處理。FAT分區(qū)中所有目錄文件,實(shí)際上可以看作是一個(gè)存放其它文件(文件夾)入口參數(shù)的數(shù)據(jù)表。因此,目錄占用空間的大小并不等同于其下所有數(shù)據(jù)的大小,但也不等于0,通常是占很小的空間。其具體的存儲(chǔ)原理是:不管目錄文件所占空間為多少簇,一簇為多少扇區(qū)、多少字節(jié);系統(tǒng)都會(huì)以32個(gè)字節(jié)為單位,進(jìn)行目錄文件所占簇的分配。2.4.4DATA區(qū)該數(shù)據(jù)區(qū)存放文件的內(nèi)容,SD卡所占用的空間絕大部分為此部分。如果文件長(zhǎng)度大于一個(gè)簇的大小,需要多個(gè)簇存放該文件,這些放通過(guò)FAT鏈表串連起來(lái)。2.5音頻編解碼器音頻編碼解碼器芯片主要由圍繞一些處理硬件的一個(gè)模數(shù)轉(zhuǎn)換器(ADC)和一個(gè)數(shù)模轉(zhuǎn)換器(DAC)組成,但它們只是眾所周知的海底冰山露出來(lái)的一角。最近一段時(shí)間,大部分工程師認(rèn)為音頻編解碼器就是在DSP平臺(tái)上運(yùn)行的壓縮和解壓縮算法。在整個(gè)音頻頻率范圍里,“語(yǔ)音”編解碼器適合數(shù)字電話應(yīng)用,而“音頻”編解碼器則適合娛樂(lè)音頻應(yīng)用。在這個(gè)意義上,音頻編解碼器是從Dolby公司的噪音抑制技術(shù)演變成Dolby和其它一些公司更綜合性的壓縮方法。它們的出現(xiàn)還與國(guó)際標(biāo)準(zhǔn)組織(ISO)的運(yùn)動(dòng)圖像專家小組(MPEG)有關(guān),該工作小組負(fù)責(zé)為數(shù)字音頻和視頻的編碼表示制定相應(yīng)的標(biāo)準(zhǔn)。盡管語(yǔ)音編解碼器技術(shù)的發(fā)展一定程度上處于靜止?fàn)顟B(tài),但音頻編解碼器技術(shù)一直在向前演進(jìn)。2.6液晶顯示器定義:通常,我們?cè)跀?shù)字式電子表與手提電腦上所看到的顯示數(shù)字之玻璃薄片即稱之為液晶顯示器(LiquidCrysplay,簡(jiǎn)稱LCD)。優(yōu)點(diǎn):平面型顯示,體積小,重量輕,功耗低,驅(qū)動(dòng)電壓低,可用大規(guī)模集成電路直接驅(qū)動(dòng),可以在明亮的境下顯示,不含有害射線等。種類:①按顯示方式,可分為透射型、反射型的投影顯示三大類。②按顯示機(jī)理,可分為如下五種:TN(TwistNematic)扭曲向列型HTN(HighTwistNematic)高扭曲向列型STN(SuperTwistNematic)超扭曲向列型FSTN(FilmSuperTwistNematic)薄膜超扭曲向弄列型TFT(Thin-filmTransistor)薄膜晶體管2.7電路焊接在焊接模塊外引線、接口電路時(shí),應(yīng)按如下規(guī)程進(jìn)行操作:1)烙鐵頭溫度小于280℃。2)焊接時(shí)間小于3~4s。3)焊接材料:共晶型、低熔點(diǎn)。4)不要使用酸性助焊劑,一般選擇松香。5)重復(fù)焊接不要超過(guò)3次,且每次重復(fù)需間隔3分鐘。
第三章系統(tǒng)總體方案設(shè)計(jì)3.1設(shè)計(jì)目標(biāo)本文采用STM32系列微控制器,結(jié)合解碼芯片VSl003、SD卡、LCD等外圍設(shè)備設(shè)計(jì)并實(shí)現(xiàn)了MP3播放器。其主要功能有:播放VSl003支持的所有音頻文件,如MP3、WMA、WAV文件,且音質(zhì)非常好;通過(guò)搖桿控制播放上一首/下一首、音量增減等;通過(guò)LCD顯示歌曲名字和播放狀態(tài);本系統(tǒng)還實(shí)現(xiàn)了讀卡器功能,PC機(jī)可通過(guò)USB接口直接對(duì)開發(fā)板上的SD卡進(jìn)行讀寫操作,以方便拷貝音頻文件。3.2設(shè)計(jì)原理3.2.1中央處理器工作原理STM32處理器CortexM3是ARM公司最新推出的基于ARMv7體系架構(gòu)的處理器核,具有高性能、低成本、低功耗的特點(diǎn),專門為嵌入式應(yīng)用領(lǐng)域設(shè)計(jì)。ARMv7架構(gòu)采用了Thumb2技術(shù),它是在ARM的Thumb代碼壓縮技術(shù)的基礎(chǔ)上發(fā)展起來(lái)的,并且保持了對(duì)現(xiàn)存ARM解決方案完整的代碼兼容性\[3\]。Thumb2技術(shù)比純ARM代碼少使用31%的內(nèi)存,減小了系統(tǒng)開銷,同時(shí)能夠提供比Thumb技術(shù)高出38%的性能。在中斷處理方面,CortexM3集成了嵌套向量中斷控制器NVIC(NestedVectoredInterruptController)。NVIC是CortexM3處理器的一個(gè)緊耦合部分,可以配置1~240個(gè)帶有256個(gè)優(yōu)先級(jí)、8級(jí)搶占優(yōu)先權(quán)的物理中斷,為處理器提供出色的異常處理能力。同時(shí),搶占(Preemption)、尾鏈(Tailchaining)、遲到技術(shù)(Latearriving)的使用,大大縮短了異常事件的響應(yīng)時(shí)間。CortexM3異常處理過(guò)程中由硬件自動(dòng)保存和恢復(fù)處理器狀態(tài),進(jìn)一步縮短了中斷響應(yīng)時(shí)間,降低了軟件設(shè)計(jì)的復(fù)雜性。CortexM3體系架構(gòu)提出了新的單線調(diào)試技術(shù),CortexM3處理器的跟蹤調(diào)試是通過(guò)調(diào)試訪問(wèn)端口(DebugAccessPort,DAP)來(lái)實(shí)現(xiàn)的。DAP端口可以作為串行線調(diào)試端口(SWDP)或串行JTAG調(diào)試端口(SWJDP,允許JTAG或SW協(xié)議)使用。其中SWDP只需要時(shí)鐘和數(shù)據(jù)2個(gè)引腳,實(shí)現(xiàn)低成本跟蹤調(diào)試,避免使用多引腳進(jìn)行JTAG調(diào)試,并全面支持RealView編譯器和RealView調(diào)試產(chǎn)品。此外CortexM3還具備高度集成化的特點(diǎn),大大減小了芯片面積,內(nèi)部集成了許多緊耦合系統(tǒng)外設(shè),合理利用了芯片空間,使系統(tǒng)滿足下一代產(chǎn)品的控制需求。STM32系列是基于CortexM3核的微控制器,它在CortexM3內(nèi)核的基礎(chǔ)上擴(kuò)展了高性能的外圍設(shè)備。3.2.2電源部分原理電源設(shè)計(jì)是一個(gè)系統(tǒng)設(shè)計(jì)中的關(guān)鍵部分,對(duì)于整個(gè)系統(tǒng),一個(gè)穩(wěn)定的、具有一定功率的電源和合理的電源管理是必不可少的。本系統(tǒng)有以下幾種電源:CPU的內(nèi)核數(shù)字和模擬電源電壓+1.8V,CPU的I/O口數(shù)字和模擬電源電壓+3.3V、總線的隔離電源、LCD的驅(qū)動(dòng)電源、LCD的背光逆變電源、其他外圍設(shè)備電源電壓+5V等電源。3.2.3音頻解碼器介紹VS1003是一個(gè)單片MP3/WMA/MIDI音頻解碼器和ADPCM編碼器。它包含一個(gè)高性能,自主產(chǎn)權(quán)的低功耗DSP處理器核VS_DSP4,工作數(shù)據(jù)存儲(chǔ)器,為用戶應(yīng)用提供5KB的指令RAM和0.5KB的數(shù)據(jù)RAM。串行的控制和數(shù)據(jù)接口,4個(gè)常規(guī)用途的I/O口,一個(gè)UART,也有一個(gè)高品質(zhì)可變采樣率的ADC和立體聲DAC,還有一個(gè)耳機(jī)放大器和地線緩沖器。其具體特性如下:●能解碼MPEG1和MPEG2音頻層III(CBR+VBR+ABR);WMA4.0/4.1/7/8/95-384kbps所有流文件;WAV(PCM+IMAAD-PCM);產(chǎn)生MIDI/SP-MIDI文件?!駥?duì)話筒輸入或線路輸入的音頻信號(hào)進(jìn)行IMAADPCM編碼●支持MP3和WAV流●高低音控制●單時(shí)鐘操作12..13MHz●內(nèi)部PLL鎖相環(huán)時(shí)鐘倍頻器●低功耗●內(nèi)含高性能片上立體聲數(shù)模轉(zhuǎn)換器,兩聲道間無(wú)相位差●內(nèi)含能驅(qū)動(dòng)30歐負(fù)載的耳機(jī)驅(qū)動(dòng)器●模擬,數(shù)字,I/O單獨(dú)供電●為用戶代碼和數(shù)據(jù)準(zhǔn)備的5.5KB片上RAM●串行的控制,數(shù)據(jù)接口●可被用作微處理器的從機(jī)●特殊應(yīng)用的SPIFlash引導(dǎo)●供調(diào)試用途的UART接口●新功能可以通過(guò)軟件和4GPIO添加圖3.1VS1003芯片3.2.5液晶顯示原理1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如表(1)所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”表3.2LCD1602字符表3.3模塊設(shè)計(jì)方案對(duì)比3.3.1控制模塊方案一:此方案采用89C51單片機(jī)實(shí)現(xiàn),單片機(jī)軟件編程自由度大,可用編程實(shí)現(xiàn)各種控制算法和邏輯控制。但是89C51需外接模數(shù)轉(zhuǎn)換器來(lái)滿足數(shù)據(jù)采樣。如果系統(tǒng)增加語(yǔ)音播放功能,還需外接語(yǔ)音芯片,對(duì)外圍電路來(lái)說(shuō),比較復(fù)雜,且軟件實(shí)現(xiàn)也較麻煩。另外,51單片機(jī)需要用仿真器來(lái)實(shí)現(xiàn)軟硬件調(diào)試,較為繁瑣。方案二:此方案采用SPCE061A單片機(jī)實(shí)現(xiàn),此單片機(jī)內(nèi)置8路ADC,2路DAC,且集成開發(fā)環(huán)境中,配有很多語(yǔ)音播放函數(shù),用SPCE061A實(shí)現(xiàn)語(yǔ)音播放相對(duì)方便。但5V的工作電壓,16位的處理器芯片,較低的閃存,使得功耗比較大,處理速度比較慢,工作效率比較低,存儲(chǔ)量受到限制。方案三:此方案采用STM32V100ARM板實(shí)現(xiàn),它使用高性能的ARMCortex-M332位的RISC內(nèi)核,工作頻率為72MHz,內(nèi)置高速存儲(chǔ)器(高達(dá)128K字節(jié)的閃存和20K字節(jié)的SRAM),豐富的增強(qiáng)型I/O端口以及包含2個(gè)12位的ADC、3個(gè)通用16位定時(shí)器和一個(gè)PWM定時(shí)器。使得處理速度大大提高,機(jī)器功耗大大降低,整體性能得到很大提高。32位的處理器使得控制更加穩(wěn)定、迅速,窗口型看門狗,使得程序運(yùn)行更加高效。另外,比較方便的是該板支持硬件仿真,通過(guò)Ulink仿真器可以方便實(shí)現(xiàn)在線逐步調(diào)試,這大大方便了系統(tǒng)的開發(fā)與調(diào)試工作。3.3.2電源模塊1)在各種電子設(shè)備中,直流穩(wěn)壓電源是必不可少的組成部分,它是電子設(shè)備唯一能量來(lái)源,它的設(shè)計(jì)思路可以根據(jù)我們以前學(xué)過(guò)的模電知識(shí)來(lái)完成,既做一個(gè)穩(wěn)壓電源,將交流220V的電壓經(jīng)過(guò)變壓器、整流電路、濾波電路和穩(wěn)壓電路四個(gè)部分,輸出我們想要得的+5V電壓。2)可以用四節(jié)干電池和穩(wěn)壓三極管進(jìn)行穩(wěn)壓,從而得到我們要用的+5V直流電壓,通過(guò)外接排針CN12,從外板供電。3)可以通過(guò)主板上USB端口(CN1)供電,供電電流小于500mA。出于調(diào)試的方便和即插即用性,以及本系統(tǒng)的側(cè)重點(diǎn)在MP3播放器上,所以我采用USB為系統(tǒng)供電,如此一來(lái)使系統(tǒng)的實(shí)現(xiàn)變得更加簡(jiǎn)便、迅速。3.3.3音頻解碼器模塊VS1003特性:VS1003可以作為一個(gè)微控制器的從機(jī),通過(guò)串行SPI接口來(lái)接收輸入的比特流,輸入的比特流被解碼后,可以通過(guò)一個(gè)數(shù)字音量控制器到達(dá)一個(gè)18位過(guò)采樣多位DAC。通過(guò)串行總線控制解碼器。這樣利用一個(gè)VS1003芯片與STM32F103x處理器配合,STM32處理器讀取SD卡中的MP3文件,將其通過(guò)SPI接口送往VS1003芯片播放,然后再利用STM32F10X處理器的一些GPIO口來(lái)控制VS1003即可以實(shí)現(xiàn)一個(gè)MP3Player的原形設(shè)計(jì)。3.3.4顯示模塊1)常見的基于單片機(jī)設(shè)計(jì)的音樂(lè)播放器基本不能顯示歌曲。該音樂(lè)播放系統(tǒng)設(shè)計(jì)上增加液晶顯示器,LCD顯示模塊主要完成數(shù)據(jù)顯示、輸出數(shù)據(jù)與顯示數(shù)據(jù)的同步等功能,可為使用者提供曲目信息。由于LED數(shù)碼管只能顯示數(shù)字而無(wú)法顯示其他中英文字符,并對(duì)成本及功能考慮,因此從設(shè)計(jì)的成本及功能的角度考慮,采用LCD1602顯示模塊,它可以顯示每目的英文名字。LCD1602驅(qū)動(dòng)電路簡(jiǎn)單,可以由CPU輸出命令驅(qū)動(dòng)。2)又由于STM32V100開發(fā)板中沒(méi)有液晶控制器的功能模塊,如果所選擇的液晶屏內(nèi)部也沒(méi)有液晶控制器,那么,要使CPU可以對(duì)液晶進(jìn)行控制,就必須加設(shè)計(jì)一個(gè)液晶驅(qū)動(dòng)控制電路。另外,由于液晶用來(lái)顯示調(diào)節(jié)播放音量的ADC轉(zhuǎn)換值和歌曲的順序,所以字符型的LCD1602基本上能夠滿足顯示要求。又由于系統(tǒng)設(shè)計(jì)時(shí)間的限制,因此本系統(tǒng)中選擇自帶控制器的液晶屏LCD1602液晶顯示。其連接電路圖如圖3.3所示。圖3.3LCD液晶管腳連接圖3.4最終設(shè)計(jì)方案通過(guò)上述論證,本系統(tǒng)采用STM32作為微控制器,VS1003作為解碼芯片,采用SD卡存儲(chǔ)MP3/WMA文件,LCD作為顯示器件,最終完成MP3的播放設(shè)計(jì)。同時(shí)PC機(jī)可以通過(guò)USB接口操作開發(fā)板上SD卡中的文件,也可以通過(guò)串口通信控制音樂(lè)播放。具體方案圖如圖3.4所示圖3.4總體設(shè)計(jì)方案框圖
第四章硬件電路設(shè)計(jì)本系統(tǒng)在硬件上分為5個(gè)模塊:微控制器STM32F103、存儲(chǔ)模塊SD卡、解碼模塊VSl003、控制搖桿Joystick和顯示屏LCD。MP3播放功能模塊的工作分為兩個(gè)部分:第一部分是循環(huán)播放MP3歌曲,該功能需要首先做一些初始化工作,MP3解碼器一旦開始工作,就會(huì)一直向CPU請(qǐng)求數(shù)據(jù),直至歌曲結(jié)束,只有通過(guò)鍵盤操作才會(huì)使該功能提前結(jié)束。因?yàn)镸P3文件的數(shù)據(jù)量較大,在flash存儲(chǔ)器內(nèi)是以頁(yè)為單位進(jìn)行存儲(chǔ)的,所以MP3的播放程序初始化就是要把該文件的首地址和頁(yè)數(shù)先讀出到CPU中,然后CPU可以根據(jù)如上數(shù)據(jù)進(jìn)行取數(shù)據(jù)工作。第二部分則一直在等待中斷發(fā)生,該程序是與鍵盤結(jié)合起來(lái)的,主要用于使用者對(duì)播放過(guò)程的控制。鍵盤操作對(duì)MP3播放過(guò)程的控制還包括后退、躍進(jìn)、跳到下一首、音量控制等。因?yàn)檎麄€(gè)播放過(guò)程的鍵盤控制功能比較單一,沒(méi)有鍵的復(fù)合操作,所以程序都很容易實(shí)現(xiàn)。當(dāng)MP3播放器插入到USB接口時(shí),系統(tǒng)執(zhí)行USB通訊功能模塊,該模塊主要用于對(duì)flash存儲(chǔ)器內(nèi)的文件數(shù)據(jù)進(jìn)行管理。4.1系統(tǒng)硬件設(shè)計(jì)平臺(tái)本系統(tǒng)以STM32V100開發(fā)板為平臺(tái),進(jìn)行MP3播放器的設(shè)計(jì)。4.2總體架構(gòu)設(shè)計(jì)如圖4.1所示,STM32F103x使用SPI2端口與VS1003芯片的SI、SO、SCLK連接;VS1003芯片的控制引腳xCS、xRESET、xDCS分別與STM32F103的PA1、PA0和PA2連接,低電平有效;VS1003的狀態(tài)引腳DREQ與STM32F103處理器的PA3連接,低電平表示需要送數(shù)據(jù),高電平表示正在處理數(shù)據(jù)。圖4.1MP3Player硬件設(shè)計(jì)電路圖4.3模塊化電路設(shè)計(jì)4.3.1SD卡模塊該系統(tǒng)使用STM32內(nèi)部接口SPIl與SD卡進(jìn)行通信,下面介紹其引腳連接情況。PE3:低電平有效,連接到SD卡的片選引腳CD/DAT3。SPI在和SD卡進(jìn)行通信時(shí),需要將PE3拉低才能對(duì)SD卡進(jìn)行操作。PA7:映射為STM32內(nèi)部接口SPIl的主輸出從輸入(MOSI)信號(hào)線。這里STM32是主設(shè)備,SD卡是從設(shè)備。數(shù)據(jù)流的傳輸方向是從STM32傳輸給SD卡。該信號(hào)線用于傳輸一些控制命令來(lái)完成SD卡的操作,如讀、寫等。PA5:已連接到STM32內(nèi)部接口SPIl的時(shí)鐘(SCLK)信號(hào)線??稍O(shè)置SPI的時(shí)鐘頻率來(lái)調(diào)整讀取SD卡數(shù)據(jù)的快慢。PA6:已連接到STM32內(nèi)部接口SPIl的主輸入從輸出(MISO)信號(hào)線。數(shù)據(jù)的傳輸方向是從SD卡傳輸給STM32,主要返回SD卡的一些狀態(tài)、內(nèi)部寄存器值等。PCI2:用于檢測(cè)SD卡是否完全插入。當(dāng)SD卡完全插入時(shí),PCl2為低電平,否則為高電平。由于本系統(tǒng)采用STM103V100-II開發(fā)板,所以就以其自帶的SD卡的結(jié)構(gòu)及讀寫方法進(jìn)行介紹,STM103V100-II評(píng)估板有SD連接器,其使用SPI總線與STM32處理器連接,如圖4.2所示圖4.2SD連接器與STM32處理器SPI連接圖4.3.2音頻解碼器模塊該系統(tǒng)使用STM32內(nèi)部接口SPl2與VSl003進(jìn)行通信,下面具體介紹其引腳連接以及使用情況。PA3:VSl003的中斷請(qǐng)求引腳。當(dāng)VSl003內(nèi)部數(shù)據(jù)已處理完畢,需要新的數(shù)據(jù)時(shí),將DREQ拉高。STM32根據(jù)這個(gè)信號(hào)來(lái)給VSl003發(fā)送新的數(shù)據(jù)流。PBl3:已連接到STM32內(nèi)部接口SPI2的時(shí)鐘(SCLK)信號(hào)線。PBl4:已連接到STM32內(nèi)部接口SPI2的主輸入從輸出(MISO)信號(hào)線。這里STM32是主設(shè)備,VSl003是從設(shè)備。數(shù)據(jù)流的傳輸方向是從VSl003傳輸給STM32。主要用于讀取VSl003的一些狀態(tài)和內(nèi)部寄存器值,比如寄存器測(cè)試返回的內(nèi)部寄存器的值。PBl5:已連接到STM32內(nèi)部接口SPl2的主輸出從輸入(MOSI)信號(hào)線。這里STM32是主設(shè)備,VSl003是從設(shè)備。數(shù)據(jù)流方向是從STM32傳輸給VSl003,主要傳輸給VSl003一些控制命令、MP3/WMA數(shù)據(jù)流等。PAl:低電平有效,如果拉低該引腳,那么通過(guò)SPI傳輸?shù)氖强刂菩盘?hào)??刂菩盘?hào)包括讀寫VSl003的內(nèi)部寄存器、對(duì)VSl003進(jìn)行初始化、設(shè)置左右聲道音量等。PA2:低電平有效,如果拉低該引腳,那么通過(guò)SPI傳輸?shù)氖菙?shù)據(jù)信號(hào)。比如在向VSl003傳輸MP3/WMA的數(shù)據(jù)流時(shí)需要拉低該引腳。PA0:低電平有效,拉低該引腳則硬件復(fù)位VSl003。本系統(tǒng)所設(shè)計(jì)的音頻解碼模塊的硬件電路圖如圖4.3所示圖4.3音頻解碼器驅(qū)動(dòng)電路圖4.3.3液晶顯示模塊LCD液晶顯示模塊主要完成數(shù)據(jù)顯示、輸出數(shù)據(jù)與顯示數(shù)據(jù)的同步等功能,可為使用者提供曲目信息。由3.3.4顯示模塊方案可知,前期為了簡(jiǎn)化電路的設(shè)計(jì),以及充分利用開發(fā)板資源,此次系統(tǒng)顯示模塊設(shè)計(jì)采用STM32V100開發(fā)板有自帶的LCD液晶屏,如果時(shí)間允許,我將對(duì)支持漢字液晶屏進(jìn)行研究以用于顯示歌詞,音量等。LCD液晶屏硬件電路如圖4.3所示圖4.4LCD1602硬件電路圖第五章軟件程序設(shè)計(jì)5.1系統(tǒng)軟件開發(fā)平臺(tái)STM32系列微控制器采用ARM公司最新的CortexM3內(nèi)核。Cortex-M3是ARM公司推出的最新的針對(duì)微控制器應(yīng)用的內(nèi)核,提供業(yè)界領(lǐng)先的高性能和低成本的解決方案,將成為MCU應(yīng)用的熱點(diǎn)和主流。但是目前能夠支持Cortex-M3架構(gòu)的開發(fā)工具很少,包括SDT、ADS1.2等開發(fā)工具都不支持。MDK是目前性價(jià)比最高的支持Cortex-M3處理器的開發(fā)工具。故本次設(shè)計(jì)的軟件平臺(tái)是建立在軟件MDKμVision3之上的。5.2程序?qū)崿F(xiàn)思想本系統(tǒng)的工作過(guò)程大致為:STM32通過(guò)SPIl從SD卡中讀取MP3/WMA文件,將所讀取的數(shù)據(jù)流通過(guò)SPl2發(fā)送到VSl003解碼中播放;PC機(jī)可通過(guò)USB總線讀寫SD卡的內(nèi)容,傳送MP3/WMA等文件;LCD顯示屏用于顯示MP3的文件名、播放狀態(tài)。五維搖桿左右搖動(dòng)控制播放上一首/下一首,上下?lián)u動(dòng)控制音量,按下則控制播放/暫停。5.3整體軟件系統(tǒng)流程圖有硬件系統(tǒng)可得軟件的系統(tǒng)流程圖:圖5.1軟件系統(tǒng)流程圖5.4各模塊軟件系統(tǒng)設(shè)計(jì)5.4.1SD卡讀寫模塊設(shè)計(jì)msd.c該文件用于提供SD卡的驅(qū)動(dòng),由ST公司所帶例程提供,本系統(tǒng)用到以下一些函數(shù)。 SPI_Config:配置與SD卡相連接的SPI1; MSD_Init:初始化SD卡通訊; MSD_WriteByte:向SD卡寫一個(gè)字節(jié); MSD_WriteByte:從SD卡讀一個(gè)字節(jié); MSD_GoIdleState:令SD卡處于空閑態(tài); Get_Medium_Characteristics:獲取SD卡的容量; MSD_SendCmd:向SD卡發(fā)命令; MSD_GetResponse:從SD卡獲取響應(yīng); MSD_ReadBlock:從SD卡讀取一塊數(shù)據(jù);5.4.2FAT16文件系統(tǒng)fat16.c該文件提供FAT16文件系統(tǒng)的支持,主要包含以下一些函數(shù): ReadMBR:讀取MBR數(shù)據(jù)結(jié)構(gòu); ReadBPB:讀取BPB數(shù)據(jù)結(jié)構(gòu); ReadFAT:讀取文件分配表指定項(xiàng); ReadBlock:讀取一個(gè)扇區(qū); FAT_Init:獲取FAT16文件系統(tǒng)基本信息; DirStartSec:獲取根目錄的開始扇區(qū)號(hào); DataStartSec:獲取數(shù)據(jù)區(qū)的開始扇區(qū)號(hào); ClusConvLBA:獲取一個(gè)簇的開始扇區(qū)號(hào); LBAConvClus:轉(zhuǎn)換扇區(qū)號(hào)與簇號(hào)之間的關(guān)系; LBAConvClus:計(jì)算可用空間,返回字節(jié)數(shù); GetFileName:獲取指定文件的首扇區(qū)號(hào); List_DateAndTime:獲取文件或目錄項(xiàng)的日期時(shí)間; SearchFoler:在指定范圍內(nèi)查找子目錄; List_AllDir_Long:列出指定范圍內(nèi)的目錄及目錄信息; FAT_FileOpen:打開指定文件; FAT_FileRead:讀取文件數(shù)據(jù);5.4.2MP3播放流程設(shè)計(jì)通過(guò)SPI1從SD卡中讀取聲波文件,將所讀取的部分存放在一個(gè)緩沖器中,利用TIMER2通道1定期產(chǎn)生的中斷,從緩沖器中讀取聲音數(shù)據(jù),然后根據(jù)聲音數(shù)據(jù)通過(guò)TIMER4的通道3產(chǎn)生不同頻率方波輸出。這里使用了兩個(gè)緩沖器,一個(gè)用于存放從SD卡讀到的聲音數(shù)據(jù),另一個(gè)用于將聲音數(shù)據(jù)輸出到PWM,兩個(gè)緩沖區(qū)的功能不斷交替,形成一個(gè)由2個(gè)緩沖區(qū)構(gòu)成的環(huán)形緩沖。播放聲波文件由PC機(jī)通過(guò)超級(jí)終端以命令的方式選擇,聲音的播放狀態(tài)也顯示在PC機(jī)超級(jí)終端上。具體流程如圖所示圖5.2MP3播放程序設(shè)計(jì)流程圖5.4.3液晶顯示設(shè)計(jì)液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表(2)是DM-1602的內(nèi)部顯示地址。比如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)具體流程圖如圖5.3所示圖5.3液晶顯示流程圖5.5程序設(shè)計(jì)結(jié)果由于SPIl讀取SD卡文件的速度遠(yuǎn)超過(guò)VSl003播放數(shù)據(jù)流的速度,因此VSl003在播放來(lái)自SPI2的數(shù)據(jù)流期間,SPIl能從SD卡中讀取下次播放所需的數(shù)據(jù),不會(huì)產(chǎn)生聲音不連續(xù)的情況。由于使用了2個(gè)SPI接口,相互之間無(wú)干擾,且提高了文件系統(tǒng)的效率,因此本系統(tǒng)得到了非常高品質(zhì)的音樂(lè)。
第六章測(cè)試和調(diào)試6.1運(yùn)行過(guò)程1)使用MDKuvision3通過(guò)ULINK2仿真器連接開發(fā)板,或使用2根USB電纜分別將CN1和CN5與PC機(jī)USB端口相連(使用板上自帶的ULINKMe)。2)使用串口線將開發(fā)板的串口COM0與PC機(jī)連接,在PC機(jī)上運(yùn)性windows自帶的超級(jí)終端串口通信程序(波特率115200、1位停止位、無(wú)校驗(yàn)位、無(wú)硬件流控制);3)程序目錄下的Simple_Wave_Player.Uv2工程,將其編譯連接后燒寫到STM32V100的板子中。4)將所要測(cè)試聲波文件TEST1.wav、TEST2.wav拷貝到SD卡中,并將SD卡插入板子的SD連接器中。5)重啟STM32V100開發(fā)板,在超級(jí)終端上將看到SD卡的信息以及提示符“X:>”,鍵入敵人命令然后回車列出SD卡上的所有文件和目錄。6)可以在超級(jí)終端中輸入“dir”、“cd”、“free”、“read”等命令,(注:read命令后跟文件名;讀出并輸出文件的文本內(nèi)容,可以正確顯示文本文件,如:以“txt”,“c”,“h”為后綴的文件),觀察運(yùn)行結(jié)果。7)在超級(jí)終端中輸入“playTEST1.wav”,通過(guò)開發(fā)板的揚(yáng)聲器或者耳機(jī)將能聽到音樂(lè)聲。6.3問(wèn)題分析6.3.1硬件方面重啟STM32v100開發(fā)板的時(shí)候,超級(jí)終端上不能顯示SD卡的相應(yīng)信息。造成這種現(xiàn)象的原因是由于存儲(chǔ)歌曲文件的SD卡格式不正確,SD卡要采用FAT文件格式。6.3.2軟件方面1)顯示曲目編號(hào)的時(shí)候LCD液晶顯示屏不能完全顯示相應(yīng)字符串。液晶顯示問(wèn)題,一般是顯示位置函數(shù)write_com(0x80+0x40+add)出錯(cuò)造成的,因?yàn)長(zhǎng)CD液晶一行可以顯示16個(gè)字節(jié),而后8個(gè)字節(jié)是不能顯示在屏上的,所以調(diào)節(jié)要顯示的位置值,就可以是完整的顯示在LCD液晶屏的兩行上。2)VS1003模塊能否正常工作的關(guān)鍵在于驅(qū)動(dòng)函數(shù)SPIPutChar()和SPIGetChar()函數(shù),它關(guān)系到中央處理器對(duì)驅(qū)動(dòng)模塊的控制與支配。unsignedcharSPIPutChar(unsignedcharoutb) { /*WriteandReadabyteonSPIinterface.*/ unsignedcharinb; /*WaitifTXEcleared,TxFIFOisfull.*/ while((SPI2->SR&TXE)==0); SPI2->DR=outb; /*WaitifRNEcleared,RxFIFOisempty.*/ while((SPI2->SR&RXNE)==0); inb=SPI2->DR; return(inb); } u8SPIGetChar(void) { u8Data=0; /*Waituntilthetransmitbufferisempty*/ while(SPI_GetFlagStatus(SPI2,SPI_FLAG_TXE)==RESET); /*Sendthebyte*/ SPI_SendData(SPI2,0xFF); /*Waituntiladataisreceived*/ while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); /*Getthereceiveddata*/ Data=SPI_ReceiveData(SPI2); /*Returntheshifteddata*/ returnData; }
第七章結(jié)論本系統(tǒng)實(shí)現(xiàn)了簡(jiǎn)易MP3Player的基本原型設(shè)計(jì),還可以進(jìn)一步利用英蓓特STM103V100-II評(píng)估板資源來(lái)完善和豐富該MP3Player的功能,例如利用Joystick來(lái)選擇歌曲、利用LCD來(lái)顯示歌曲名、利用ADC來(lái)調(diào)節(jié)音量、利用幾個(gè)LED燈來(lái)表示音量大小。如果能完成以上所有相關(guān)設(shè)計(jì),則可以基本熟悉STM32處理器的各種應(yīng)用開發(fā)。
結(jié)束語(yǔ)本文提出了一種基于STM32的MP3播放器設(shè)計(jì)方案,并使用ARM開發(fā)工具RealViewMDK實(shí)現(xiàn)了該方案的原型。盡管該方案無(wú)法作為一個(gè)通用MP3的方案,但是對(duì)于某些音頻需要的工業(yè)控制、汽車電子、醫(yī)療電子等方案具有一定的參考性。本系統(tǒng)也可以嘗試采用更有效的中斷方式,在內(nèi)存中設(shè)置一個(gè)環(huán)形的緩沖區(qū),SPI1從SD卡讀取的MP3文件數(shù)據(jù)存放在其中,當(dāng)VS1003需要數(shù)據(jù)時(shí)其DREQ引腳將產(chǎn)生低電平,利用其產(chǎn)生中斷,在中斷服務(wù)程序中從緩沖區(qū)讀取數(shù)據(jù)送VS1003,直至DREQ引腳恢復(fù)為高電平時(shí)退出中斷。限于時(shí)間與篇幅的問(wèn)題,我將不對(duì)上述情況予以實(shí)現(xiàn)。
參考文獻(xiàn)[1]李寧編著?;贛DK的STM32處理器開發(fā)應(yīng)用。北京航空航天大學(xué)出版社,2008年[2]馬忠梅,李善平,康慨,葉楠編著。ARM&Linux嵌入式系統(tǒng)教程。北京航天航空大學(xué)出版社,2004年[3]熊茂華,楊震倫編著。ARM9嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)應(yīng)用。清華大學(xué)出版社[4]賴曉晨、原旭、孫寧編著。嵌入式系統(tǒng)程序設(shè)計(jì)。清華大學(xué)出版社,2010年[5]康華光,陳大欽,張林編著。電子技術(shù)基礎(chǔ)。高等教育出版社,2006年[6]樊昌信,曹麗娜編著。通信原理。國(guó)防工業(yè)出版社,2008年6月[7]于學(xué)禹,郝梅等編著。Protel2004電路設(shè)計(jì)入門與應(yīng)用。機(jī)械工業(yè)出版社,2008年1月[8]張海兵,李敏編著。Protel電路設(shè)計(jì)實(shí)例與分析[M].北京。人民郵電出版社,2005
致謝本次畢業(yè)設(shè)計(jì)歷時(shí)4個(gè)月,至此暫告一段落。通過(guò)這次畢業(yè)設(shè)計(jì),使我深刻地認(rèn)識(shí)到學(xué)好專業(yè)知識(shí)的重要性,也理解了理論聯(lián)系實(shí)際的含義,并且檢驗(yàn)了大學(xué)四年的學(xué)習(xí)成果。它是我這四年來(lái)所學(xué)知識(shí)的綜合運(yùn)用和經(jīng)驗(yàn)的總結(jié),通過(guò)此次設(shè)計(jì)也鍛煉了我個(gè)人的各方面能力,包括編程、動(dòng)手以及溝通能力,所學(xué)知識(shí)更得到了升華。為以后在工作崗位上發(fā)揮自己的才能奠定了堅(jiān)實(shí)的基礎(chǔ)。借此機(jī)會(huì),我首先要感謝我的指導(dǎo)教員嚴(yán)副教授,因?yàn)閺倪x題到撰寫到結(jié)稿,期間總是會(huì)離不開他的細(xì)心指導(dǎo)和不懈支持,他不僅向我傳授知識(shí),答疑解惑,還給予我很多方面的支持。他嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和熱忱的工作作風(fēng)令我十分欽佩,他的指導(dǎo)使我受益非淺。在此謹(jǐn)向嚴(yán)迎建教員致以誠(chéng)摯的謝意和崇高的敬意!同時(shí)感謝葉建森教員,他在硬件方面的指導(dǎo),使我的設(shè)計(jì)更快的得以完成。在此還要感謝304教研室的全體教員以及其他同學(xué)對(duì)我的關(guān)心和幫助,更感謝母校四年來(lái)對(duì)我的培養(yǎng)和教育,希望母校更加輝煌,永遠(yuǎn)年輕。
附錄附錄一主函數(shù)main.c/*Includes*/#include"stm32f10x_lib.h"#include"hw_config.h"#include"config.h"#include"fat16.h"#include"msd.h"#include"vs1003.h"/*Globaldefine*/u8Stream_Buff[buffsize];u8 readNextBytes;u32mp3data_pointer;/*Externdeclare*/externvoidSetupUART1(void);externvoidSetupClock(void);externvoidSpeaker_Timer_Config(void);externvoidGet_Medium_Characteristics(void);externvoidVS1003_Config(void);externvoidMp3Reset(void);externvoidSPI_Config(u16BaudRatePrescaler);externvoidDelay(int);externu32Mass_Block_Count;externu32Mass_Block_Size;externu32Mass_Memory_Size;/********************************************************************************FunctionName:USART_Scanf_Name*Description:GetsCharvaluesfromthehyperterminal.*Input:None*Output:None*Return:Length*******************************************************************************/u8USART_Scanf_Name(u8*str){ u8index=0;while(1){/*LoopuntilRXNE=1*/while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET){}str[index++]=(USART_ReceiveData(USART1)); printf("%c",str[index-1]); if(str[index-1]==13) { index--; returnindex;}} }/********************************************************************************FunctionName:USART_Scanf_Cmd*Description:GetsCharvaluesfromthehyperterminal.*Input:None*Output:None*Return:Length*******************************************************************************/u8USART_Scanf_Cmd(u8*str){ u8index=0;while(1){/*LoopuntilRXNE=1*/while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET){}str[index++]=(USART_ReceiveData(USART1)); printf("%c",str[index-1]); if(str[index-1]==13||str[index-1]==32) { index--; returnindex;}}}/********************************************************************************FunctionName:Equal*Description:ComparethestringAandB*Input:A--onestring,B--anohterstring,SizeB--thesizeofstring*Output:None*Return:1--Equal0--NotEqual*******************************************************************************/u8Equal(void*A,void*B,u8SizeA,u8SizeB){ u8i,*a=A,*b=B; if(SizeA!=SizeB)return0; for(i=0;i<SizeA;i++) if(a[i]!=b[i]) return0; return1;}/********************************************************************************FunctionName:PrintPass*Description:Printthepass*Input:pass--thepassstring*Output:None*Return:None*******************************************************************************/voidPrintPass(u8*pass){ printf("\r\nX:"); while(*pass!='\0') printf("%c",*(pass++)); printf(">");}/********************************************************************************FunctionName:Sleep*Description:delay.*Input:delaytime.*Output:None*Return:None*******************************************************************************/voidSleep(u32cpt_loop){cpt_loop=cpt_loop*10000;while(cpt_loop--!=0);}/********************************************************************************FunctionName:main.*Description:Mainroutine.*Input:None.*Output:None.*Return:None.*******************************************************************************/intmain(void){ u8ret=1; staticu32currSec; //currSec記錄當(dāng)前目錄所在的首扇區(qū),fileSec記錄打開文件首扇區(qū)u32temp,fileoffset; u8pass[512]; //記錄路徑 u8foldername[128]; //文件或目錄名u8command[6]; //記錄命令 u8len1,len2; u32tmp; s16index; u32i; SetupClock(); SetupUART1(); VS1003_Config();ret=MSD_Init();printf("\r\nMSD_Initresult:%d",ret); Get_Medium_Characteristics(); printf("\r\nMsdBlockCount:%d",Mass_Block_Count); printf("\r\nMsdBlockSize:%dByte",Mass_Block_Size); printf("\r\nMsdMemorySize:%dMB\r\n",Mass_Memory_Size/1024/1024); FAT_Init(); currSec=DirStartSec(); //找到根目錄的開始扇區(qū)號(hào) pass[0]='\\'; pass[1]='\0';index=0; while(1) { PrintPass(pass); len1=USART_Scanf_Cmd(command); if(Equal(command,"dir",len1,3)) //列出目錄中所有項(xiàng) { printf("\r\n\r\n"); SPI_Config(SPI_BaudRatePrescaler_2); List_AllDir_Long(currSec); }elseif(Equal(command,"cd",len1,2)) //更改路徑 {len2=USART_Scanf_Name(foldername); temp=SearchFoler(currSec,foldername,len2,1); if(temp) { currSec=temp; if(Equal(foldername,"..",len2,2)) //上級(jí)目錄,修改路徑 { if(index>0) { while(pass[--index]!='\\'); pass[index+1]='\0'; } } elseif(Equal(foldername,".",len2,1)); //當(dāng)前目錄,路徑保持不變 else //子目錄,修改路徑 { for(tmp=0;tmp<len2;tmp++) //記錄路徑 pass[++index]=foldername[tmp]; pass[++index]='\\'; pass[index+1]='\0'; } } }elseif( Equal(command,"read",len1,4)) //以文本文件的方式打開文件 {len2=USART_Scanf_Name(foldername); temp=SearchFoler(currSec,foldername,len2,0);//查找文件,并返回長(zhǎng)度 if(temp) //找到文件 { printf("\r\n"); //輸出文件內(nèi)容 for(fileoffset=0;fileoffset<temp/buffsize;fileoffset++)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度農(nóng)貿(mào)場(chǎng)農(nóng)產(chǎn)品溯源系統(tǒng)開發(fā)合同3篇
- 2025版無(wú)人駕駛車輛測(cè)試場(chǎng)租賃合同范本4篇
- 二零二五版智慧家居系統(tǒng)定制開發(fā)合同范本及智能家居生態(tài)圈構(gòu)建4篇
- 二零二五年度旅游度假區(qū)內(nèi)部控制制度咨詢與旅游服務(wù)提升合同4篇
- 2025年綠色環(huán)保服裝定制生產(chǎn)合同范本3篇
- 二零二五年度體育賽事組織與管理聘用合同
- 2025年度泥工班組勞務(wù)承包施工合同范本
- 二零二五年度房地產(chǎn)代持權(quán)證登記合同范本4篇
- 2025年度個(gè)人知識(shí)產(chǎn)權(quán)許可欠款合同模板3篇
- 2025版門窗行業(yè)綠色制造與安裝合同4篇
- 二零二五隱名股東合作協(xié)議書及公司股權(quán)代持及回購(gòu)協(xié)議
- 四川省成都市武侯區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末考試化學(xué)試題
- 教育部《中小學(xué)校園食品安全和膳食經(jīng)費(fèi)管理工作指引》知識(shí)培訓(xùn)
- 初一到初三英語(yǔ)單詞表2182個(gè)帶音標(biāo)打印版
- 2024年秋季人教版七年級(jí)上冊(cè)生物全冊(cè)教學(xué)課件(2024年秋季新版教材)
- 環(huán)境衛(wèi)生學(xué)及消毒滅菌效果監(jiān)測(cè)
- 2023年11月英語(yǔ)二級(jí)筆譯真題及答案(筆譯實(shí)務(wù))
- 元明時(shí)期左江上思州黃姓土司問(wèn)題研究
- 圍手術(shù)期應(yīng)急預(yù)案
- 中玻北方新材料有限責(zé)任公司太陽(yáng)能光伏玻璃及l(fā)ow-e節(jié)能玻璃深加工項(xiàng)目申請(qǐng)立項(xiàng)環(huán)境影響評(píng)估報(bào)告書簡(jiǎn)本
- 【橡膠工藝】-橡膠履帶規(guī)格
評(píng)論
0/150
提交評(píng)論