基于STM32的MP3播放器設計與實現_第1頁
基于STM32的MP3播放器設計與實現_第2頁
基于STM32的MP3播放器設計與實現_第3頁
基于STM32的MP3播放器設計與實現_第4頁
基于STM32的MP3播放器設計與實現_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上 嵌入式系統原理 課程設計說明書題 目: 利用STM32實現MP3播放器 院 (系): 信息與電氣工程學院 專業班級: 通信二班 學生姓名: 周波 學 號: 指導教師: 羅 朝 輝 20 12 年 2 月 30 日至20 12 年 3 月 23 日 STM32芯片應用 實驗設計任務書一、設計題目利用STM32處理器實現簡易MP3 Player的設計二、設計主要內容(1) 廣泛查找文獻資料,認真研究,反復論證,精心設計技術方案。(2) 較為深入的掌握ARM處理器的體系結構、指令系統、編程方法,初步了解ARM應用系統的軟硬件開發方法及手段,較熟練地掌握ARM處理器幾種重要

2、的片內外設(定時器、PLL、I2C、RTC等)的基本原理及編程方法,初步掌握ARM處理器外圍電路的擴展方法。(3) 了解STM32、SPI接口、SD卡、TIMER、中斷、FAT文件系統、USB等的應用。(4) 考慮簡易聲波播放器、簡易MP3播放器兩種方案實現。三、原始資料硬件資源:STM32系統板、用于ARM處理器的JTAG仿真器、PC機Pentium100以上。設計指導書:STM32系統板配套光盤四、要求的設計成果(1)使用STM103V100評估板令計時器TIM4工作在PWM模式下,將wav格式的聲波文件從SD卡中讀出,由TIM4產生不同頻率的方波通過低通濾波器和放大器送喇叭實現與通過額外

3、解碼芯片實現。(2)撰寫課程設計說明書,要求簡潔、通順,格式規范,設計方案正確,實現技術路線明確,論述內容完整、清楚、規范,數據、資料真實可靠,軟件程序運行良好。(3)要求有完整的電路設計原理圖及軟件源代碼。五、進程安排(1)第 1 天:任務布置及相關知識講解(2)第2-3天:資料查閱與方案制定(3)第4-8天:硬件設計、程序編制與調試階段(4)第 9 天:撰寫設計報告六、主要參考資料1 田澤. 嵌入式系統開發與應用實驗教程. 北京航空航天工業大學出版社,2005.2 郭榮佐,王霖. 嵌入式系統原理.北京航空航天大學出版社,.2008.3 周根林.嵌入式系統原理與應用.南京大學出版社, 200

4、6.4 譚浩強. C語言程序設計(第2版).清華大學出版社,20085 丁峰. ARM系統開發從實踐到提高. 中國電力出版社,2007.指導教師(簽名): 20 年 月 日第一種方案是簡易聲波播放器,僅使用STM103V100評估板,令計時器TIM4工作在PWM模式下,將wav格式的聲波文件從SD卡中讀出,由TIM4產生不同頻率的方波通過低通濾波器和放大器送喇叭,如圖1所示;第二種方案則是簡易MP3播放器,還需要使用額外的解碼芯片,將MP3格式的文件從SD卡讀出,然后送解碼芯片解碼播放,如圖2所示。本節將先介紹SD卡、FAT16文件格式、VS1003編解碼器等關鍵部分,然后再分別給出兩種設計方

5、案的軟件設計。圖1 簡易聲波播放器方案圖2 簡易MP3 Player方案1 SD卡的結構及讀寫方法STM103V100評估板有SD連接器,其使用SPI總線與STM32處理器連接,如圖3所示。圖3 SD連接器與STM32處理器SPI連接圖SD卡(Secure Digital Memory Card)是一種為滿足安全性、容量、性能和使用環境等各方面的需求而設計的一種新型存儲器件,SD卡允許在兩種模式下工作,即SD模式和SPI模式,本系統采用SPI模式。本小節僅簡要介紹在SPI模式下,STM32處理器如何讀寫SD卡,如果讀者如希望詳細了解SD卡,可以參考相關資料。SD卡內部結構及引腳如圖4所示。圖4

