STM32處理器綜合應(yīng)用_第1頁
STM32處理器綜合應(yīng)用_第2頁
STM32處理器綜合應(yīng)用_第3頁
STM32處理器綜合應(yīng)用_第4頁
STM32處理器綜合應(yīng)用_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第九章STM32處理器綜合應(yīng)用9.1RTX_Blinky9.2MP3_Player9.1RTX_Blinky本節(jié)將介紹一個綜合應(yīng)用RTX、ADC、GPIO、LCD的實例RTX_Blinky。STM32處理器根據(jù)電位器的電壓值來控制四相八拍步進(jìn)電機的旋轉(zhuǎn)速度,這里以四個LED燈閃爍來表示處理器給步進(jìn)電機的輸入,也就是通過電位器來控制四個LED燈循環(huán)閃爍的速度,同時電位器的電壓值在LCD上顯示。作用其一是如何使用實時庫RTX來實現(xiàn)多任務(wù)的應(yīng)用程序;其二是如何使用MDK、ULink2和STM32處理器的SW端口來進(jìn)行實時跟蹤分析調(diào)試9.1.1硬件電路9.1.2RTX內(nèi)核RTX內(nèi)核是一個非常小的RTOS,僅有50多個函數(shù),沒有內(nèi)存管理、文件管理等復(fù)雜功能,但可以實現(xiàn)多任務(wù)的管理和調(diào)度。RTX是用標(biāo)準(zhǔn)C語言編寫,由RealView編譯器編譯成的,可輕松實現(xiàn)任務(wù)函數(shù)的聲明,而不需要復(fù)雜的堆棧以及變量幀的配置。利用RTX核編寫實時應(yīng)用程序僅需要在源程序中包含一個連接RTX實時庫的頭文件“RTX.h”即可。RTX常用函數(shù)os_sys_init(void(*task)(void))該函數(shù)用于初始化并啟動RTX核,在核被初始化后,將運行參數(shù)task所指向的任務(wù)函數(shù)。該函數(shù)一定是放在C語言的main()函數(shù)中。RTX常用函數(shù)OS_TIDos_tsk_create(void(*task)(void),U8priority)該函數(shù)創(chuàng)建由參數(shù)任務(wù)函數(shù)指針*task所指定的任務(wù),并將任務(wù)添加準(zhǔn)備好的隊列中,新的任務(wù)會被動態(tài)分配一個任務(wù)識別號(TID)。參數(shù)priority用于指定任務(wù)的優(yōu)先級,默認(rèn)的任務(wù)優(yōu)先權(quán)是1。0為閑置的任務(wù)保留的,如果指定一個任務(wù)的優(yōu)先權(quán)為0,則自動用1代替,值255也保留。RTX常用函數(shù)voidos_evt_set(U16event_flags,OS_TIDtask);該函數(shù)為參數(shù)task指定的任務(wù)設(shè)置標(biāo)志,函數(shù)僅對參數(shù)event_flags中相應(yīng)位為1的事件設(shè)置標(biāo)志。voidos_tsk_delete_self(void)該函數(shù)停止并刪除當(dāng)前任務(wù),程序?qū)⒗^續(xù)執(zhí)行下一個就緒隊列中最高優(yōu)先權(quán)的任務(wù)。RTX常用函數(shù)voidos_dly_wait(U16delay_time)該函數(shù)用于暫停調(diào)用任務(wù)。參數(shù)delay_time具體規(guī)定停頓的時間長度,它由system_ticks衡量,delay_time可以設(shè)置為從1至0xfffe的任何值。RTX常用函數(shù)OS_RESULTos_evt_wait_and(U16wait_flags,U16timeout)該函數(shù)用于等待在wait_flags中被指定發(fā)生的所有事件。函數(shù)等待參數(shù)wait_flags中相應(yīng)的位被設(shè)定為1的事件,最多可達(dá)16個不同的事件。timeout用于設(shè)置預(yù)約時間,預(yù)約時間之后即使沒有一個事件發(fā)生,函數(shù)必須返回。timeout可以為除了0xFFFF之外的值,如果timeout設(shè)置為0xFFFF,則表示一個不確定的預(yù)約時間。預(yù)約時間由系統(tǒng)時間衡量。9.1.3軟件程序設(shè)計為了使用RTX以多任務(wù)的方式驅(qū)動LED燈的閃爍,設(shè)置5個任務(wù)OS_TIDt_phaseA、OS_TIDt_phaseB、OS_TIDt_phaseC、OS_TIDt_phaseD和OS_TIDt_lcd。其中前4個任務(wù)的作用是點亮某個LED燈,延遲一段時間,然后通過設(shè)置標(biāo)志觸發(fā)另一個任務(wù)執(zhí)行,再延遲一段時間之后,熄滅LED燈,等待下一次事件標(biāo)志的到來;通過這四個任務(wù)的循環(huán)觸發(fā)可以實現(xiàn)四個LED燈循環(huán)閃爍,其延遲時間由ADC轉(zhuǎn)換值決定。軟件程序設(shè)計OS_TIDt_lcd用于將ADC轉(zhuǎn)換值顯示在LCD上,按固定時間間隔不斷更新。除了以上5個任務(wù)之外,還有init任務(wù)和idle任務(wù),init任務(wù)用于創(chuàng)建以上5個任務(wù),該任務(wù)在完成之后自行刪除;idle任務(wù)無需創(chuàng)建,永遠(yuǎn)存在,當(dāng)系統(tǒng)無其他任務(wù)時執(zhí)行該任務(wù)。源文件簡介Blinky.c該源文件用于創(chuàng)建多個任務(wù),并多個任務(wù)之間的觸發(fā)。STM32_Init.c該源文件用于初始化STM32處理器各個外圍接口設(shè)備。源文件簡介Setup.c該文件用于設(shè)置ADC和LED相關(guān)的端口和時鐘。RTX_Config.c該文件用于配置RTX的參數(shù),例如同時運行的最多任務(wù)數(shù)、任務(wù)堆棧等。MDK在\Keil\ARM\RV30\Startup下自帶了幾款MCU的RTX配置模版文件,編程時可以先加入近似MCU的配置模版文件,然后使用配置向?qū)硇薷膮?shù),如下頁圖所示,無需編程。RTX參數(shù)配置向?qū)г次募喗長CD_4BIT.c該文件用于提供評估板上2行16字符的文本LCD驅(qū)動。9.1.4實時跟蹤分析Cortex-M3處理器內(nèi)核可以使用SW接口進(jìn)行實時跟蹤(Trace);這里結(jié)合RTX_Blinky介紹如何使用MDK、ULink2進(jìn)行STM32的實時跟蹤工具。9.1.4.1配置實時跟蹤調(diào)試若要使用SW進(jìn)行實時調(diào)試,則需要按以下步驟配置調(diào)試器、配置SWD、配置跟蹤功能。配置調(diào)試器:選擇Project->OptionsforTarget–>Debug,在如下頁圖所示的對話框中選擇ULINKCortexDebugger調(diào)試器。選擇調(diào)試器配置實時跟蹤調(diào)試然后將路徑\Keil\ARM\Startup\ST下的STM32DBG.ini文件拷貝到工程文件夾中。選擇Project->OptionsforTarget–>Debug,在InitializationFile選項中選擇該文件:STM32DBG.ini文件用于配置實時跟蹤的選項,可以使用配置向?qū)硇薷脑撐募篠TM32DBG.ini中可配置選項(1)DBG_SLEEP(DebugSleepMode):允許在睡眠模式下調(diào)試;DBG_STOP(DebugStopMode):允許在停止模式下調(diào)試;DBG_STANDBY(DebugStandbyMode):允許在備用模式下調(diào)試;TRACE_IOEN(TracePinAssignmentcontrol):允許跟蹤引腳分配;TRACE_MODE(TracePinAssignmentControl):設(shè)置跟蹤引腳分配;STM32DBG.ini中可配置選項(2)DBG_IWDG_STOP(DebugIndependentWatchdogstoppedwhenCoreishalted):當(dāng)處理器核掛起時候,停止獨立看門狗時鐘;DBG_WWDG_STOP(DebugWindowWatchdogstoppedwhenCoreishalted):當(dāng)處理器核掛起時候,停止窗口看門狗時鐘;DBG_TIMx_STOP(DebugTimerstoppedwhenCoreishalted):當(dāng)處理器核掛起時候,停止調(diào)試時鐘;DBG_CAN_STOP(DebugCANstoppedwhenCoreishalted):CAN接收寄存器被凍結(jié)。配置SWD選擇OptionsforTarget–>Debug–>Settings,如圖所示,設(shè)置SWD,端口選擇SW。配置Trace功能Trace功能包括:CoreClock、TracePort以及定義TraceEvents等,如圖所示。9.1.4.2實時跟蹤MDK提供了多種實時跟蹤窗口,來從不同角度顯示實時跟蹤所捕獲的記錄;包括:狀態(tài)欄信息、ITM觀測器、邏輯分析儀、RTX核事件觀測器和實時跟蹤窗口。狀態(tài)欄信息如果配置了實時跟蹤,當(dāng)選擇Debug->StartDebugSession菜單開始調(diào)試時,μVision3的窗口狀態(tài)欄將顯示當(dāng)前跟蹤狀態(tài)信息:在狀態(tài)欄中可能顯示如下的Trace信息:Trace:CommunicationError,表示Cortex-M3和μVision之間通信出現(xiàn)錯誤,原因是CoreClock設(shè)置出錯或者Trace硬件有問題;Trace:HWBufferOverrun,表示ULink2緩沖超出,ULink2無法給μVision提供足夠快的數(shù)據(jù)通信;在狀態(tài)欄中可能顯示如下的Trace信息續(xù)Trace:SWBufferOverrun,發(fā)生μVision內(nèi)部軟件緩沖超出;Trace:NoSynchronization,未受到同步包,原因是配置錯誤或者未連接跟蹤硬件;Trace:DataStreamError,檢測到跟蹤數(shù)據(jù)流;Trace:DataOverflow,捕獲了太多的跟蹤數(shù)據(jù),跟蹤端口太忙導(dǎo)致跟蹤包丟失;Trace:Running...,表示目標(biāo)板和實時跟蹤允許正確;TargetandRealtimeTraceisrunningwithoutanyerrors.<none>:表示目標(biāo)板和實時跟蹤停止,之前未發(fā)生任何錯誤。ITM觀測器(ITMViewer)ITM是一個應(yīng)用驅(qū)動跟蹤源,支持應(yīng)用事件跟蹤和printf類型的調(diào)試。它支持如下跟蹤信息源:軟件跟蹤、硬件跟蹤和時間戳。要使用ITM觀測器,首先需要在源代碼中加入如下關(guān)于ITM端口寄存器的定義:#defineITM_Port8(n)(*((volatileunsignedchar*)(0xE0000000+4*n)))#defineITM_Port16(n)(*((volatileunsignedshort*)(0xE0000000+4*n)))#defineITM_Port32(n)(*((volatileunsignedlong*)(0xE0000000+4*n)))#defineDEMCR(*((volatileunsignedlong*)(0xE000EDFC)))#defineTRCENA0x01000000然后,在源代碼中添加fputc函數(shù),它用于向ITM的激勵端口0寄存器寫數(shù)據(jù):struct__FILE{inthandle;/*Addwhateveryouneedhere*/};FILE__stdout;FILE__stdin;intfputc(intch,FILE*f){if(DEMCR&TRCENA){while(ITM_Port32(0)==0);ITM_Port8(0)=ch;}return(ch);}有了fputc函數(shù)之后,就可以用printf函數(shù)做為ITM調(diào)試輸出。ITM的激勵端口0與ITMViewer窗口之間的連接是固定關(guān)系的:完成以上設(shè)置之后,在目標(biāo)調(diào)試期,可以選擇View->SerialWindow->ITMViewer打開ITMViewer窗口這時就可以在目標(biāo)調(diào)試期間通過ITMViewer窗口查看到調(diào)試跟蹤信息:邏輯分析儀(LogicAnalyzer)使用實時調(diào)試,可以通過邏輯分析器觀測至多4個變量值的變化。在調(diào)試期間,可以在邏輯分析儀中添加希望觀測的變量:RTX核事件觀測器

