久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9119|回復(fù): 10
收起左側(cè)

STM32 FATFS源碼移植與資料詳解(庫函數(shù)版)

  [復(fù)制鏈接]
ID:398695 發(fā)表于 2018-9-16 16:57 | 顯示全部樓層 |閱讀模式
使用STM32F103ZET6與TF卡連接,使用SPI通信方式外加FATFS文件系統(tǒng),親測可用。
0.png 0.jpg
FAT文件系統(tǒng)實驗

1.              了解 FAT 文件系統(tǒng)
2.              學(xué)會移植 FATFS
3.              學(xué)會使用 FATFS

我們學(xué)習(xí)了 SD 卡的使用,并且學(xué)會了怎么對 SD 卡進行讀寫操作,不過要 真正應(yīng)用 SD 卡,必須學(xué)習(xí)使用文件系統(tǒng)。什么是文件系統(tǒng)呢,操作系統(tǒng)用于明 確磁盤或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu),即在磁盤上組織文件的方法。我們電 腦的 windows 系統(tǒng)使用的就是 FAT 文件系統(tǒng),大家都知道,一般我們新買的 SD 卡,如果沒有使用過,插入電腦的時候都要先格式化,為什么呢?就是因為 SD 卡里面沒有建立FAT 文件系統(tǒng),所以格式化之后,建立了 FAT 文件系統(tǒng),電腦 才能識別 SD 卡上面的內(nèi)存和文件。FAT 文件系統(tǒng)根據(jù)字節(jié)長度,有FAT12、 FAT16、FAT32。

13.1 FATFS簡介
FATFS 是一個完全免費開源的 FAT 文件系統(tǒng)模塊,專門為小型的嵌入式系 統(tǒng)而設(shè)計。它完全用標(biāo)準(zhǔn) C 語言編寫,所以具有良好的硬件平臺獨立性,可以 移植到 8051、PIC、AVR、SH、Z80、H8、ARM    等系列單片機上而只需做簡 單的修改。它支持 FATl2、FATl6  和FAT32,支持多個存儲媒介;有獨立的緩 沖區(qū),可以對多個文件進行讀/寫,并特別對 8  位單片機和 16  位單片機做了優(yōu) 化。反正 FSTFS優(yōu)點蠻多,挺好用,就是了,呵呵…大家下載最新的 FSTFS 可 以在 elm-chan 這個網(wǎng)站下載到。

13.2 FATFS的移植
1.              FATFS 源碼文件說明
我們這里移植示范使用的是 R0.09b 版本,在我們例程文件下有一個 R0.09b
版本的壓縮包。 我們解壓該壓縮包,會得到兩個文件夾:


其中 doc 文件夾是各種使用說明,有英文版的和日文版的。而 src 文件夾就 是我們要使用的 FATFS 源碼:

其中我們不需要修改的文件是:
ff.h              FATFS 和應(yīng)用模塊公用的包含文件
ff.c              FATFS 模塊
diskio.h              FATFS 和 disk I/O  模塊公用的包含文件
interger.h              數(shù)據(jù)類型定義

里面還有個 option 文件夾,這個是可選的外部功能(比如支持中文等)。一 般我們使用中文的話,將 cc936.c 添加到工程里面就好了。

那么我們需要修改的文件也就兩個了。
ffconf.h              FATFS 模塊配置文件
diskio.c              FATFS 和 disk I/O  模塊接口層文件

2.              ffconf.h 配置說明
這 ffconf.h 的頭文件里面是關(guān)于 FATFS 的各種設(shè)置,我們可以根據(jù)自己的需 要來裁剪 FATFS,已達(dá)到自己想要的標(biāo)準(zhǔn)。我們來看一下它都有那些設(shè)置:
1)              _FS_TINY
這個設(shè)置是配置是使用標(biāo)準(zhǔn)模式,還是微小模式。我們使用標(biāo)準(zhǔn)模式, 這里設(shè)置為:0。
2)              _FS_READONLY
是否使用只讀模式,我們選擇可讀可寫。設(shè)置為:0。
3)              _FS_MINIMIZE
這個設(shè)置是選擇是否裁剪掉一些函數(shù),具體裁剪那些,大家可以查看下 面的設(shè)置說明,我們這里使用的全功能模式。設(shè)置為:0。
4)              _USE_STRFUNC
這個用來設(shè)置是否支持字符串類操作,我們選擇使用。設(shè)置為:1。
5)              _USE_MKFS
使用使用格式化,我們這里選擇使用。設(shè)置為:1。
6)              _USE_FASTSEEK

