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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9398|回復: 10
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
樓主
使用STM32F103ZET6與TF卡連接,使用SPI通信方式外加FATFS文件系統,親測可用。

FAT文件系統實驗

1.              了解 FAT 文件系統
2.              學會移植 FATFS
3.              學會使用 FATFS

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

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

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


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

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

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

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

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

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

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


1)              disk_initialize()函數


移植代碼如下:
/*-----------------------------------------------------------------------*/
/*              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;

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

2)              disk_status()函數

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

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

3)              disk_read()函數


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

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()函數

移植代碼如下:
/*-----------------------------------------------------------------------*/
/* 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()函數

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

#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()函數

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

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

然后編譯就可以使用了。


13.3 FATFS函數說明
FATFS 有許多函數可以提供給我們使用,主要函數如下:
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
在這里我們就不一一介紹這些函數的怎么使用了,大家可以查看 doc 文件下
的使用說明,在使用說明中也有一些簡單的使用例程,可以使大家很好的理解如 何使用這些函數。在這里我們就簡單講一些常用的函數。
1.              f_mount()函數 這個函數用來注冊/注銷文件系統對象(工作區域)的函數,在使用 FATFS 之
前,要先調用這個函數來注冊文件系統,又稱掛載系統。 它有兩個輸入參數:
1)              邏輯驅動器的標號。我們在 diskio.c 中有這么一個定義:

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

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

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

我們例程中調用的讀取內存容量的函數如下:
  1. /*************************************************************
  2. * Function Name              : FATFS_GetFree
  3. * Description              :  讀取總磁盤大小和空閑磁盤大小
  4. * Input              : drv:磁盤編號
  5. *              * total:保存讀取到的總磁盤大小
  6. *              * free:保存讀取到的空閑磁盤大小
  7. * Output              : None
  8. * Return              : res:讀取狀態。0:成功;其他則是其他相應的錯誤 信息。
  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. /*  得到磁盤信息及空閑簇數量 */
  16. res = f_getfree((const TCHAR*)drv, &fre_clust, &fs1);
  17. if(res == 0)              //表示讀取成功
  18. {
  19. tot_sect = (fs1->n_fatent-2) * fs1->csize;  //得到總扇區數
  20. fre_sect = fre_clust * fs1->csize;              //得到空閑扇區數
  21. #if _MAX_SS!=512 //扇區大小不是 512 字節,則轉換為 512 字節
  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 主函數
  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 轉成 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. }
復制代碼


單片機源程序如下:
  1. /*******************************************************************************
  2. *                 
  3. *                                        普中科技
  4. --------------------------------------------------------------------------------
  5. * 實 驗 名                 : FATFS實驗
  6. * 實驗說明       : 將程序下載進去后點擊復位,LCD上顯示SD卡和FLASH
  7.                                         的總容量和可用內存,
  8.                                         如果在未插上SD卡的時候無顯示,插上SD卡后按下復位進行重新檢測
  9.                                         LED指示燈閃爍。
  10.                                         按下復位開關重新運行,其他子函數注釋
  11.                                         可以參考之前的函數注釋
  12. * 連接方式       :         
  13. * 注    意                 :         所用函數在頭文件.c文件內
  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轉成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文件系統實驗", RED, BLACK);
  144. }
復制代碼

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

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:393051 發表于 2018-9-16 21:39 | 只看該作者
這是個好例程,不錯!!
回復

使用道具 舉報

板凳
ID:86450 發表于 2018-9-27 10:11 | 只看該作者

這是個好例程,不錯!!
回復

使用道具 舉報

地板
ID:62514 發表于 2019-3-2 16:35 | 只看該作者
這是個好例程,看過一次,現在編譯不了了。
回復

使用道具 舉報

5#
ID:500133 發表于 2019-5-9 22:40 | 只看該作者
內容是SD卡的, TF卡真的能用嗎?
回復

使用道具 舉報

6#
ID:247125 發表于 2019-5-17 06:26 來自觸屏版 | 只看該作者
謝謝分享
回復

使用道具 舉報

7#
ID:74229 發表于 2019-9-6 09:51 | 只看該作者
參考一下。謝謝分享
回復

使用道具 舉報

8#
ID:138247 發表于 2019-11-3 13:09 | 只看該作者

謝謝分享。正在學習。。
回復

使用道具 舉報

9#
ID:420863 發表于 2019-11-29 09:14 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

10#
ID:291726 發表于 2020-5-25 09:36 | 只看該作者
謝謝分享!
回復

使用道具 舉報

11#
ID:398695 發表于 2020-12-5 19:10 | 只看該作者
xibinke 發表于 2019-5-9 22:40
內容是SD卡的, TF卡真的能用嗎?

可以的,TF卡和SD卡的引腳定義基本一致,協議也是一樣的
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国免费av | 久久久久网| 天天天天天操 | 国产精品偷乱一区二区三区 | 国产精品成人一区二区三区 | 欧美精品一区在线观看 | 一区二区三区网站 | 伊人在线视频 | 午夜在线影院 | 欧美日韩成人一区二区三区 | 欧美久久久 | 久久久久久久久国产精品 | 久久久久久爱 | 中文字幕在线观看日本 | 亚洲一区二区三区在线视频 | 国产主播99| 黄色片毛片 | 欧美啪啪网 | 免费黄色小网站 | 日日操视频 | 综合久久久| 欧美国产一区二区 | 亚洲小视频 | 中文字幕伊人 | 一级片久久久 | 久久免费福利视频 | 日本成人一区二区 | 一级黄色片免费 | 亚洲精品网站在线观看 | 亚洲欧美网站 | 特级丰满少妇一级aaaa爱毛片 | 黄色小视频免费 | 日韩中文字幕第一页 | 欧美精品在线播放 | 能看的黄色网址 | 日日干日日干 | 日韩午夜在线 | 国产午夜影院 | 国产理论在线观看 | 毛片网站免费观看 | 一级毛片黄色 |