6、 SD卡內部結構及引腳SD卡主要引腳和功能為:n         CLK:時鐘信號,每個時鐘周期傳輸一個命令或數據位,頻率可在025MHz之間變化,SD卡的總線管理器可以不受任何限制的自由產生025MHz的頻率;n         CMD:雙向命令和回復線,命令是一次主機到從卡操作的開始,命令可以是從主機到單卡尋址,也可以是到所有卡;回復是對之前命令的回答,回復可以來自單卡或所有卡;n    &#

7、160;    DAT03:數據線,數據可以從卡傳向主機也可以從主機傳向卡。     SD卡以命令形式來控制SD卡的讀寫等操作。可根據命令對多塊或單塊進行讀寫操作。在SPI模式下其命令由6個字節構成,其中高位在前。SD卡命令的格式如表1所示,其中相關參數可以查閱SD卡規范。-表1 SPI命令格式Byte 1/ Byte2-5/Byte 67,6,5,0/31,0/7,00,1/Command/Command Argument/CRC,1-下面分別給出讀寫SD卡的兩個函數:n    &#

8、160;    讀取SD卡函數u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);/* Function Name : MSD_ReadBlock* Description    : Reads a block of data from the MSD.* Input          : - pBuffer : pointer to the buffer that rec

9、eives the data read*                    from the MSD.*                  - ReadAddr : MSD's internal address to read

10、from.*                  - NumByteToRead : number of bytes to read from the MSD.* Output         : None* Return         : The MSD Respon

11、se: - MSD_RESPONSE_FAILURE: Sequence failed*                   - MSD_RESPONSE_NO_ERROR: Sequence succeed */u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead)  u32 i = 0;  u8 rvalue = MSD_RESPON

12、SE_FAILURE;  /* MSD chip select low */  MSD_CS_LOW();  /* Send CMD17 (MSD_READ_SINGLE_BLOCK) to read one block */  MSD_SendCmd(MSD_READ_SINGLE_BLOCK, ReadAddr, 0xFF);  /* Check if the MSD acknowledged the read block command: R1 response (0x00: no errors) */  if (!M

13、SD_GetResponse(MSD_RESPONSE_NO_ERROR)      /* Now look for the data token to signify the start of the data */    if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ)          /* Read the MSD block data : read NumByteToRead

14、data */      for (i = 0; i < NumByteToRead; i+)              /* Save the received data */        *pBuffer = MSD_ReadByte();        /* Point to

15、 the next location where the byte read will be saved */        pBuffer+;            /* Get CRC bytes (not really needed by us, but required by MSD) */      MSD_ReadByte();   &

16、#160;  MSD_ReadByte();      /* Set response value to success */      rvalue = MSD_RESPONSE_NO_ERROR;        /* MSD chip select high */  MSD_CS_HIGH();  /* Send dummy byte: 8 Clock pulses of delay */  MSD_W

17、riteByte(DUMMY);  /* Returns the reponse */  return rvalue;n         寫讀取SD卡函數u8 MSD_WriteBlock(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite) /* Function Name : MSD_WriteBlock* Description    : Writes a block on the MSD* Input &#

18、160;        : - pBuffer : pointer to the buffer containing the data to be*                    written on the MSD.*         &#

19、160;        - WriteAddr : address to write on.*                  - NumByteToWrite: number of data to write* Output         : None* Return

20、60;        : The MSD Response: - MSD_RESPONSE_FAILURE: Sequence failed*                   - MSD_RESPONSE_NO_ERROR: Sequence succeed */u8 MSD_WriteBlock(u8* pBuffer, u32 WriteA

21、ddr, u16 NumByteToWrite)  u32 i = 0;  u8 rvalue = MSD_RESPONSE_FAILURE;  /* MSD chip select low */  MSD_CS_LOW();  /* Send CMD24 (MSD_WRITE_BLOCK) to write multiple block */  MSD_SendCmd(MSD_WRITE_BLOCK, WriteAddr, 0xFF);  /* Check if the MSD acknowledged the write

22、 block command: R1 response (0x00: no errors) */  if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR)      /* Send a dummy byte */    MSD_WriteByte(DUMMY);    /* Send the data token to signify the start of the data */    MSD_WriteByte(0xF

23、E);    /* Write the block data to MSD : write count data by block */    for (i = 0; i < NumByteToWrite; i+)          /* Send the pointed byte */      MSD_WriteByte(*pBuffer);    