使用使能快速定位,我們選擇使用。設(shè)置為:1。
7)              _USE_LABEL
是否啟用磁盤卷標(biāo)功能。使用也可以,不使用也可以。我們這里使用。 設(shè)置為:1。
8)              _USE_FORWARD
這個是在 TINY 模式下的設(shè)置,我們這里使用標(biāo)準(zhǔn)模式,不理它。
9)              _CODE_PAGE
這個用于設(shè)置語言類型。我們使用的中文。設(shè)置為:936
10) _USE_LFN
該選項用于設(shè)置是否支持長文件名(還需要_CODE_PAGE 支持),取值 范圍為 0~3。0,表示不支持長文件名,1~3 是支持長文件名,但是存儲地方 不一樣。我們這里就默認(rèn)使用 FATFS 本身的存儲方式了。設(shè)置為:1。
11) _MAX_LFN
設(shè)置最大文件名長度,我們直接設(shè)置最大。設(shè)置為:255。
12) _LFN_UNICODE
是否使用 FATFS 的字符編碼。我們不使用。設(shè)置為:0
13) _FS_RPATH
這里也是一些函數(shù)裁剪,我們這里設(shè)置為:1。
14) _VOLUMES
這里設(shè)置的是支持的卷軸數(shù)量,我們掛載 SD 卡,有時候可以掛載下
FLASH,所以這里我們設(shè)置為兩個:2。
15) _MAX_SS
這里是設(shè)置扇區(qū)緩沖的最大值,我們設(shè)置為:512。
16) _MULTI_PARTITION
是否使用多重分區(qū)分配。我們這里設(shè)置為:0。
17) _USE_ERASE 使用使用扇區(qū)擦除。我們這里不那么麻煩,想使用的時候在設(shè)置。設(shè)置 為:0。
18) _WORD_ACCESS
這里定義使用權(quán)限。一般不使用。我們設(shè)置為:0。
19) _FS_REENTRANT
20) _FS_TIMEOUT
21) _SYNC_t
22) _FS_LOCK
這幾個設(shè)置,我們都沒有使用到,所以直接保持默認(rèn)狀態(tài)就好。

3.              diskio.c 移植
diskio.c 是最底層的接口函數(shù)。一般需要編寫 6 個接口函數(shù),如圖:


1)              disk_initialize()函數(shù)


移植代碼如下:
/*-----------------------------------------------------------------------*/
/*              Inidialize a Drive              初始化磁盤              */
/*-----------------------------------------------------------------------*/

DSTATUS disk_initialize (
BYTE pdrv              /* Physical drive nmuber (0..) */
)
{
DRESULT res = RES_ERROR;
int result;

switch (pdrv) {
case SD_CARD :
result = SD_Init();
if(result == 0)
{


}
break;
res = RES_OK;


case USB :
break;
default:
break;

}

return res;

}
其實修改并不多,在這個函數(shù)里面,紅色字體部分就是 SD 卡初始化移植部 分。

2)              disk_status()函數(shù)

移植代碼如下:
/*-----------------------------------------------------------------------*/
/* Get Disk Status  獲取磁盤信息              */
/*-----------------------------------------------------------------------*/

DSTATUS disk_status (
BYTE pdrv              /* Physical drive nmuber (0..) */
)
{
pdrv = pdrv;
return 0;
}
這里我們不使用這個函數(shù),所以我們什么都不寫,直接返回 0 就好。

3)              disk_read()函數(shù)


移植代碼如下:
/*-----------------------------------------------------------------------*/
/* Read Sector(s)              讀取扇區(qū)              */
/*-----------------------------------------------------------------------*/

DRESULT disk_read (
BYTE pdrv,              /* Physical drive nmuber (0..) */

BYTE *buff,              /* Data buffer to store read data */ DWORD sector, /* Sector address (LBA) */

BYTE count              /* Number of sectors to read (1..128) */
)
{
DRESULT res = RES_ERROR;
int result;

switch (pdrv) {
case SD_CARD :
result = SD_ReadDisk(buff, sector, count);
if(result)
{


}
else
{

}
res = RES_ERROR;

res = RES_OK;

break;

case USB :

break;

default:
break;
}

return res;
}
SD 卡移植是紅色字體部分。


