山東科技大學 張學慧 朱愛珍
MP3是一種高質量音樂壓縮標準,采用MP3壓縮的數據量可以縮小到1/12,音質卻沒有多少損失。由于MP3音樂的較小數據量和高質量的播放效果,使它很快成為一種集音頻播放、數據存儲為一身的數碼產品,并深受人們的喜愛。本文設計的MP3是基于ARM公司最新Cortex-M3內核的STM32控制器,利用該處理器內置的SPI接口對SD存儲卡進行控制,并對MP3音頻文件進行解碼實現MP3的播放。系統實現的功能:播放VS1003支持的MP3、WMA等音頻文件,且具有歌詞同步功能;控制播放上一首/下一首,音量增減;通過LCD顯示音量圖標和播放狀態等。
系統采用STM32為主控制器有不可或缺的優勢,STM32系列是意法半導體基于專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARM Cortex-M3內核。時鐘頻率72MHz,功耗36mA,是32位市場上性價比最高的產品。系統主要由控制模塊、電源模塊、音頻解碼模塊、SD卡模塊、人機交互模塊組成。其結構框圖如圖1所示。
系統的工作流程:STM32處理器讀取SD存儲卡里的MP3音樂文件數據,通過SPI傳輸至音頻解碼芯片經過解碼轉換,再送至耳機聽筒。SPI總線控制音頻DAC芯片的參數實現音量控制等功能。使用人機交互設備實現播放/暫停、上一曲/下一曲等控制功能和顯示播放狀態。

圖1 系統結構框圖
系統的硬件設計包含控制器及各模塊芯片的選型和相關電路的設計。
STM32系列32位微控制器基于Cortex-M3內核,旨在為MCU用戶提供新的開發自由度。它具有高性能、低功耗、低電壓等特性,同時還具有高集成度和易于開發的特點,使該系列產品成為小型項目和作為完整平臺的理想選擇[2]。STM32的使用需要一個最小系統,包括晶振電路,復位電路。
1)晶振電路的設計:晶振電路用于向處理器提供工作時鐘。本系統使用無源晶振X1作為系統的主振蕩器,一個32.768kHz的晶振作為內置實時時鐘(RTC)振蕩器[3]。晶體振蕩器的連接如圖2所示。
晶振的負載電容應當按照要求選取,電容不正確可能導致晶振起振緩慢甚至不起振,這將影響整個系統的穩定性。
2)復位電路的設計:采用簡單的“RC+按鍵”復位形式,該復位電路可以實現上電自動復位和手動按鍵復位[3]。上電自動復位是通過外部復位電路的電容充電來實現的,按鍵復位是通過復位端經電阻與電源VCC接通而實現的。
系統中硬件電路的輸入電源需要5V、3.3V和2.5V。對于5V電源輸入,本著設計簡單、有效的原則采用USB供電,而且還可以通過USB線直接對SD的文件進行操作,實現即插即用。
對于3.3V和2.5V電源輸入,這些電源要求的功率都不大,可以采用B1117-2.5和B1117-3.3穩壓芯片來提供。3.3V的電源輸入如圖3所示,2.2V電源輸入與之類似。

圖2 晶振電路

圖3 3.3V電源輸入
由于使用了ARM處理器,MP3的解碼方法有兩種,一是通過ARM處理器軟解碼,通過對MP3數據格式的解析實現MP3播放。二是通過外部解碼芯片解碼。前者對處理器運算要求高,在解碼高碼率的MP3時,STM32的處理能力不足,得不到好的解碼效果,而且STM32解碼之后還需要外部的DAC來做音頻輸出,所以采用后者。
MP3解碼芯片選擇的是由芬蘭VLSI公司出品的一款單芯片MP3/WMA音頻解碼芯片VS1003,其擁有一個高性能低功耗的DSP處理器核,5K的指令ROM,0.5K的數據RAM,串行控制和數據輸入接口,同時片內帶有一個可變采樣速率的ADC、一個立體聲DAC以及音頻耳機放大器接口,還可以調節音量高低。其電路設計及與主控制器的連接如圖4所示。
VS1003與處理器的數據通信是通過SPI總線方式進行的。VS1003主要通過串行命令接口(SCI)和串行數據接口(SDI)來接收STM32控制器的控制命令和MP3的數據。通過XCS、XDCS引腳的置高、置低來確認是哪一個接口處于傳送狀態。對VS1003芯片的功能控制,如初始化、暫停、音量控制的讀取等,均是通過SCI寫入到特定寄存器來實現的。