24、0; /* Point to the next location where the byte read will be saved */      pBuffer+;        /* Put CRC bytes (not really needed by us, but required by MSD) */    MSD_ReadByte();    MSD_ReadByte();   

25、/* Read data response */    if (MSD_GetDataResponse() = MSD_DATA_OK)          rvalue = MSD_RESPONSE_NO_ERROR;        /* MSD chip select high */  MSD_CS_HIGH();  /* Send dummy byte: 8 Clock pulses of delay */

26、60; MSD_WriteByte(DUMMY);  /* Returns the reponse */  return rvalue; 2 FAT16文件系統簡介     SD卡如果采用FAT16文件格式,按照其不同的特點和作用大致可分為5 部分:MBR區、DBR區、FAT區、FDT區和DATA區。由于SD卡一般不做引導盤,一般也不分區,因此通常無MBR區,直接從DBR區開始。下面對后面四個區分別作簡介:n         DBR區  

27、;  內容為系統引導記錄,它包括一個引導程序和一個被稱為BPB(Bios Parameter Block)的本分區參數記錄表。引導程序的主要任務是當MBR將系統控制權交給它時,判斷本分區根目錄是否有操作系統引導文件,如果有則將其讀入內存,并把控制權交給該文件。BPB參數塊記錄著本分區的起始扇區、結束扇區、文件存儲格式、根目錄大小、FAT個數,分配單元大小等重要參數。本系統采用的DBR結構為:typedef _packed struct/* 由于Cortex-M3內核默認以對齊方式訪問,因此可能導致結構體元素之間有“空隙”,讀出的結構體元素有誤,因此需要加上關鍵字_packed,強制其

28、以壓縮方式存儲結構體。這樣該結構體在內存空間上是一片連續的空間,不存在“空隙”情況。其它地方同理 */     u8         BS_jmpBoot3;     /ofs:0.典型的如:0xEB,0x3E,0x90     u8         BS_OEMName8;  /ofs:3.典型的如:“MSWIN4.

29、1”     u16        BPB_BytesPerSec;  /ofs:11.每扇區字節數     u8         BPB_SecPerClus;          /ofs:13.每簇扇區數     u16 &#

30、160;      BPB_RsvdSecCnt;         /ofs:14.保留扇區數,從DBR 到FAT 的扇區數     u8         BPB_NumFATs;     /ofs:16.FAT 的個數,通常為2     u16   

31、;     BPB_RootEntCnt;         /ofs:17.根目錄項數     u16        BPB_TotSec16;            /ofs:19.分區總扇區數(<32M 時用)     u8

32、60;        BPB_Media;        /ofs:21.分區介質標識,SD卡一般用0xF8     u16        BPB_FATSz16;             /ofs:22.每個FAT 占的扇區數 

33、    u16        BPB_SecPerTrk;           /ofs:24.每道扇區數,對于SD卡無意義     u16        BPB_NumHeads;    /ofs:26.磁頭數,對于SD卡無意義    

34、u32        BPB_HiddSec;       /ofs:28.隱藏扇區數,從MBR到DBR的扇區數     u32        BPB_TotSec32;      /ofs:32.分區總扇區數(32M時用)     u8    &#

35、160;    BS_DrvNum;         /ofs:36.軟盤:0x00,硬盤:0x80,SD卡無意義     u8         BS_Reservedl;       /ofs:37.保留     u8      

36、;   BS_BootSig;         /ofs:38.擴展引導標記:0x29,通常對于SD卡無意義     u32        BS_VolID;          /ofs:39.盤序列號     u8    

37、60;    BS_VolLab11;    /ofs:43.如“Msdos ”     u8         BS_FilSysType8;  /ofs:54.“FAT16 ”     u8         ExecutableCode448;    

38、60;    /ofs:62.引導代碼     u8         ExecutableMarker2;    /ofs:510.結束標識:0xAA55 FAT_BPB;n         FAT區    該區內容為文件分配表,FAT16文件系統進行空間分配的最基本單位是簇。文件分配表反映了SD卡所有簇的使用情況,通