4)              disk_write()函數(shù)

移植代碼如下:
/*-----------------------------------------------------------------------*/
/* Write Sector(s)              */
/*-----------------------------------------------------------------------*/

#if _USE_WRITE DRESULT disk_write (

BYTE pdrv,              /* Physical drive nmuber (0..) */

const BYTE *buff,              /* Data to be written */ DWORD sector,              /* Sector address (LBA) */

BYTE count              /* Number of sectors to write (1..128) */
)
{
DRESULT res = RES_ERROR;
int result;

switch (pdrv) {
case SD_CARD :
result = SD_WriteDisk((uint8_t*)buff, sector, count);
if(result == 0)
{
res = RES_OK;
}
break;

case USB :
break;

default:
break;
}
return res;
}
#endif


5)              disk_ioctl()函數(shù)

移植代碼如下:
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions              其他表參數(shù)的獲取              */
/*-----------------------------------------------------------------------*/

#if _USE_IOCTL DRESULT disk_ioctl (


BYTE pdrv,              /* Physical drive nmuber (0..) */ BYTE cmd,              /* Control code */

void *buff              /* Buffer to send/receive control data */
)
{
DRESULT res = RES_PARERR;

switch (pdrv) {
case SD_CARD :
switch(cmd)
{
case CTRL_SYNC:              //刷新磁盤
res = RES_OK;
break;
case GET_SECTOR_SIZE: //得到媒體大小
*(WORD*)buff = 512;
res = RES_OK;
break;
case GET_BLOCK_SIZE:              //塊大小
*(WORD*)buff = 8;
res = RES_OK;
break;
case GET_SECTOR_COUNT:
if(SD_ReadCapacity((uint32_t *)buff) == 0)
{
res = RES_OK;
}

break; default: break;

}
break;

case USB :
res = RES_PARERR;
break;
}

return res;
}
#endif
紅色部分就是移植部分。

6)              get_fattime()函數(shù)

這個函數(shù)沒有直接給在 diskio.c 里面,需要你自己寫。代碼如下:
DWORD get_fattime(void)
{
return 0;
}
因為我們例程里面沒有使用時間,所以,直接返回零就好。

好了,到這里我們整個移植過程也就完成了,只要我們添加到工程里面 如下:

然后編譯就可以使用了。


13.3 FATFS函數(shù)說明
FATFS 有許多函數(shù)可以提供給我們使用,主要函數(shù)如下:
1)   f_mount - Register/Unregister a work area
2)   f_open - Open/Create a file
3)   f_close - Close a file
4)   f_read - Read file
5)   f_write - Write file
6)   f_lseek - Move read/write pointer, Expand file size
7)   f_truncate - Truncate file size
8)   f_sync - Flush cached data
9)   f_opendir - Open a directory
10) f_readdir - Read a directory item
11) f_getfree - Get free clusters
12) f_stat - Get file status
13) f_mkdir - Create a directory
14) f_unlink - Remove a file or directory
15) f_chmod - Change attribute
16) f_utime - Change timestamp
17) f_rename - Rename/Move a file or directory
18) f_chdir - Change current directory
19) f_chdrive - Change current drive
20) f_getcwd - Retrieve the current directory
21) f_getlabel - Get volume label
22) f_setlabel - Set volume label
23) f_forward - Forward file data to the stream directly
24) f_mkfs - Create a file system on the drive
25) f_fdisk - Divide a physical drive
26) f_gets - Read a string
27) f_putc - Write a character
28) f_puts - Write a string
29) f_printf - Write a formatted string
30) f_tell - Get the current read/write pointer
31) f_eof - Test for end-of-file on a file
32) f_size - Get size of a file
33) f_error - Test for an error on a file
在這里我們就不一一介紹這些函數(shù)的怎么使用了,大家可以查看 doc 文件下
的使用說明,在使用說明中也有一些簡單的使用例程,可以使大家很好的理解如 何使用這些函數(shù)。在這里我們就簡單講一些常用的函數(shù)。
1.              f_mount()函數(shù) 這個函數(shù)用來注冊/注銷文件系統(tǒng)對象(工作區(qū)域)的函數(shù),在使用 FATFS 之
前,要先調(diào)用這個函數(shù)來注冊文件系統(tǒng),又稱掛載系統(tǒng)。 它有兩個輸入?yún)?shù):
1)              邏輯驅(qū)動器的標(biāo)號。我們在 diskio.c 中有這么一個定義:

