1 軟件程序設(shè)計
簡易聲音播放器的軟件工作過程:通過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機超級終端上。
該系統(tǒng)軟件程序主要包含以下源文件,下面分別介紹其中主要的一些函數(shù)。限于篇幅這里不能給出工程的
全部源代碼,讀者可在realview網(wǎng)站下載。
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:用于從超級終端獲取輸入字符串;
PrintPass:用于在超級終端上輸出提示符"X:>";
main: 主函數(shù),首先初始化系統(tǒng)時鐘、串口、連接SD卡的SPI1,與SD進行通訊初始化,檢測并在超級
終端上打印SD卡的信息;然后根據(jù)用戶在超級中輸入的命令進行操作,這里有"dir"、"cd"、"read"、
"free"、"play"五個簡單的命令,分別是目錄項列表、目錄更換、以文本方式讀取文件、查詢SD空余
空間和播放聲音文件;如果輸入"Play ***.wav",則處理器開始從SD卡中讀取相應的聲波文件,并將
其放入相應的緩沖區(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卡獲取響應;
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ū)號;
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
該文件提供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
該文件僅包含一個函數(shù)TIM2_IRQHandler,即在每次TIM2中斷時從緩沖器中讀取音頻數(shù)據(jù)送TIM4定時器,
以用于產(chǎn)生不同頻率的聲音。
UnicodeToGB2312.c
該文件僅包含一個函數(shù)UnicodeToGB2312,處理從UniCode編碼到GB2312字符的轉(zhuǎn)換,用于處理長文件名。
2 運行過程
(1) 使用MDK通過ULINK 2仿真器連接開發(fā)板,或使用兩根USB電纜分別將CN1和CN5 與PC機USB端口相連
(使用板上自帶的UlinkMe);
(2) 使用串口線將開發(fā)板的串口COM0與PC機連接,在PC機上運行windows自帶的超級終端串口通信程序
(波特率115200、1位停止位、無校驗位、無硬件流控制);或者使用其它串口通信程序;
(3) 打開實驗例程目錄MP3 Player\Simple Wave Player下的Simple Wave Player.Uv2工程,將其編譯鏈
接后燒寫到開發(fā)板中;
(4) 將帶有測試聲波文件TEST1.wav、TEST2.wav拷貝到SD卡中,并將SD插入評估板的SD連接器中;
(5) 重啟動開發(fā)板,在超級終端上將看到SD卡的信息以及提示符"X:>",鍵入dir命令然后回車將列出
SD卡上的所有文件和目錄;
(6) 可在超級終端中輸入"dir"、"cd"、"free"、"read"等命令(注:read 命令后跟文件名;讀出并
輸出文件的文本內(nèi)容,可以正確顯示文本文件如以txt,c,h,s為后綴的文件),觀察運行結(jié)果;注意,
由于程序中沒有進行大小寫轉(zhuǎn)換,因此命令只能使用小寫;
(7) 在超級終端中輸入"play TEST1.wav"或"play TEST2.wav",如果程序運行正常,通過開發(fā)板的揚聲
器或者耳機將能聽到音樂聲。
0.png (129.87 KB, 下載次數(shù): 64)
下載附件
2016-10-12 16:09 上傳
0.png (56.39 KB, 下載次數(shù): 77)
下載附件
2016-10-12 16:09 上傳
所有資料下載含源程序:
迷你STM32照相機OV7670.zip
(4.41 MB, 下載次數(shù): 108)
2016-10-12 16:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|