39、過查文件分配表可以得知任一簇的使用情況。對于FAT16來說,FAT表每項占用兩個字節。FAT表的第一項通常為FFF8H。對于其它項,若其值為0000H表示可用;FFF7H表示為壞簇;FFF8H-FFFFH之間表示該簇為某文件或目錄的最后一個簇,FFF0H-FFF6H之間為保留值;其它值則指示下一個簇的簇號。n         FDT區   該區的內容為文件目錄表,FAT文件系統的一個重要思想是把目錄(文件夾)當作一個特殊的文件來處理,FAT32甚至將根目錄當作文件處理。FAT分區中所有

40、目錄文件,實際上可以看作是一個存放其它文件(文件夾)入口參數的數據表。因此,目錄占用空間的大小并不等同于其下所有數據的大小,但也不等于0,通常是占很小的空間。其具體的存儲原理是:不管目錄文件所占空間為多少簇,一簇為多少扇區、多少字節;系統都會以32個字節為單位,進行目錄文件所占簇的分配。本系統目錄項使用的結構體如下:typedef _packed structu8            FileName8;         &

41、#160;  /ofs:0.文件名u8            ExtName3;            /ofs:8.擴展名u8              Attribute;         

42、60;       /ofs:11.文件屬性。典型值:存檔(0x20)、卷標(0x08)u8             Reserved10;          /ofs:21.保留u16            Time;     

43、                /ofs:22.時間u16            Data;                    /ofs:24.日期u16    &#

44、160;       StartClus;                      /ofs:26.開始簇號u32            FileLength;          

45、0;    /ofs:28.文件長度 DIR;   由于篇幅關系,這里不能對上面各字段進行一一介紹。本系統支持長文件名和漢字顯示,如果使用短文件名,則以ASCII編碼;當文件名超過8個字節,擴展名超過3字節時,就以長文件名的形式存儲,長文件名中的字符采用UNICODE形式編碼,每個字符占據2個字節的空間,其目錄項中偏移為11的字節即Attribute字段為0FH。在存儲時將長文件名以13個字符為單位進行切割,每一組占據一個目錄項,所以可能一個文件需要多個目錄項,這時長文件名的各個目錄項按倒序排列在目錄表中,以防與其他文件名混淆。本系統采用串口作

46、為輸入輸出接口,通過在PC的超級終端中輸入命令來對其進行控制,并在超級終端中顯示輸出的結果,如路徑、目錄列表、文件名等相關信息。超級終端輸入輸出的漢字以GB2312編碼、輸入輸出英文字符以ASCII編碼,而長文件名以UNICODE編碼。因此需要將UNICODE編碼轉化為GB2312或ASCII編碼來和用戶交互。這里使用一張排序二維表,里面有7000多個漢字UNICODE編碼對應的GB2312編碼。這里查找算法采用二分查找算法,大大提高了查找效率,這對于嵌入式應用很關鍵。n         DATA區 &#

47、160;  該數據區存放文件的內容,SD卡所占用的空間絕大部分為此部分。如果文件長度大于一個簇的大小,需要多個簇存放該文件,這些放通過FAT鏈表串連起來。3 VS1003-MP3/WMA音頻編解碼器簡介     VS1003是由芬蘭VLSI Solution Oy公司所設計的一款單片MP3/WMA/MIDI音頻解碼器和ADPCM編碼器,它包含一個高性能、自主產權的低功耗DSP處理器核VS_DSP4。該芯片內部結構如圖5所示,其特點如下:圖5 VS1003內部結構及引腳n      &#

48、160;  可解碼MPEG 1和MPEG 2音頻層III(CBR+VBR+ABR)、WMA 4.0/4.1/7/8/9 5-384kbps 所有流文件;WAV(PCM+IMA AD-PCM),可產生MIDI/SP-MIDI 文件;n         可對話筒輸入或線路輸入的音頻信號進行IMA ADPCM編碼;n         支持MP3和WAV流;n      &#

49、160;  高音、低音控制;n         單時鐘操作(12.13MHz);n         內部PLL鎖相環時鐘倍頻器;n         低功耗n         內含高性能片上立體聲數模轉換器,兩聲道間無相位差;n   

50、0;     內含能驅動30歐負載的耳機驅動器;n         模擬、數字、I/O單獨供電;n         為用戶代碼和數據準備了5.5KB片上RAM;n         串行的控制、數據接口;n         可被用作微處理器的