(RTXKernelEventViewer)當(dāng)運行使用實時庫RTX的應(yīng)用程序時,可使用RTXKernelEventViewer窗口來觀察任務(wù)的切換過程。還需要允許TraceEnable,并設(shè)置正確的CoreClock:完成上述設(shè)置之后,在目標(biāo)調(diào)試過程中選擇Peripherals->RTXKernel即可打開RTXKernel窗口:System窗口EventViewer窗口實時跟蹤窗口在實時調(diào)試時,選擇Peripherals–>Trace菜單,來觀測和分析所有的跟蹤記錄:ExceptionTrace窗口EventCounters窗口顯示特殊事件計數(shù)器的值:Cortex-MTargetDriverSetup窗口中選擇對那些特殊事情進(jìn)行計數(shù):9.2MP3_Player本節(jié)將介紹一個利用STM32處理器實現(xiàn)簡易MP3Player的設(shè)計實例;這個綜合應(yīng)用實例有助于讀者了解SPI接口、SD卡、TIMER、USB、FAT文件系統(tǒng)等的應(yīng)用。兩種設(shè)計方案第一種方案是簡易聲波播放器,僅使用STM103V100評估板;令計時器TIM4工作在PWM模式下,將wav格式的聲波文件從SD卡中讀出;由TIM4產(chǎn)生不同頻率的方波通過低通濾波器和放大器送喇叭。簡易聲波播放器方案第二種方案第二種方案即是簡易MP3播放器;還需要使用額外的解碼芯片,將MP3格式的文件從SD卡讀出,然后送解碼芯片解碼播放。簡易MP3Player方案9.2.1SD卡的結(jié)構(gòu)及讀寫方法SD卡(SecureDigitalMemoryCard)是一種為滿足安全性、容量、性能和使用環(huán)境等各方面的需求而設(shè)計的一種新型存儲器件;SD卡允許在兩種模式下工作,即SD模式和SPI模式,本系統(tǒng)采用SPI模式。SD連接器與STM32處理器SPI連接圖SD卡內(nèi)部結(jié)構(gòu)及引腳SD卡主要引腳和功能為:CLK:時鐘信號,每個時鐘周期傳輸一個命令或數(shù)據(jù)位,頻率可在0~25MHz之間變化,SD卡的總線管理器可以不受任何限制的自由產(chǎn)生0~25MHz的頻率;CMD:雙向命令和回復(fù)線,命令是一次主機到從卡操作的開始,命令可以是從主機到單卡尋址,也可以是到所有卡;回復(fù)是對之前命令的回答,回復(fù)可以來自單卡或所有卡;DAT0~3:數(shù)據(jù)線,數(shù)據(jù)可以從卡傳向主機也可以從主機傳向卡。SD卡的命令SD卡以命令形式來控制SD卡的讀寫等操作??筛鶕?jù)命令對多塊或單塊進(jìn)行讀寫操作。在SPI模式下其命令由6個字節(jié)構(gòu)成,其中高位在前。讀寫SD卡的兩個函數(shù):讀取SD卡函數(shù)u8MSD_ReadBlock(u8*pBuffer,u32ReadAddr,u16NumByteToRead);寫讀取SD卡函數(shù)u8MSD_WriteBlock(u8*pBuffer,u32WriteAddr,u16NumByteToWrite)9.2.2FAT16文件系統(tǒng)簡介SD卡如果采用FAT16文件格式,按照其不同的特點和作用大致可分為5部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、FDT區(qū)和DATA區(qū)。由于SD卡一般不做引導(dǎo)盤,一般也不分區(qū),因此通常無MBR區(qū),直接從DBR區(qū)開始。DBR區(qū)內(nèi)容為系統(tǒng)引導(dǎo)記錄,它包括一個引導(dǎo)程序和一個被稱為BPB(BiosParameterBlock)的本分區(qū)參數(shù)記錄表。引導(dǎo)程序的主要任務(wù)是當(dāng)MBR將系統(tǒng)控制權(quán)交給它時,判斷本分區(qū)根目錄是否有操作系統(tǒng)引導(dǎo)文件,如果有則將其讀入內(nèi)存,并把控制權(quán)交給該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲格式、根目錄大小、FAT個數(shù),分配單元大小等重要參數(shù)。FAT區(qū)該區(qū)內(nèi)容為文件分配表,F(xiàn)AT16文件系統(tǒng)進(jìn)行空間分配的最基本單位是簇。文件分配表反映了SD卡所有簇的使用情況,通過查文件分配表可以得知任一簇的使用情況。FAT表對于FAT16來說,F(xiàn)AT表每項占用兩個字節(jié)。FAT表的第一項通常為FFF8H。對于其它項,若其值為0000H表示可用;FFF7H表示為壞簇;FFF8H-FFFFH之間表示該簇為某文件或目錄的最后一個簇,F(xiàn)FF0H-FFF6H之間為保留值;其它值則指示下一個簇的簇號。FDT區(qū)該區(qū)的內(nèi)容為文件目錄表,F(xiàn)AT文件系統(tǒng)的一個重要思想是把目錄(文件夾)當(dāng)作一個特殊的文件來處理,F(xiàn)AT32甚至將根目錄當(dāng)作文件處理。FAT分區(qū)中所有目錄文件,實際上可以看作是一個存放其它文件(文件夾)入口參數(shù)的數(shù)據(jù)表。因此,目錄占用空間的大小并不等同于其下所有數(shù)據(jù)的大小,但也不等于0,通常是占很小的空間。其具體的存儲原理是:不管目錄文件所占空間為多少簇,一簇為多少扇區(qū)、多少字節(jié);系統(tǒng)都會以32個字節(jié)為單位,進(jìn)行目錄文件所占簇的分配。DATA區(qū)該數(shù)據(jù)區(qū)存放文件的內(nèi)容,SD卡所占用的空間絕大部分為此部分。如果文件長度大于一個簇的大小,需要多個簇存放該文件,這些放通過FAT鏈表串連起來。9.2.3VS1003-MP3/WMA