圖4 音頻解碼電路

圖6 人機交互設備電路
SD卡在日常生活與工作中使用非常廣泛,已經成為最為通用的數據存儲卡。在MP3、數碼相機等設備上也都采用SD卡作為存儲設備。SD卡之所以得到如此廣泛的使用,是因為它價格低廉、存儲容量大、安全性強等優點。SD卡支持兩種總線方式:SD方式與SPI方式。其中SD方式采用6線制,而SPI方式采用4線制,使用單片機對SD卡進行讀寫時一般都采用SPI模式。因此設計中使用STM32內部接口SPI1與SD卡進行通信[4],圖5是其引腳連接情況。
人機交互設備包括輸入設備和輸出設備,對于輸出設備,采用彩色液晶屏,這里選擇一款2.8寸的TFT液晶屏ILI9341,其分辨率為320*240,工作模式為8位數據模式,與MCU的通訊所需IO口較少,速度也較快。輸入設備為了使控制方便,人性化,采用觸摸屏實現。觸摸屏的控制芯片選擇由TI公司生產的12位四線觸摸屏控制芯片ADS7843,因為該芯片的精度是12Bit,有很高的分辨率,有利于屏幕控制精度的提高。LCD與主控制器是SPI接口方式。其電路設計如圖6所示。
Cortex-M3是ARM公司推出的最新的針對控制器應用的內核,提供業內領先的高性能和低成本的解決方案。但目前能夠支持Cortex-M3架構的開發工具很少,而MDK是ARM公司推出目前性價比最高的支持Cortex-M3處理器的開發工具。故本次設計的軟件平臺是建立在MDKμVision3之上的[5]。
1)FAT文件系統:MP3播放器支持FAT文件系統,以便識別出SD卡上的音樂文件,需要文件系統存儲數據的原理,協議,格式等。根據對文件系統的掌握,通過跑在RTX實時操作系統上的MP3驅動程序和應用程序,將存儲在SD卡上MP3數據文件讀取出來,并進行正常的播放。
2)GUI圖形用戶界面:系統中的MP3界面是基于GUI圖形界面,采用圖形方式顯示MP3操作用戶界面在視覺上更易于接受??梢酝ㄟ^窗體、菜單、按鍵等方式來方便的進行操作。
從整個系統來說,按其與硬件是否直接相關,可以把軟件分為兩大部分:
(1)與硬件相關的底層驅動軟件子系統,包括LCD驅動模塊、觸摸屏驅動模塊、SD卡驅動模塊、VS1003驅動模塊。

圖5 SD卡連接

圖7 程序設計流程圖
(2)與硬件無關的應用軟件子系統,包括FAT文件系統管理模塊和音樂播放模塊。主程序的設計流程如圖7所示。
系統啟動后,先初始化STM32處理器,再初始化各硬件模塊,完成底層驅動。由MCU通過FAT文件系統接口讀取SD卡的一些基本信息,如容量、FAT表及根目錄所在的啟始扇區等。通過獲得這些信息,就可以找出SD卡是否有我們可以播放的音樂文件。若有音樂文件,處理器將通過SPI總線方式讀出該文件的音頻信息,并將歌曲的數據流信息送入到解碼芯片中,通過VS1003芯片解碼以及其內含的高質量的立體DAC和耳機驅動電路,實現MP3歌曲的播放。在觸摸屏的控制下,通過LCD中菜單選項實現歌曲選擇和音量控制。
本文提出了一種基于STM32的嵌入式MP3播放器的設計方案,硬件上重點介紹了各模塊的電路設計,軟件上介紹了需要的嵌入式知識和主程序的流程。該方案對于需要嵌入式媒體播放器的工業控制、車載播放器等行業具有一定的研究價值。方案設計中涉及到很多內容,包括芯片的選型與設計,實時操作系統移植,FAT文件管理系統,GUI圖形用戶界面,對嵌入式的設計具有一定的參考性。整個系統設計簡潔,可靠性高,具有很高的性價比。
[1]程磊.基于STM32的MP3播放器的設計[J].技術創新,2011(12).
[2]王永虹,徐煒,郝立平等.STM32系列ARM Cortex-M3微控制器原理與實踐[M].北京航空航天大學出版社,2008.
[3]江力,蔡駿等.單片機原理與應用技術[M].清華大學出版社,2006.
[4]潘浩.嵌入式MP3播放系統研究[D].北方工業大學,2008.
[5]李寧.基于MDK的STM32處理器開發應用[M].北京航空航天大學出版社,2008.