邵陽學(xué)院信息工程系 瞿 兵 陽 泳 胡湘娟
基于嵌入式的音樂播放器設(shè)計與論述
邵陽學(xué)院信息工程系 瞿 兵 陽 泳 胡湘娟
隨著電子行業(yè)的不斷發(fā)展,人們對于消費電子類產(chǎn)品的需求量不斷的增大,而根據(jù)消費者的需求所設(shè)計的多功能MP3也越來越多。本文使用STM32F103VET6單片機作為系統(tǒng)微控制器、SD卡作為存儲介質(zhì)、VS1003作為音頻解碼芯片以及TFT彩晶屏作為人際交互設(shè)備,設(shè)計一款可播放mp3、wav文件格式的音樂播放器,以實現(xiàn)一個簡單的音樂播放器。
STM32F103VET6;SD卡;VS1053解碼芯片;TFT彩屏;音樂播放器
MP3播放器的誕生,為傳統(tǒng)隨身聽帶來了致命打擊。MP3發(fā)展初期,MP3和MD之間的斗爭成為業(yè)界最熱門的話題,當(dāng)時甚至多數(shù)人都認為MP3由于音質(zhì)上的問題將會敗于MD,但事實上MP3的發(fā)展遠遠超出了MD支持者們的預(yù)想,直至今日MP3已成為隨身聽市場的主流產(chǎn)品。此外隨著電子技術(shù)的不斷發(fā)展,MP3的功能也在不斷的增多,成為了繼手機之后使用最為廣泛的隨身電子產(chǎn)品,本次便是利用STM32單片機設(shè)計一個簡單的音樂播放器。
整個音樂播放器系統(tǒng)主要由微控制器、音頻解碼部分、音效處理部分、SD卡部分、人機交互部分、按鍵復(fù)位部分、電源部分、程序口下載部分組成,整個系統(tǒng)由MCU控制,各個部分協(xié)調(diào)運作。
VS1053相對于VS1003,增加了編解碼格式的支持(比如支持OGG/FLAC,還支持OGG編碼,VS1003不支持)、增加了GPIO數(shù)量到8個(VS1003只有4個)、增加了內(nèi)部指令RAM容量到16KiB(VS1003只有5.5KiB)、增加了I2S接口(VS1003沒有)、支持EarSpeaker空間效果(VS1003不支持)等。同時VS1053的DAC相對于VS1003有不少提高,同樣的歌曲,用VS1053播放,音質(zhì)效果比1003效果好很多。
此系統(tǒng)要求對MP3、WAV、WMA格式的音頻文件進行解碼,尤其是對于MP3格式的音頻文件處理要求處理要非??欤瑢崿F(xiàn)流暢播放,考慮到8位單片機處理速度,所以使用的32位單片機,而音頻解碼芯片是使用VS1053芯片,這是VLSI公司出品的一款高性能解碼芯片,支持多種音頻格式的解碼。而SD卡儲存歌曲文件,TFT彩屏顯示當(dāng)前的播放情況。本系統(tǒng)是上電開機的,開機之后會格式化各種外設(shè),然后檢查是否中文字庫,如果沒有問題,將會開始循環(huán)播放SD卡中的所有歌曲文件,而在TFT彩屏上顯示歌曲的信息,例如歌曲名字、播放時間、總時間等等,設(shè)置的四個外面按鍵分別為上、下曲和音量加、減,而兩個指示燈則分別指示程序運行狀態(tài)和VS1053的初始化情況。
本次系統(tǒng)的硬件電路主要是以下幾個模塊:STM32F103VET6主控模,STM32F103VET6的最小系統(tǒng)板電路,主要用于驅(qū)動STM32F103VET6單片機的運行,同時將STM32F103VET6所有IO引腳引出來,開發(fā)人員使用杜邦線與模塊引腳連接進行設(shè)計。
LCD彩屏模塊:用于顯示音樂播放器播放信息的,LCD驅(qū)動電路太復(fù)雜,本次設(shè)計則是LCD模塊,驅(qū)動電路已經(jīng)做好直接通過IO引腳驅(qū)動使用即可。SD卡模塊與LCD模塊是設(shè)計在一起的,直接通過軟件驅(qū)動SDIO控制即可。
VS1503的解碼芯片模塊:驅(qū)動正常VS1503的驅(qū)動電路之外,其數(shù)據(jù)引腳直接與STM32F103VET6單片機的SPI總線連接完成數(shù)據(jù)傳輸控制,VS1503有兩種工作模式:有效模式與兼容模式,我們這是使用VS1503的有效模式,通過SPI總線完成數(shù)據(jù)的讀取與發(fā)送,對于驅(qū)動VS1503的步驟為復(fù)位VS1503,配置VS1503寄存器和發(fā)送音頻數(shù)據(jù)三步。
HT6802驅(qū)動模塊:音樂播放器喇叭的驅(qū)動電路將喇叭接在SP+、SP-上,音頻數(shù)據(jù)從SPK_IN端輸入,而SPK_CTRL則是控制HT6872的工作模式,即控制喇叭餓開關(guān)。當(dāng)SPK_CTRL引腳為高電平時喇叭進入工作模式,而引腳為低電平時,喇叭則是關(guān)斷模式的。
軟件系統(tǒng)代碼主要為STM32F103VET6的IO配置、VS1503驅(qū)動代碼,HT6802驅(qū)動代碼以及LCD驅(qū)動代碼,STM32F103VET6的IO配置主要是用于指示燈、按鍵控制,將IO引腳配置成推挽輸出模式;而LCD驅(qū)動代碼則是使用屏幕廠家提高的驅(qū)動代碼即可;VS1503的驅(qū)動代碼則是通過VS1503數(shù)據(jù)手冊來編寫,分為軟件復(fù)位函數(shù)、寫命令函數(shù)、讀寄存器函數(shù)等幾個模塊;HT6802驅(qū)動主要是編寫控制喇叭工作的函數(shù)。系統(tǒng)運行函數(shù)則是在主函數(shù)中實現(xiàn),控制系統(tǒng)運行流程以及LCD的顯示內(nèi)容數(shù)據(jù)信息。
為了保證系統(tǒng)運行,開機之后首先要進行系統(tǒng)測試,因為系統(tǒng)要顯示歌曲信息,所以需要檢測flash中是否存在字庫,不存在字庫的話彩屏將會顯示亂碼,然后執(zhí)行VS1053的RAM測試和正弦測試,調(diào)用音樂播發(fā)函數(shù)開始播放SD卡里面的音樂。
此實驗的核心函數(shù)MP3解碼函數(shù),該函數(shù)在初始化VS1053后,根據(jù)文件格式選擇是否加載patch(如果是flac格式,則需要加載patch),最后在死循環(huán)里面等待檢測信號的到來,每次軟復(fù)位信號變高,就向VS1053發(fā)送32個字節(jié),直到整個文件讀完。此段代碼還包含了對按鍵的處理(音量調(diào)節(jié)、上一首、下一首)及當(dāng)前播放的歌曲的一些狀態(tài)(碼率、播放時間、總時間)顯示,以便在主函數(shù)中直接調(diào)用。
上電開機之后,系統(tǒng)自動運行到音樂播放器模式,播放音樂,LCD彩屏上顯示相關(guān)音樂播放器信息,例如SD卡中的總共5首歌曲,歌曲名、播放時間、總時長、碼率、音量等信息等。此時LED0會隨著音樂的播放而閃爍,2秒閃爍一次。此時我們便可以聽到喇叭播放出來的音樂了,同時我們可以通過按上、下曲按鍵來切換下一曲和上一曲,通過音量加、減按鍵來控制音量大小。
在LCD屏幕可以顯示音樂播放器的基本信息等,所以證明此次的設(shè)計基本上完成。但是個人感覺如果能夠在屏幕上顯示歌曲字幕的話,音樂播放器所起到效果將會更好。此次設(shè)計的音樂播放器已經(jīng)能夠基本實現(xiàn)其效果,但是還可以繼續(xù)研究,將音樂播放器設(shè)計制作更完美。
[1]郭天祥.單片機C語言教程[M].電子工業(yè)出版社,2009.
[2]張建中.基于STM32F的MP3播放器設(shè)計[D].閩江:閩江學(xué)院,2011-05-10.
[3]郁峰.基于嵌入式文件系統(tǒng)的MP3播放器的設(shè)計和實現(xiàn)[D].蘇州:蘇州大學(xué),2009.
[4]李彬.基于應(yīng)用程序的嵌入式 Linux內(nèi)核自動裁剪[D].東南大學(xué):計算機應(yīng)用專業(yè),2006.
瞿兵(1991—),男,湖南吉首人,土家族,大學(xué)本科在讀,研究方向:通信工程。
陽泳(1994—),男,湖南邵陽人 ,瑤族,大學(xué)本科在讀,研究方向:電子信息工程。
胡湘娟(1980—),女,湖南湘潭人,講師,研究方向:嵌入式系統(tǒng)。