#define SD_CARD              0
那么我們的 SD 卡的邏輯驅(qū)動器標(biāo)號就是“0”,當(dāng)我們要掛載 SD 卡的時 候,這個參數(shù)就要設(shè)置為:0。
2)              指向文件系統(tǒng)對象的指針 這個是用來存放系統(tǒng)信息的變量,它的文件類型是結(jié)構(gòu)體 FATFS,所以我們
只要定義 FATFS 類型的參數(shù),傳遞給它就可以了。而如果是注銷掉文件系統(tǒng), 那么傳遞給它一個 NULL 指針就可以了。

2.              f_getfree()函數(shù) 這個函數(shù)就是我們用來讀取內(nèi)存空間要調(diào)用的函數(shù),在使用說明里面,
它也給出如何使用這個函數(shù)的例程,首先我們來看一下:

在這個例程中,我們可以看出,使用 f_getfree()來讀取容量的步驟為:
1)              掛載文件系統(tǒng)。 例程上面沒有寫出要掛載文件系統(tǒng),不過一般在進行 FATFS 的函數(shù)
操作之前都要調(diào)用 f_mount()函數(shù)掛載文件系統(tǒng)。
2)              調(diào)用 f_getfree()讀取相應(yīng)的參數(shù)。
3)              從文件系統(tǒng)參數(shù)中讀取總的內(nèi)存和空閑的內(nèi)存。