51、從機;n         特殊應用的SPI Flash引導;n         供調試用途的UART接口;n         新功能可以通過軟件和4個GPIO添加。    限于篇幅,這里不對VS1003芯片作詳細介紹,讀者有興趣可查閱相關資料及數據手冊。注意,VS1003可以作為一個微控制器的從機,通過串行SPI接口來接收輸入的

52、比特流,輸入的比特流被解碼后,可以通過一個數字音量控制器到達一個18 位過采樣多位DAC。這樣利用一個VS1003芯片與STM32F103x處理器配合,STM32處理器讀取SD卡中的MP3文件,將其通過SPI接口送往VS1003芯片播放,然后再利用STM32F10X處理器的一些GPIO口來控制VS1003即可以實現一個MP3 Player的原形設計。 2 FAT16文件系統簡介     SD卡如果采用FAT16文件格式,按照其不同的特點和作用大致可分為5 部分:MBR區、DBR區、FAT區、FDT區和DATA區。由于SD卡一般不做引導盤,一般也不分區,因

53、此通常無MBR區,直接從DBR區開始。下面對后面四個區分別作簡介:n         DBR區    內容為系統引導記錄,它包括一個引導程序和一個被稱為BPB(Bios Parameter Block)的本分區參數記錄表。引導程序的主要任務是當MBR將系統控制權交給它時,判斷本分區根目錄是否有操作系統引導文件,如果有則將其讀入內存,并把控制權交給該文件。BPB參數塊記錄著本分區的起始扇區、結束扇區、文件存儲格式、根目錄大小、FAT個數,分配單元大小等重要參數。本系統采用的DBR結構為:

54、typedef _packed struct/* 由于Cortex-M3內核默認以對齊方式訪問,因此可能導致結構體元素之間有“空隙”,讀出的結構體元素有誤,因此需要加上關鍵字_packed,強制其以壓縮方式存儲結構體。這樣該結構體在內存空間上是一片連續的空間,不存在“空隙”情況。其它地方同理 */     u8         BS_jmpBoot3;     /ofs:0.典型的如:0xEB,0x3E,0x90   

55、;  u8         BS_OEMName8;  /ofs:3.典型的如:“MSWIN4.1”     u16        BPB_BytesPerSec;  /ofs:11.每扇區字節數     u8         BPB_SecPerClus;&

56、#160;         /ofs:13.每簇扇區數     u16        BPB_RsvdSecCnt;         /ofs:14.保留扇區數,從DBR 到FAT 的扇區數     u8         BPB_

57、NumFATs;     /ofs:16.FAT 的個數,通常為2     u16        BPB_RootEntCnt;         /ofs:17.根目錄項數     u16        BPB_TotSec16;   &#

58、160;        /ofs:19.分區總扇區數(<32M 時用)     u8         BPB_Media;        /ofs:21.分區介質標識,SD卡一般用0xF8     u16        BPB_FAT

59、Sz16;             /ofs:22.每個FAT 占的扇區數     u16        BPB_SecPerTrk;           /ofs:24.每道扇區數,對于SD卡無意義     u16   

60、;     BPB_NumHeads;    /ofs:26.磁頭數,對于SD卡無意義     u32        BPB_HiddSec;       /ofs:28.隱藏扇區數,從MBR到DBR的扇區數     u32        BPB_TotSec32;&#

61、160;     /ofs:32.分區總扇區數(32M時用)     u8         BS_DrvNum;         /ofs:36.軟盤:0x00,硬盤:0x80,SD卡無意義     u8         BS_Reservedl; 

62、      /ofs:37.保留     u8         BS_BootSig;         /ofs:38.擴展引導標記:0x29,通常對于SD卡無意義     u32        BS_VolID;    

63、;      /ofs:39.盤序列號     u8         BS_VolLab11;    /ofs:43.如“Msdos ”     u8         BS_FilSysType8;  /ofs:54.“FAT16 ”   

64、  u8         ExecutableCode448;         /ofs:62.引導代碼     u8         ExecutableMarker2;    /ofs:510.結束標識:0xAA55 FAT_BPB;n     