音頻編解碼器簡介VS1003是由芬蘭VLSISolutionOy公司所設(shè)計的一款單片MP3/WMA/MIDI音頻解碼器和ADPCM編碼器;它包含一個高性能、自主產(chǎn)權(quán)的低功耗DSP處理器核VSDSP4。VS1003內(nèi)部結(jié)構(gòu)及引腳VS1003芯片與STM32F103x處理器配合VS1003可以作為一個微控制器的從機,通過串行SPI接口來接收輸入的比特流,輸入的比特流被解碼后,可以通過一個數(shù)字音量控制器到達(dá)一個18位過采樣多位DAC。STM32處理器讀取SD卡中的MP3文件,將其通過SPI接口送往VS1003芯片播放,然后再利用STM32F10X處理器的一些GPIO口來控制VS1003即可以實現(xiàn)一個MP3Player的原形設(shè)計。9.2.4簡易聲波播放器的設(shè)計與實現(xiàn)通過SPI1從SD卡中讀取聲波文件,將所讀取的部分存放在一個緩沖器中,利用TIMER2通道1定期產(chǎn)生的中斷,從緩沖器中讀取聲音數(shù)據(jù),然后根據(jù)聲音數(shù)據(jù)通過TIMER4的通道3產(chǎn)生不同頻率方波輸出。這里使用了兩個緩沖器,一個用于存放從SD卡讀到的聲音數(shù)據(jù),另一個用于將聲音數(shù)據(jù)輸出到PWM,兩個緩沖區(qū)的功能不斷交替,形成一個由2個緩沖區(qū)構(gòu)成的環(huán)形緩沖。播放聲波文件由PC機通過超級終端以命令的方式選擇,聲音的播放狀態(tài)也顯示在PC機超級終端上。main.c源文件包含以下幾個主要函數(shù):SetupClock:用于初始化并設(shè)置系統(tǒng)時鐘,并允許GPIOA、GPIOB、TIM2、TIM4和SPI的時鐘;Speaker_Timer_Config:用于配置定時器TIM2和TIM4,TIM4的通道3處于PWM1模式;TIM2的通道1工作于輸出比較模式,定期發(fā)出中斷,在每次中斷修改TIM4通道3相關(guān)寄存器,使之產(chǎn)生不同頻率的方波;USART_Scanf_Name和USART_Scanf_Cmd:用于從超級終端獲取輸入字符串;main.c源文件包含以下幾個主要函數(shù)(續(xù))PrintPass:用于在超級終端上輸出提示符“X:>”;main:主函數(shù),首先初始化系統(tǒng)時鐘、串口、連接SD卡的SPI1,與SD進(jìn)行通訊初始化,檢測并在超級終端上打印SD卡的信息;然后根據(jù)用戶在超級中輸入的命令進(jìn)行操作,這里有“dir”、“cd”、“read”、“free”、“play”五個簡單的命令,分別是目錄項列表、目錄更換、以文本方式讀取文件、查詢SD空余空間和播放聲音文件;如果輸入“Play***.wav”,則處理器開始從SD卡中讀取相應(yīng)的聲波文件,并將其放入相應(yīng)的緩沖區(qū);msd.c:該文件用于提供SD卡的驅(qū)動,由ST公司所帶例程提供,本系統(tǒng)用到以下一些函數(shù)。SPI_Config:配置與SD卡相連接的SPI1;MSD_Init:初始化SD卡通訊;MSD_WriteByte:向SD卡寫一個字節(jié);MSD_WriteByte:從SD卡讀一個字節(jié);MSD_GoIdleState:令SD卡處于空閑態(tài);Get_Medium_Characteristics:獲取SD卡的容量;MSD_SendCmd:向SD卡發(fā)命令;MSD_GetResponse:從SD卡獲取響應(yīng);MSD_ReadBlock:從SD卡讀取一塊數(shù)據(jù);fat16.c:該文件提供FAT16文件系統(tǒng)的支持,主要包含以下一些函數(shù):ReadMBR:讀取MBR數(shù)據(jù)結(jié)構(gòu);ReadBPB:讀取BPB數(shù)據(jù)結(jié)構(gòu);ReadFAT:讀取文件分配表指定項;ReadBlock:讀取一個扇區(qū);FAT_Init:獲取FAT16文件系統(tǒng)基本信息;DirStartSec:獲取根目錄的開始扇區(qū)號;DataStartSec:獲取數(shù)據(jù)區(qū)的開始扇區(qū)號;fat16.c續(xù)ClusConvLBA:獲取一個簇的開始扇區(qū)號;LBAConvClus:轉(zhuǎn)換扇區(qū)號與簇號之間的關(guān)系;LBAConvClus:計算可用空間,返回字節(jié)數(shù);GetFileName:獲取指定文件的首扇區(qū)號;List_DateAndTime:獲取文件或目錄項的日期時間;SearchFoler:在指定范圍內(nèi)查找子目錄;List_AllDir_Long:列出指定范圍內(nèi)的目錄及目錄信息;FAT_FileOpen:打開指定文件;FAT_FileRead:讀取文件數(shù)據(jù);uart.c