我們例程中調(diào)用的讀取內(nèi)存容量的函數(shù)如下:
  1. /*************************************************************
  2. * Function Name              : FATFS_GetFree
  3. * Description              :  讀取總磁盤大小和空閑磁盤大小
  4. * Input              : drv:磁盤編號
  5. *              * total:保存讀取到的總磁盤大小
  6. *              * free:保存讀取到的空閑磁盤大小
  7. * Output              : None
  8. * Return              : res:讀取狀態(tài)。0:成功;其他則是其他相應(yīng)的錯誤 信息。
  9. *************************************************************/
  10. uint8_t FATFS_GetFree(uint8_t *drv, uint32_t *total, uint32_t *free)
  11. {
  12. FATFS *fs1;
  13. u8 res;
  14. DWORD fre_clust=0, fre_sect=0, tot_sect=0;
  15. /*  得到磁盤信息及空閑簇數(shù)量 */
  16. res = f_getfree((const TCHAR*)drv, &fre_clust, &fs1);
  17. if(res == 0)              //表示讀取成功
  18. {
  19. tot_sect = (fs1->n_fatent-2) * fs1->csize;  //得到總扇區(qū)數(shù)
  20. fre_sect = fre_clust * fs1->csize;              //得到空閑扇區(qū)數(shù)
  21. #if _MAX_SS!=512 //扇區(qū)大小不是 512 字節(jié),則轉(zhuǎn)換為 512 字節(jié)
  22. tot_sect *= fs1->ssize/512;
  23. fre_sect *= fs1->ssize/512;
  24. #endif
  25. *total = tot_sect >> 1;              //單位為 KB
  26. *free = fre_sect >> 1;              //單位為 KB
  27. }

  28. return res;
  29. }

  30. 13.4 FATFS 主函數(shù)
  31. int main(void)
  32. {
  33. uint8_t showData[5] = {0, 0, 0, 0, 0}, ledState; FATFS fs0, fs1;
  34. uint32_t              free, total, i = 0;
  35. TFT_Init(); FLASH_Init(); GUI_DisplayInit();
  36. USART1_Config(9600); LED_Config(); while(SD_Init())
  37. {
  38. GUI_Show12Char(0, 126, "SD  卡初始化錯誤", RED, BLACK);
  39. }
  40. f_mount(0,&fs0);              //掛載 SD 卡
  41. f_mount(1,&fs1);              //掛載 FLASH 卡
  42. /*  讀取 SD 卡 FAT 的容量和空余 */
  43. if(FATFS_GetFree("0:", &total, &free))
  44. {
  45. }
  46. else
  47. {
  48. BLACK);
  49. BLACK);
  50. }
  51. printf(" SD 卡 FAT 錯誤!");
  52. GUI_Show12Char(0, 147, "SD 卡 FAT 錯誤!", RED, BLACK);
  53. /*  顯示 FAT 容量 */
  54. total >>= 10;              //從 KB 轉(zhuǎn)成 MB
  55. free >>= 10;
  56. printf(" sd card total memory:%d MB\n", total);
  57. printf(" sd card free memory:%d MB\n", free);
  58. showData[0] = (total % 10000 /1000) + '0'; showData[1] = (total % 1000 /100) + '0'; showData[2] = (total % 100 /10) + '0';showData[3] = (total % 10) + '0';
  59. GUI_Show12Char(0, 126, "sd card total memory is:              MB", RED,
  60. GUI_Show12Char(192, 126, showData, RED, BLACK);
  61. showData[0] = (total % 10000 /1000) + '0'; showData[1] = (total % 1000 /100) + '0'; showData[2] = (total % 100 /10) + '0';showData[3] = (total % 10) + '0';
  62. GUI_Show12Char(0, 147, "sd card free memory is:              MB", RED,
  63. GUI_Show12Char(184, 147, showData, RED, BLACK);
  64. /*  讀取 FLASH 卡 FAT 的容量和空余 */
  65. while(FATFS_GetFree("1:", &total, &free))
  66. {
  67. f_mkfs(1, 1, 4096); //如果讀取失敗,格式化 FLASH
  68. i++;
  69. if(i > 10)
  70. {
  71. break;
  72. }
  73. }
  74. /*  顯示 FAT 容量 */
  75. if(i > 10)
  76. {

  77. }
  78. else
  79. {
  80. BLACK);
  81. BLACK);
  82. }
  83. printf(" FLASH FAT 錯誤!");
  84. GUI_Show12Char(0, 84, "FLASH FAT error!", RED, BLACK);
  85. printf(" FLASH total memory:%d KB\n", total);
  86. printf(" FLASH free memory:%d KB\n", free);
  87. showData[0] = (total % 10000 /1000) + '0'; showData[1] = (total % 1000 /100) + '0'; showData[2] = (total % 100 /10) + '0';showData[3] = (total % 10) + '0';
  88. GUI_Show12Char(0, 84, "FLASH total memory is:              KB", RED,
  89. GUI_Show12Char(176, 84, showData, RED, BLACK);
  90. showData[0] = (total % 10000 /1000) + '0'; showData[1] = (total % 1000 /100) + '0'; showData[2] = (total % 100 /10) + '0';showData[3] = (total % 10) + '0';
  91. GUI_Show12Char(0, 105, "FLASH free memory is:              KB", RED,
  92. GUI_Show12Char(168, 105, showData, RED, BLACK);
  93. while(1)
  94. {
  95. /* LED 燈閃爍 */
  96. i++;
  97. if(i>0xFFFFF)
  98. {
  99. i = 0;
  100. if(ledState == 0xFE)
  101. {
  102. }
  103. else
  104. {

  105. }
  106. ledState = 0xFF;
  107. ledState = 0xFE;
  108. LED_SetState(ledState);
  109. }
  110. }
  111. }
復(fù)制代碼


單片機源程序如下:
  1. /*******************************************************************************
  2. *                 
  3. *                                        普中科技
  4. --------------------------------------------------------------------------------
  5. * 實 驗 名                 : FATFS實驗
  6. * 實驗說明       : 將程序下載進去后點擊復(fù)位,LCD上顯示SD卡和FLASH
  7.                                         的總?cè)萘亢涂捎脙?nèi)存,
  8.                                         如果在未插上SD卡的時候無顯示,插上SD卡后按下復(fù)位進行重新檢測
  9.                                         LED指示燈閃爍。
  10.                                         按下復(fù)位開關(guān)重新運行,其他子函數(shù)注釋
  11.                                         可以參考之前的函數(shù)注釋
  12. * 連接方式       :         
  13. * 注    意                 :         所用函數(shù)在頭文件.c文件內(nèi)
  14. *******************************************************************************/
  15. #include "stm32f10x.h"
  16. #include "usart.h"
  17. #include "sd.h"
  18. #include "flash.h"
  19. #include "myfatapp.h"
  20. #include "gui.h"
  21. #include "led.h"
  22. #include "ff.h"
  23. void GUI_DisplayInit(void);
  24. /****************************************************************************
  25. * Function Name  : main
  26. * Description    : Main program.
  27. * Input          : None
  28. * Output         : None
  29. * Return         : None
  30. ****************************************************************************/
  31. int main(void)
  32. {
  33.     uint8_t showData[5] = {0, 0, 0, 0, 0}, ledState;
  34.     FATFS fs0, fs1;
  35.         uint32_t  free, total, i = 0;                  
  36.     TFT_Init();
  37.     FLASH_Init();
  38.     GUI_DisplayInit();
  39.         USART1_Config(9600);
  40.     LED_Config();   
  41.     while(SD_Init())
  42.     {
  43.         GUI_Show12Char(0, 126, "SD 卡初始化錯誤", RED, BLACK);   
  44.     }
  45.    
  46.            
  47.           f_mount(0,&fs0);                                  //掛載SD卡
  48.     f_mount(1,&fs1);                                  //掛載FLASH卡
  49.         
  50.      //讀取SD卡FAT的容量和空余
  51.     if(FATFS_GetFree("0:", &total, &free))
  52.     {
  53.         printf(" SD卡 FAT 錯誤!");
  54.         GUI_Show12Char(0, 147, "SD卡 FAT 錯誤!", RED, BLACK);   
  55.     }
  56.     else
  57.     {
  58.         // 顯示FAT容量
  59.         total >>= 10;   //從KB轉(zhuǎn)成MB
  60.         free >>= 10;
  61.         printf(" sd card total memory:%d MB\n", total);
  62.         printf(" sd card free memory:%d MB\n", free);
  63.    
  64.         showData[0] = (total % 10000 /1000) + '0';
  65.         showData[1] = (total % 1000 /100) + '0';
  66.         showData[2] = (total % 100 /10) + '0';
  67.         showData[3] = (total % 10) + '0';
  68.         GUI_Show12Char(0, 126, "sd card total memory is:    MB", RED, BLACK);
  69.         GUI_Show12Char(192, 126, showData, RED, BLACK);
  70.         showData[0] = (free % 10000 /1000) + '0';
  71.         showData[1] = (free % 1000 /100) + '0';
  72.         showData[2] = (free % 100 /10) + '0';
  73.         showData[3] = (free % 10) + '0';
  74.         GUI_Show12Char(0, 167, "sd card free memory is:    MB", RED, BLACK);
  75.         GUI_Show12Char(184, 167, showData, RED, BLACK);
  76.     }
  77.     //讀取FLASH卡FAT的容量和空余
  78.     while(FATFS_GetFree("1:", &total, &free))
  79.     {
  80.         f_mkfs(1, 1, 4096); //如果讀取失敗,格式化FLASH
  81.         i++;
  82.         if(i > 10)
  83.         {
  84.             break;
  85.         }
  86.     }
  87.     //顯示FAT容量
  88.     if(i > 10)
  89.     {
  90.         printf(" FLASH FAT 錯誤!");
  91.         GUI_Show12Char(0, 84, "FLASH FAT error!", RED, BLACK);   
  92.     }
  93.     else
  94.     {
  95.         printf(" FLASH total memory:%d KB\n", total);
  96.         printf(" FLASH free memory:%d KB\n", free);
  97.    
  98.         showData[0] = (total % 10000 /1000) + '0';
  99.         showData[1] = (total % 1000 /100) + '0';
  100.         showData[2] = (total % 100 /10) + '0';
  101.         showData[3] = (total % 10) + '0';
  102.         GUI_Show12Char(0, 84, "FLASH total memory is:    KB", RED, BLACK);
  103.         GUI_Show12Char(176, 84, showData, RED, BLACK);
  104.         showData[0] = (free % 10000 /1000) + '0';
  105.         showData[1] = (free % 1000 /100) + '0';
  106.         showData[2] = (free % 100 /10) + '0';
  107.         showData[3] = (free % 10) + '0';
  108.         GUI_Show12Char(0, 105, "FLASH free memory is:    KB", RED, BLACK);
  109.         GUI_Show12Char(168, 105, showData, RED, BLACK);
  110.     }
  111.         while(1)
  112.         {
  113.         /* LED燈閃爍 */
  114.         i++;
  115.         if(i>0xFFFFF)
  116.         {
  117.             i = 0;
  118.             if(ledState == 0xFE)
  119.             {
  120.                 ledState = 0xFF;
  121.             }
  122.             else
  123.             {
  124.                 ledState = 0xFE;
  125.             }
  126.             LED_SetState(ledState);
  127.         }
  128.         }
  129. }
  130. /****************************************************************************
  131. * Function Name  : GUI_DisplayInit
  132. * Description    : 初始化彩屏顯示
  133. * Input          : None
  134. * Output         : None
  135. * Return         : None
  136. ****************************************************************************/
  137. void GUI_DisplayInit(void)
  138. {
  139.     TFT_ClearScreen(BLACK);
  140.     GUI_Show16Chinese(80, 0, "普中科技", RED, BLACK);
  141.     GUI_Show12Char(90, 21, "PRECHIN", RED, BLACK);
  142.     GUI_Show12Char(60, 42, "www點prechin點com", RED, BLACK);
  143.     GUI_Show12Char(60, 63, "FAT文件系統(tǒng)實驗", RED, BLACK);
  144. }
復(fù)制代碼

所有資料51hei提供下載:
實驗40:FATFS實驗.zip (8.17 MB, 下載次數(shù): 144)

評分

參與人數(shù) 2黑幣 +60 收起 理由
Jun默默淡定 + 10
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:393051 發(fā)表于 2018-9-16 21:39 | 顯示全部樓層
這是個好例程,不錯!!
回復(fù)

使用道具 舉報

ID:86450 發(fā)表于 2018-9-27 10:11 | 顯示全部樓層

這是個好例程,不錯!!
回復(fù)

使用道具 舉報

ID:62514 發(fā)表于 2019-3-2 16:35 | 顯示全部樓層
這是個好例程,看過一次,現(xiàn)在編譯不了了。
回復(fù)

使用道具 舉報

ID:500133 發(fā)表于 2019-5-9 22:40 | 顯示全部樓層
內(nèi)容是SD卡的, TF卡真的能用嗎?
回復(fù)

使用道具 舉報

ID:247125 發(fā)表于 2019-5-17 06:26 來自手機 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:74229 發(fā)表于 2019-9-6 09:51 | 顯示全部樓層
參考一下。謝謝分享
回復(fù)

使用道具 舉報

ID:138247 發(fā)表于 2019-11-3 13:09 | 顯示全部樓層

謝謝分享。正在學(xué)習(xí)。。
回復(fù)

使用道具 舉報

ID:420863 發(fā)表于 2019-11-29 09:14 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報

ID:291726 發(fā)表于 2020-5-25 09:36 | 顯示全部樓層
謝謝分享!
回復(fù)

使用道具 舉報

ID:398695 發(fā)表于 2020-12-5 19:10 | 顯示全部樓層
xibinke 發(fā)表于 2019-5-9 22:40
內(nèi)容是SD卡的, TF卡真的能用嗎?

可以的,TF卡和SD卡的引腳定義基本一致,協(xié)議也是一樣的
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美v在线观看 | 成人免费视频一区 | 日韩成年人视频在线 | 91精品国产一区 | 三级免费 | 欧美一区二区在线观看 | 国产视频福利 | 久久久成人免费一区二区 | 国产精品一区视频 | 视频二区国产 | 欧美精品一区二区三区在线播放 | 亚洲精品高清视频 | 99精品久久 | 亚洲综合五月天婷婷 | 日韩精品免费 | 国产精品一区二区三区在线播放 | 久久精品99久久 | 欧美国产精品 | 成人午夜毛片 | 国产日韩一区二区三免费 | 精品国产精品三级精品av网址 | 亚洲一区二区三区在线播放 | 日韩一区二区在线视频 | 天天插天天操 | 亚洲视频在线看 | av中文字幕在线 | h片在线播放 | 精品一区国产 | 中文一区二区 | 国产一区二区自拍 | 国产精品欧美一区二区三区不卡 | 久久精品久久久久久 | www.成人久久 | 一区二区中文字幕 | 国产成人亚洲精品 | 亚洲精品乱码久久久久久蜜桃 | 免费一区 | 操久久 | 亚洲国产一区二区三区 | 青青草av| 国产乱码精品一区二区三区五月婷 |