基于STM32單片機(jī)的多功能媒體播放器設(shè)計(jì)
張志偉
(陜西理工學(xué)院 物理與電信工程學(xué)院, 陜西 漢中 723000)
[摘要]采用STM32F103VCT6單片機(jī)為核心器件設(shè)計(jì)多功能媒體播放器。系統(tǒng)硬件電路由單片機(jī)、TFT觸摸彩屏、溫度傳感器、EEPROM芯片、Flash芯片、音頻解碼芯片和SD卡模塊等構(gòu)成,系統(tǒng)軟件在Keil MDK設(shè)計(jì)平臺上編譯,由TFT液晶顯示驅(qū)動程序、ADS7846觸控驅(qū)動程序、VS1003音頻解碼器驅(qū)動程序、SD卡讀取驅(qū)動程序、音樂播放功能程序和其它相關(guān)功能程序構(gòu)成。實(shí)驗(yàn)結(jié)果表明:媒體播放器可以實(shí)現(xiàn)MP3音樂播放和曲目歌詞頻譜信息彩屏顯示,且具有時鐘溫度顯示、電子書、圖片瀏覽和畫板等多種功能。
[關(guān)鍵詞]單片機(jī);觸摸屏;SD卡;多功能;播放器
[文章編號]1673-2944(2015)04-0012-05
[中圖分類號]TN912.202
收稿日期:2014-09-24
基金項(xiàng)目:陜西省教育廳科學(xué)研究計(jì)劃項(xiàng)目(14JK1143);陜西理工學(xué)院科研基金資助項(xiàng)目(SLGKY14-06)
作者簡介:張志偉(1977—),男,湖南省邵陽市人,陜西理工學(xué)院副教授,碩士,主要研究方向?yàn)樾盘柗治龊碗娮蛹夹g(shù)應(yīng)用。
基于單片機(jī)或者嵌入式芯片的傳統(tǒng)音樂播放器能夠播放多種格式的音樂文件,已經(jīng)廣泛應(yīng)用于人們的日產(chǎn)生活。其具有技術(shù)成熟、性價(jià)比高的特點(diǎn),但也存在功能簡單、硬件利用率低的缺陷[1-2]。為增強(qiáng)音樂播放器的娛樂效果、豐富音樂播放器的應(yīng)用功能,采用STM32F103VCT6單片機(jī)、TFT觸摸彩屏和音頻解碼器相結(jié)合進(jìn)行方案設(shè)計(jì),利用STM32單片機(jī)豐富的外設(shè)資源提高硬件電路的利用率,使用TFT觸摸彩屏顯示操作界面使得播放器的控制更加智能化、人性化,通過編程設(shè)計(jì)方便實(shí)現(xiàn)圖片瀏覽﹑電子書、時鐘顯示等多種功能擴(kuò)展。
1系統(tǒng)組成
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
系統(tǒng)總體設(shè)計(jì)由STM32單片機(jī)最小系統(tǒng)、SD卡模塊、TFT觸摸屏模塊、音頻解碼模塊、EEPROM、外擴(kuò)Flash、溫度傳感器等組成,系統(tǒng)功能選擇通過操作觸摸屏菜單界面實(shí)現(xiàn)。音樂播放的基本設(shè)計(jì)流程為STM32F103VCT6單片機(jī)采用FAT文件系統(tǒng)方式讀取SD卡中的MP3文件,控制音頻解碼芯片對MP3文件進(jìn)行解碼播放,同時在TFT液晶屏上顯示播放信息。系統(tǒng)總體結(jié)構(gòu)框圖如圖1所示。
2系統(tǒng)硬件設(shè)計(jì)
2.1STM32單片機(jī)
單片機(jī)采用意法半導(dǎo)體公司出產(chǎn)的基于ARM Cortex-M3內(nèi)核的STM32F103VCT6芯片,芯片上集成豐富的資源,工作頻率最高達(dá)72 MHz,是一款性價(jià)比很高的32位控制器,是低成本ARM嵌入式應(yīng)用的極佳選擇[3-4]。
2.2VS1003音頻解碼器
VS1003是由荷蘭VLSI公司出品的一款MP3/WMA/MIDI音頻解碼和ADPCM編碼器芯片,內(nèi)建一個高性能DSP處理器核VS_DSP4,5 KB的指令RAM和0.5 KB的數(shù)據(jù)RAM。其通過SPI控制和傳輸數(shù)據(jù),具有4個I/O口和1個UART,一個高品質(zhì)可變采樣率的ADC和18位的立體聲DAC以及音頻耳機(jī)放大器[5]。
VS1003與STM32之間通過SPI接口通信,STM32通過SPI接口向VS1003輸入音頻數(shù)據(jù),VS1003進(jìn)行解碼后從輸出通道輸出音樂信號。VS1003與主控芯片連接有7根線,它們分別是:VS_XCS、VS_XDCS、VS_DREQ、VS_RST、SPI_SCK、SPI_MISO、SPI_MOSI,對應(yīng)連接到STM32F103VCT6單片機(jī)的PC0—PC3及PA5—PA7。其中VS_RST是VS1003的復(fù)位信號線,低電平有效。VS_DREQ是數(shù)據(jù)請求信號,用來通知主機(jī)VS1003是否可以接收數(shù)據(jù)。SPI_MISO、SPI_MOSI、SPI_SCK則是VS1003的SPI接口,他們在VS_XCS和VS_XDCS選通信號下執(zhí)行不同的操作。
2.3TFT觸摸屏
觸摸彩屏選用2.8英寸TFT-LCD屏,可顯26萬色,分辨率320×240,主控芯片為ILI9320。由于Cortex-M3內(nèi)核微控制器都不帶有專門的LCD控制器,觸摸控制芯片采用TI公司的ADS7846觸摸屏控制器。點(diǎn)擊觸摸彩屏后得到模擬電壓值,通過ADS7846將該值轉(zhuǎn)換成坐標(biāo),LCD采用16位8080并行接口模式配合專用芯片ADS7846進(jìn)行操作[6-7]。帶觸摸功能的TFT液晶顯示模塊電路中,DB0—DB15為顯示驅(qū)動ILI9320的液晶16位數(shù)據(jù)端口,對應(yīng)連接到STM32F103VCT6單片機(jī)的PD0—D15接口;液晶控制端口(片選端口LCD_CS、復(fù)位端口LCD_RST、數(shù)據(jù)控制端口LCD_RS、讀端口LCD_RD、寫端口LCD_WR)對應(yīng)連接到STM32F103VCT6單片機(jī)的PB11—PB15接口;背光控制接口BL_CTR經(jīng)1 kΩ電阻接三極管基極,LEDK1、LEDK2、LEDK3、LEDK4經(jīng)1 kΩ電阻接三極管集電極,三極管發(fā)射極接地,采用外接三極管用來控制TFT背光[8]。
2.4SD卡
SD卡的工作電壓為3.3 V,初始化SD卡的時候,時鐘頻率最大不能超過400 kHz[9]。SD卡允許在兩種模式下工作,即SD模式和SPI模式,本次設(shè)計(jì)采用SPI模式。啟用SD卡進(jìn)入SPI模式,在SD卡收到復(fù)位命令(CMD0)時,需要將CS端口設(shè)置為低電平。在SPI模式下,SD卡的1針腳作為CS端口連接到STM32F103VCT6單片機(jī)的PA3接口,2、5、7針腳分別作為MOSI、MISO、CLK端口連接到STM32F103VCT6單片機(jī)的PA5—PA7,為提高單片機(jī)SPI接口的驅(qū)動能力,接口電路連接時增加了47 kΩ的上拉電阻。
3系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)使用Keil MDK軟件設(shè)計(jì)平臺,采用C語言開發(fā)[10]。Keil MDK軟件為ARM7、ARM9處理器設(shè)備提供了一個完整的開發(fā)環(huán)境,軟件的編寫采用模塊化的設(shè)計(jì)思想,將整個軟件部分逐步劃分為子系統(tǒng),再將子系統(tǒng)細(xì)化為各個功能模塊來實(shí)現(xiàn),最后再將所有的模塊程序融合成一個大系統(tǒng)實(shí)現(xiàn)預(yù)期的全部功能。
圖2 系統(tǒng)軟件總流程圖
3.1軟件總體流程
系統(tǒng)上電后進(jìn)行CPU時鐘初始化、I/O口和相關(guān)外設(shè)初始化,自檢,用于識別是否存在硬件問題。然后初始化FAT文件系統(tǒng),加載字庫和系統(tǒng)文件,完成后進(jìn)入功能選擇菜單,通過觸控操作來選擇進(jìn)入不同功能[11]。系統(tǒng)軟件設(shè)計(jì)的總體流程如圖2所示。
3.2TFT液晶顯示驅(qū)動程序設(shè)計(jì)
TFT使用的顯示驅(qū)動芯片為ILI9320,數(shù)據(jù)的讀寫方式設(shè)置為16位數(shù)據(jù)模式,要完成TFT的顯示功能主要是寫顯示緩存GRAM和寫寄存器。寫顯示緩存需要按照16位數(shù)據(jù)映射圖采用565模式讀寫數(shù)據(jù),寫寄存器操作是實(shí)現(xiàn)TFT顯示的關(guān)鍵,先寫入寄存器地址,再寫入對應(yīng)的操作數(shù)據(jù),即完成了一次相關(guān)命令操作。相關(guān)函數(shù)名稱如下:
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue); //寫寄存器
u16 LCD_ReadReg(u8 LCD_Reg); //讀寄存器
void LCD_WriteRAM_Prepare(void); //開始寫GRAM
void LCD_WriteRAM(u16 RGB_Code); //LCD寫GRAM
void LCD_DisplayOn(void); //LCD開啟顯示
void LCD_DisplayOff(void); //LCD關(guān)閉顯示
void LCD_Init(void); //初始化LCD
void LCD_Clear(u16 Color); //清屏函數(shù)
3.3ADS7846觸控驅(qū)動程序和VS1003音頻解碼器驅(qū)動程序設(shè)計(jì)
ADS7846與STM32之間通過SPI接口相連,由STM32向ADS7846傳送3次數(shù)據(jù)來完成轉(zhuǎn)換。首先由STM32向ADS7846發(fā)送控制字,剩下的兩次則是STM32讀取ADS7846 A/D轉(zhuǎn)換的結(jié)果數(shù)據(jù)。由于觸摸屏的坐標(biāo)原點(diǎn)、標(biāo)度和LCD的坐標(biāo)原點(diǎn)、標(biāo)度不一樣,本設(shè)計(jì)采用四點(diǎn)定位法進(jìn)行坐標(biāo)變換[12]。
VS1003采用SPI模式,VS1003通過7根線與STM32通信,在SPI接口正確配置后就可以對VS1003模塊進(jìn)行操作。相關(guān)函數(shù)名稱如下:
u16 VS_RD_Reg(u8 address); //讀寄存器
void VS_WR_Cmd(u8 address,u16 data); //寫指令
void VS_WR_Data(u8 data); //寫數(shù)據(jù)
u16 VS_RD_Wram(u16 addr); //讀WRAM
void VS_Init(void);//初始化VS10XX
u8 VS_HD_Reset(void); //硬復(fù)位
void VS_Soft_Reset(void); //軟復(fù)位
u16 VS_Ram_Test(void); //RAM測試
void VS_Sine_Test(void); //正弦測試
u16 VS_Get_DecodeTime(void); //得到解碼時間
u16 VS_Get_HeadInfo(void); //得到比特率
void VS_Rst_DecodeTime(void); //重設(shè)解碼時間
void set10XX(void); //設(shè)置VS10003
void set10XX_bass(void); //設(shè)定VS1003播放高低音
void Set10XX_vol(void); //設(shè)置音量
3.4音樂播放功能程序設(shè)計(jì)
實(shí)現(xiàn)音樂播放功能,需要讀取相應(yīng)的MP3文件,根據(jù)FAT文件系統(tǒng)并結(jié)合SD卡讀取驅(qū)動,可以得到相應(yīng)的文件數(shù)據(jù),每次讀取512字節(jié)。當(dāng)VS1003初始化完成后等待接收數(shù)據(jù)(DREQ引腳為高電平)時,將讀到的數(shù)據(jù)以每次32字節(jié)的速度送入VS1003的RAM中,VS1003自動處理數(shù)據(jù)得到模擬音頻信號[13]。每次讀取新的音頻文件時,采用文件名比較方法查找SD卡中的歌詞文件,如果存在歌詞文件,將文件數(shù)據(jù)全部復(fù)制到RAM中,同時初始化30 ms中斷的定時器用于歌詞顯示的刷新操作。實(shí)現(xiàn)音樂頻譜顯示功能時,頻譜分析由VS1003完成,對VS1003初始化時寫入頻譜分析的代碼,可以使VS1003完成頻譜分析的功能,STM32通過定時讀出頻譜分析后的結(jié)果,對結(jié)果進(jìn)行處理并顯示到液晶屏上。音樂播放功能設(shè)計(jì)流程圖如圖3所示。
圖3 音樂播放設(shè)計(jì)流程圖
相關(guān)函數(shù)名稱如下:
void Load_Gui_Mp3(void); //加載音樂播放界面
void Mus_Viewer(void); //瀏覽文件夾下的音樂文件
u16 Mus_Play(FileInfoStruct *FileName,u16 index,u16 total); //播放選定的歌曲
void MP3_PROG(u32 pos,u32 lenth); //進(jìn)度條、時間、比特率等實(shí)時信息顯示控制
void LoadPatch(void); //加載頻譜分析的代碼到VS1003
u8 GetSpec(u16 *p); //得到頻譜數(shù)據(jù)
void LCD_ShowFFT(u16* curv,u8* topv,u8 *flyv); //顯示頻譜
void Lrc_Read_Init(void); //歌詞讀取初始化
void LyricDisplayCtrl(void); //歌詞顯示控制
3.5其他功能程序設(shè)計(jì)
實(shí)現(xiàn)電子書功能,需要讀取相應(yīng)的TXT文件,然后根據(jù)FAT文件系統(tǒng)打開并顯示SD卡內(nèi)TXT文件。LCD顯示屏幕大小為240×320,在橫方向上顯示30個字符,豎方向上顯示40個字符。電子書程序設(shè)計(jì)流程描述如下:系統(tǒng)打開一個TXT文件后,先讀取一個扇區(qū)512字節(jié)的數(shù)據(jù)到數(shù)組中;數(shù)組中從第一個元素開始,先判斷是否為中文字符,如果是則地址加16,否則加8;接下來判斷一屏是否已經(jīng)顯示完,如果沒有則繼續(xù),否則等待,直到選擇下一頁;最后判斷整個數(shù)組是否已經(jīng)全部顯示,如果是則再讀一個扇區(qū)的數(shù)據(jù),否則繼續(xù)。
圖片瀏覽功能在文件數(shù)據(jù)的讀取上與電子書功能一樣,只是所讀取的文件格式不一樣。圖片瀏覽支持BMP格式的文件,BMP是一種與硬件設(shè)備無關(guān)的圖像文件格式,采用位映射存儲格式,除了圖像深度可選以外,不采用其他任何壓縮[14]。
觸摸畫板功能的實(shí)現(xiàn)完全依靠TFT顯示與觸摸驅(qū)動的支持。其基本原理是利用ADS7846獲取觸摸坐標(biāo),并根據(jù)坐標(biāo)在TFT上完成畫點(diǎn)工作。
STM32F103VCT6內(nèi)置了RTC模塊。該模塊擁有一組連續(xù)計(jì)數(shù)的計(jì)數(shù)器,在相應(yīng)的軟件配置下,具有秒中斷的功能,只需要根據(jù)相應(yīng)的中斷信息,即可完成時鐘功能。每次秒中斷產(chǎn)生時,時間值加1,同時通過DS18B20獲得溫度數(shù)據(jù),之后將時間與溫度數(shù)據(jù)更新并顯示出來。
4結(jié)束語
該多功能媒體播放器設(shè)計(jì)充分利用了STM32處理器外圍接口,軟件設(shè)計(jì)全部采用C語言編譯,采用FAT文件系統(tǒng)方式讀取SD卡中的文件,通過圖形化的觸摸屏菜單界面進(jìn)行功能選擇[15]。系統(tǒng)采用STM32F103VCT6控制器讀取SD卡中存儲的MP3音樂文件,將數(shù)據(jù)送入VS1003音頻解碼芯片進(jìn)行音頻解碼,解碼后的音樂流通過功放驅(qū)動喇叭播放,同時在TFT液晶顯示屏上實(shí)時顯示歌曲信息;在實(shí)現(xiàn)基本的音樂播放基礎(chǔ)上,結(jié)合TFT觸摸屏、溫度傳感器DS18B20、EEPROM芯片AT24C02、Flash芯片W25Q16等外圍器件,增加了電子書、圖片瀏覽、觸摸畫板、時鐘溫度顯示等多種實(shí)用功能。
[參考文獻(xiàn)]
[1]黃振杰,盧小冰.基于AT89S52單片機(jī)的多功能音樂播放器[J].電子設(shè)計(jì)工程,2009,19(2):17-18.
[2]高玉敏,宋建華.基于PIC單片機(jī)PWM模式的音樂播放系統(tǒng)設(shè)計(jì)[J].測控技術(shù),2014,33(9):72-74.
[3]陳志旺.STM32嵌入式微控制器快速上手[M].北京:電子工業(yè)出版社,2012.
[4]馬志強(qiáng),王建剛,孫少林,等.基于STM32的PWM音樂播放器應(yīng)用設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(11):63-65.
[5]郝迎吉,關(guān)強(qiáng).基于VS1003解碼器的信號發(fā)生器[J].儀表技術(shù)與傳感器,2013(2):19-20.
[6]郭本振,李聲晉,盧剛,等.基于DSP和LCD觸摸屏的車載信息系統(tǒng)設(shè)計(jì)[J].液晶與顯示,2011,26(1):83-87.
[7]劉彬,韓進(jìn).基于單片機(jī)的液晶顯示觸摸屏控制設(shè)計(jì)[J].液晶與顯示,2010,25(2):240-244.
[8]孫林軍,賀鋒濤.基于STM32控制液晶的接口實(shí)現(xiàn)[J].電視技術(shù),2013,37(1):77-79.
[9]郁峰.基于嵌入式文件系統(tǒng)的MP3播放器的設(shè)計(jì)和實(shí)現(xiàn)[D].蘇州:蘇州大學(xué),2009.
[10]譚浩強(qiáng).C程序設(shè)計(jì)[M].4版.北京:清華大學(xué)出版社,2010.
[11]閔華松,王娜,譚金鑫.嵌入式多媒體播放器通用控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2009,31(2):153-155.
[12]張耀麒.應(yīng)用于電阻式觸摸屏的ADS7846控制器[J].電子科技,2006(9):49-53.
[13]李寧.基于MDK的STM32處理器開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008.
[14]邸興,張建花,陳貝.基于STM32的BMP圖片解碼系統(tǒng)[J].電子設(shè)計(jì)工程,2011,19(10):135-138.
[15]陳自龍,周書杰,湯勇明.基于ARM嵌入式系統(tǒng)的高保真無損音樂播放器設(shè)計(jì)[J].電子器件,2012,35(6):692-698.
[責(zé)任編輯:張存鳳]
Design of Multi-functional media player based on STM32
ZHANG Zhi-wei
(School of Physical and Telecommunication Engineering, Shaanxi University of Technology,
Hanzhong 723000, China)
Abstract:For the expansion of traditional music player function, multi-functional media player was designed, which uses STM32F103VCT6 micro controller as the core device. The hardware circuit of the system is composed of MCU, TFT color touch screen, temperature sensor, EEPROM chip, Flash chip, audio decoder chip and SD card modules etc. the system software is compiled in Keil MDK design platform by the TFT LCD driver, ADS7846 touch driver, VS1003 audio decoder driver, SD card reader driver, music playback function program and other related functional program composition. Experimental results show that: the media player can achieve MP3 music player and track lyrics spectrum information of color display, and has multiple functions of clock temperature display, e-books, picture browsing and drawing board.
Key words:SCM;touch screen;secure digital card;multi-functional;player