hw_config.cuart.c:該文件提供USART串口驅(qū)動函數(shù),可以參考7.5串行通訊接口實例的程序;hw_config.c:該文件包含系統(tǒng)初始化設(shè)置函數(shù)和中斷配置函數(shù)。Set_System:用于提供系統(tǒng)時鐘及電源設(shè)置;NVIC_Config:用于設(shè)置中斷向量,允許TIM2中斷;stm32f10x_it.c

UnicodeToGB2312.cstm32f10x_it.c:該文件僅包含一個函數(shù)TIM2_IRQHandler,即在每次TIM2中斷時從緩沖器中讀取音頻數(shù)據(jù)送TIM4定時器,以用于產(chǎn)生不同頻率的聲音。UnicodeToGB2312.c:該文件僅包含一個函數(shù)UnicodeToGB2312,處理從UniCode編碼到GB2312字符的轉(zhuǎn)換,用于處理長文件名。查看SD卡內(nèi)容播放聲波文件9.2.5簡易MP3Player的設(shè)計與實現(xiàn)9.2.4小節(jié)所介紹的聲音播放器,是通過定時器TIM4產(chǎn)生不同頻率方波來產(chǎn)生聲音的,因此只適合播放wav聲波文件,其音質(zhì)也非常粗糙。如果希望播放MP3文件,并產(chǎn)生高品質(zhì)的聲音,則需要使用專用聲音解碼芯片,這將得到一個簡易MP3Player原型設(shè)計。9.2.5.1

硬件設(shè)計9.2.5.2軟件程序設(shè)計通過SPI1從SD卡中讀取MP3文件,將所讀取的內(nèi)容通過SPI2發(fā)送到VS1003解碼器中播放;PC機可通過USB總線讀寫SD卡的內(nèi)容,傳送MP3文件;PC機的超級終端用于發(fā)送MP3播放命令、顯示MP3播放狀態(tài)。main.c:源文件包含以下幾個主要函數(shù):USART_Scanf_Name和USART_Scanf_Cmd:用于從超級終端獲取輸入字符串;PrintPass:用于在超級終端上輸出提示符“X:>”;main:主函數(shù),首先初始化系統(tǒng)時鐘、串口、USB接口、SPI1、SPI2,通過命令啟動VS1003芯片,檢測并在超級終端上打印SD卡的信息;然后根據(jù)用戶在超級中輸入的命令進(jìn)行操作,這里有“dir”、“cd”、“read”、“free”、“usb”、“vstest”、“play”七個簡單的命令,分別是目錄項列表、目錄更換、以文本方式讀取文件、查詢SD空余空間、啟

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論