65、    FAT區    該區內容為文件分配表,FAT16文件系統進行空間分配的最基本單位是簇。文件分配表反映了SD卡所有簇的使用情況,通過查文件分配表可以得知任一簇的使用情況。對于FAT16來說,FAT表每項占用兩個字節。FAT表的第一項通常為FFF8H。對于其它項,若其值為0000H表示可用;FFF7H表示為壞簇;FFF8H-FFFFH之間表示該簇為某文件或目錄的最后一個簇,FFF0H-FFF6H之間為保留值;其它值則指示下一個簇的簇號。n        

66、; FDT區   該區的內容為文件目錄表,FAT文件系統的一個重要思想是把目錄(文件夾)當作一個特殊的文件來處理,FAT32甚至將根目錄當作文件處理。FAT分區中所有目錄文件,實際上可以看作是一個存放其它文件(文件夾)入口參數的數據表。因此,目錄占用空間的大小并不等同于其下所有數據的大小,但也不等于0,通常是占很小的空間。其具體的存儲原理是:不管目錄文件所占空間為多少簇,一簇為多少扇區、多少字節;系統都會以32個字節為單位,進行目錄文件所占簇的分配。本系統目錄項使用的結構體如下:typedef _packed structu8    

67、        FileName8;            /ofs:0.文件名u8            ExtName3;            /ofs:8.擴展名u8      &#

68、160;       Attribute;                 /ofs:11.文件屬性。典型值:存檔(0x20)、卷標(0x08)u8             Reserved10;          /o

69、fs:21.保留u16            Time;                     /ofs:22.時間u16            Data;       

70、0;            /ofs:24.日期u16            StartClus;                      /ofs:26.開始簇號u32     

71、;       FileLength;               /ofs:28.文件長度 DIR;   由于篇幅關系,這里不能對上面各字段進行一一介紹。本系統支持長文件名和漢字顯示,如果使用短文件名,則以ASCII編碼;當文件名超過8個字節,擴展名超過3字節時,就以長文件名的形式存儲,長文件名中的字符采用UNICODE形式編碼,每個字符占據2個字節的空間,其目錄項中偏移為11的字節即Attribute字

72、段為0FH。在存儲時將長文件名以13個字符為單位進行切割,每一組占據一個目錄項,所以可能一個文件需要多個目錄項,這時長文件名的各個目錄項按倒序排列在目錄表中,以防與其他文件名混淆。本系統采用串口作為輸入輸出接口,通過在PC的超級終端中輸入命令來對其進行控制,并在超級終端中顯示輸出的結果,如路徑、目錄列表、文件名等相關信息。超級終端輸入輸出的漢字以GB2312編碼、輸入輸出英文字符以ASCII編碼,而長文件名以UNICODE編碼。因此需要將UNICODE編碼轉化為GB2312或ASCII編碼來和用戶交互。這里使用一張排序二維表,里面有7000多個漢字UNICODE編碼對應的GB2312編碼。這里

73、查找算法采用二分查找算法,大大提高了查找效率,這對于嵌入式應用很關鍵。n         DATA區    該數據區存放文件的內容,SD卡所占用的空間絕大部分為此部分。如果文件長度大于一個簇的大小,需要多個簇存放該文件,這些放通過FAT鏈表串連起來。3 VS1003-MP3/WMA音頻編解碼器簡介     VS1003是由芬蘭VLSI Solution Oy公司所設計的一款單片MP3/WMA/MIDI音頻解碼器和ADPCM編碼器,它包含一個高性能

74、、自主產權的低功耗DSP處理器核VS_DSP4。該芯片內部結構如圖5所示,其特點如下:圖5 VS1003內部結構及引腳n         可解碼MPEG 1和MPEG 2音頻層III(CBR+VBR+ABR)、WMA 4.0/4.1/7/8/9 5-384kbps 所有流文件;WAV(PCM+IMA AD-PCM),可產生MIDI/SP-MIDI 文件;n         可對話筒輸入或線路輸入的音頻信號進行IMA ADPCM編碼;n&

75、#160;        支持MP3和WAV流;n         高音、低音控制;n         單時鐘操作(12.13MHz);n         內部PLL鎖相環時鐘倍頻器;n         低功耗

76、n         內含高性能片上立體聲數模轉換器,兩聲道間無相位差;n         內含能驅動30歐負載的耳機驅動器;n         模擬、數字、I/O單獨供電;n         為用戶代碼和數據準備了5.5KB片上RAM;n   

