|
|
單片機(jī)源程序如下:- /* 包含頭文件 ----------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include "bsp/usart/bsp_debug_usart.h"
- #include "bsp/spi_flash/bsp_spi_flash.h"
- #include "ff.h"
- /* 私有類(lèi)型定義 --------------------------------------------------------------*/
- /* 私有宏定義 ----------------------------------------------------------------*/
- /* 獲取緩沖區(qū)的長(zhǎng)度 */
- /* 私有變量 ------------------------------------------------------------------*/
- FATFS fs; /* FatFs文件系統(tǒng)對(duì)象 */
- FIL file; /* 文件對(duì)象 */
- FRESULT f_res; /* 文件操作結(jié)果 */
- UINT fnum; /* 文件成功讀寫(xiě)數(shù)量 */
- BYTE ReadBuffer[1024]={0}; /* 讀緩沖區(qū) */
- BYTE WriteBuffer[] = /* 寫(xiě)緩沖區(qū)*/
- "歡迎使用硬石STM32開(kāi)發(fā)板 今天是個(gè)好日子,新建文件系統(tǒng)測(cè)試文件\n";
- /* 擴(kuò)展變量 ------------------------------------------------------------------*/
- /* 私有函數(shù)原形 --------------------------------------------------------------*/
- static void printf_fatfs_error(FRESULT fresult);
- /* 函數(shù)體 --------------------------------------------------------------------*/
- /**
- * 函數(shù)功能: 主函數(shù).
- * 輸入?yún)?shù): 無(wú)
- * 返 回 值: 無(wú)
- * 說(shuō) 明: 無(wú)
- */
- int main(void)
- {
- /* 調(diào)試串口初始化配置,115200-N-8-1.使能串口發(fā)送和接受 */
- DEBUG_USART_Init();
- printf("****** 這是一個(gè)基于串行FLASH的FatFS文件系統(tǒng)實(shí)驗(yàn) ******\n");
-
- //在串行Flash掛載文件系統(tǒng),文件系統(tǒng)掛載時(shí)會(huì)對(duì)SPI設(shè)備初始化
- f_res = f_mount(&fs,"1:",1);
- printf_fatfs_error(f_res);
- /*----------------------- 格式化測(cè)試 ---------------------------*/
- /* 如果沒(méi)有文件系統(tǒng)就格式化創(chuàng)建創(chuàng)建文件系統(tǒng) */
- if(f_res == FR_NO_FILESYSTEM)
- {
- printf("》FLASH還沒(méi)有文件系統(tǒng),即將進(jìn)行格式化...\n");
- /* 格式化 */
- f_res=f_mkfs("1:",0,0);
-
- if(f_res == FR_OK)
- {
- printf("》FLASH已成功格式化文件系統(tǒng)。\n");
- /* 格式化后,先取消掛載 */
- f_res = f_mount(NULL,"1:",1);
- /* 重新掛載 */
- f_res = f_mount(&fs,"1:",1);
- }
- else
- {
- printf("《《格式化失敗。》》\n");
- while(1);
- }
- }
- else if(f_res!=FR_OK)
- {
- printf("!!外部Flash掛載文件系統(tǒng)失敗。(%d)\n",f_res);
- printf("!!可能原因:SPI Flash初始化不成功。\n");
- while(1);
- }
- else
- {
- printf("》文件系統(tǒng)掛載成功,可以進(jìn)行讀寫(xiě)測(cè)試\n");
- }
-
- /*----------------------- 文件系統(tǒng)測(cè)試:寫(xiě)測(cè)試 -----------------------------*/
- /* 打開(kāi)文件,如果文件不存在則創(chuàng)建它 */
- printf("****** 即將進(jìn)行文件寫(xiě)入測(cè)試... ******\n");
- f_res = f_open(&file, "1:FatFs讀寫(xiě)測(cè)試文件.txt",FA_CREATE_ALWAYS | FA_WRITE );
- if ( f_res == FR_OK )
- {
- printf("》打開(kāi)/創(chuàng)建FatFs讀寫(xiě)測(cè)試文件.txt文件成功,向文件寫(xiě)入數(shù)據(jù)。\n");
- /* 將指定存儲(chǔ)區(qū)內(nèi)容寫(xiě)入到文件內(nèi) */
- f_res=f_write(&file,WriteBuffer,sizeof(WriteBuffer),&fnum);
- if(f_res==FR_OK)
- {
- printf("》文件寫(xiě)入成功,寫(xiě)入字節(jié)數(shù)據(jù):%d\n",fnum);
- printf("》向文件寫(xiě)入的數(shù)據(jù)為:\n%s\n",WriteBuffer);
- }
- else
- {
- printf("!!文件寫(xiě)入失敗:(%d)\n",f_res);
- }
- /* 不再讀寫(xiě),關(guān)閉文件 */
- f_close(&file);
- }
- else
- {
- printf("!!打開(kāi)/創(chuàng)建文件失敗。\n");
- }
-
- /*------------------- 文件系統(tǒng)測(cè)試:讀測(cè)試 ------------------------------------*/
- printf("****** 即將進(jìn)行文件讀取測(cè)試... ******\n");
- f_res = f_open(&file, "1:FatFs讀寫(xiě)測(cè)試文件.txt", FA_OPEN_EXISTING | FA_READ);
- if(f_res == FR_OK)
- {
- printf("》打開(kāi)文件成功。\n");
- f_res = f_read(&file, ReadBuffer, sizeof(ReadBuffer), &fnum);
- if(f_res==FR_OK)
- {
- printf("》文件讀取成功,讀到字節(jié)數(shù)據(jù):%d\n",fnum);
- printf("》讀取得的文件數(shù)據(jù)為:\n%s \n", ReadBuffer);
- }
- else
- {
- printf("!!文件讀取失敗:(%d)\n",f_res);
- }
- }
- else
- {
- printf("!!打開(kāi)文件失敗。\n");
- }
- /* 不再讀寫(xiě),關(guān)閉文件 */
- f_close(&file);
-
- /* 不再使用文件系統(tǒng),取消掛載文件系統(tǒng) */
- f_mount(NULL,"1:",1);
-
- /* 無(wú)限循環(huán) */
- while (1)
- {
- }
- }
- /**
- * 函數(shù)功能: FatFS文件系統(tǒng)操作結(jié)果信息處理.
- * 輸入?yún)?shù): FatFS文件系統(tǒng)操作結(jié)果:FRESULT
- * 返 回 值: 無(wú)
- * 說(shuō) 明: 無(wú)
- */
- static void printf_fatfs_error(FRESULT fresult)
- {
- switch(fresult)
- {
- case FR_OK: //(0)
- printf("》操作成功。\n");
- break;
- case FR_DISK_ERR: //(1)
- printf("!!硬件輸入輸出驅(qū)動(dòng)出錯(cuò)。\n");
- break;
- case FR_INT_ERR: //(2)
- printf("!!斷言錯(cuò)誤。\n");
- break;
- case FR_NOT_READY: //(3)
- printf("!!物理設(shè)備無(wú)法工作。\n");
- break;
- case FR_NO_FILE: //(4)
- printf("!!無(wú)法找到文件。\n");
- break;
- case FR_NO_PATH: //(5)
- printf("!!無(wú)法找到路徑。\n");
- break;
- case FR_INVALID_NAME: //(6)
- printf("!!無(wú)效的路徑名。\n");
- break;
- case FR_DENIED: //(7)
- case FR_EXIST: //(8)
- printf("!!拒絕訪問(wèn)。\n");
- break;
- case FR_INVALID_OBJECT: //(9)
- printf("!!無(wú)效的文件或路徑。\n");
- break;
- case FR_WRITE_PROTECTED: //(10)
- printf("!!邏輯設(shè)備寫(xiě)保護(hù)。\n");
- break;
- case FR_INVALID_DRIVE: //(11)
- printf("!!無(wú)效的邏輯設(shè)備。\n");
- break;
- case FR_NOT_ENABLED: //(12)
- printf("!!無(wú)效的工作區(qū)。\n");
- break;
- case FR_NO_FILESYSTEM: //(13)
- printf("!!無(wú)效的文件系統(tǒng)。\n");
- break;
- case FR_MKFS_ABORTED: //(14)
- printf("!!因函數(shù)參數(shù)問(wèn)題導(dǎo)致f_mkfs函數(shù)操作失敗。\n");
- break;
- case FR_TIMEOUT: //(15)
- printf("!!操作超時(shí)。\n");
- break;
- case FR_LOCKED: //(16)
- printf("!!文件被保護(hù)。\n");
- break;
- case FR_NOT_ENOUGH_CORE: //(17)
- printf("!!長(zhǎng)文件名支持獲取堆空間失敗。\n");
- break;
- case FR_TOO_MANY_OPEN_FILES: //(18)
- printf("!!打開(kāi)太多文件。\n");
- break;
- case FR_INVALID_PARAMETER: // (19)
- printf("!!參數(shù)無(wú)效。\n");
- break;
- }
- }
- /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開(kāi)發(fā)團(tuán)隊(duì) *****END OF FILE****/
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|