77、60;     串行的控制、數據接口;n         可被用作微處理器的從機;n         特殊應用的SPI Flash引導;n         供調試用途的UART接口;n         新功能可以通過軟件和4個GPIO添加。

78、    限于篇幅,這里不對VS1003芯片作詳細介紹,讀者有興趣可查閱相關資料及數據手冊。注意,VS1003可以作為一個微控制器的從機,通過串行SPI接口來接收輸入的比特流,輸入的比特流被解碼后,可以通過一個數字音量控制器到達一個18 位過采樣多位DAC。這樣利用一個VS1003芯片與STM32F103x處理器配合,STM32處理器讀取SD卡中的MP3文件,將其通過SPI接口送往VS1003芯片播放,然后再利用STM32F10X處理器的一些GPIO口來控制VS1003即可以實現一個MP3 Player的原形設計。 5 簡易MP3 Player的設計與實現第4小節所

79、介紹的聲音播放器,是通過定時器TIM4產生不同頻率方波來產生聲音的,因此只適合播放wav聲波文件,其音質也非常粗糙。如果希望播放MP3文件,并產生高品質的聲音,則需要使用專用聲音解碼芯片,這將得到一個簡易MP3 Player原型設計。5.1 硬件設計    如圖8所示,STM32F103x使用SPI2端口與VS1003芯片的SI、SO、SCLK連接;VS1003芯片的控制引腳xCS、xRESET、xDCS分別與STM32F103的PA1、PA0和PA2連接,低電平有效;VS1003的狀態引腳DREQ與STM32F103處理器的PA3連接,低電平表示需要送數據,高電

80、平表示正在處理數據。    讀者如果沒有條件制作硬件,可以使用一塊VS1003的評估板和STM103V100評估板配置,只需要使用電纜實現上述連接及供電即可,實驗成本也非常低。圖8 簡易MP3 Player硬件原理圖5.2 軟件程序設計    由上面所述內容及圖2、圖8可以得到簡易MP3 Player的軟件工作過程:通過SPI1從SD卡中讀取MP3文件,將所讀取的內容通過SPI2發送到VS1003解碼器中播放;PC機可通過USB總線讀寫SD卡的內容,傳送MP3文件;PC機的超級終端用于發送MP3播放命令、顯示MP3 播放狀態。

81、0;   由于SPI1讀取SD卡的速度遠超過VS1003播放聲音的速度,因此在VS1003播放SPI2送給其的聲音數據期間,SPI1能從SD卡中讀取下次播放所須的數據,不會產生聲音不連續的情況。    該系統軟件程序主要包含以下源文件,下面分別介紹其中主要的一些函數。限于篇幅這里不能給出工程的源代碼,讀者可在附件里下載所有源代碼。n         main.c    該源文件包含以下幾個主要函數:l   

82、      USART_Scanf_Name和USART_Scanf_Cmd:用于從超級終端獲取輸入字符串;l         PrintPass:用于在超級終端上輸出提示符“X:>”;l         main: 主函數,首先初始化系統時鐘、串口、USB接口、SPI1、SPI2,通過命令啟動VS1003芯片,檢測并在超級終端上打印SD卡的信息;然后根據用戶在超級中輸入的命令進行

83、操作,這里有“dir”、“cd”、“read”、“free”、“usb”、“vstest”、“play”七個簡單的命令,分別是目錄項列表、目錄更換、以文本方式讀取文件、查詢SD空余空間、啟動讀卡器功能、VS1003正弦測試、和播放MP3聲音文件;如果輸入“Play *.mp3”,則處理器開始從SD卡中讀取相應的MP3文件,并將其送VS1003芯片播放;n         VS1003.c    該文件主要提供VS1003芯片的驅動,包含以下幾個主要函數:l  

84、60;      VS1003_Config:配置STM32處理器與VS1003芯片連接的相關引腳,包括SPI2、PA1、PA0、PA2、PA3;l         SPIGetChar:通過SPI從VS1003讀取一個數據;l         SPIPutChar:通過SPI向VS1003寫一個數據,如果是MP3聲音數據,則VS1003將解碼并播放;l         Mp3ReadRegister:讀取VS1003寄存器的值;l         Mp3WriteRegister:寫VS1003寄

溫馨提示

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

評論

0/150

提交評論