標題: [零基礎學習STM32]第十四講:FATFS實驗—文件操作 [打印本頁]
作者: kkhkbb 時間: 2018-5-3 21:46
標題: [零基礎學習STM32]第十四講:FATFS實驗—文件操作
本帖最后由 kkhkbb 于 2018-5-4 18:54 編輯
一、 概述
1、 文件系統簡介:
(1)文件系統:管理和存儲文件信息的軟件機構。
(2)常用的文件系統:
- FAT/FATFS。
- NTFS(基于安全性的文件系統,是Wundow NT采用的獨特的文件系統結構。
- CDFS:CDFS是大部分光盤的文件系統。
2、 FATFS文件系統簡介:
FATFS是一個完全免費開源的FAT文件系統模塊,專門為小型的嵌入式系統而設計,完全用標準C語言編寫,具有良好的硬件平臺獨立性,可移植到8051、PIC、ARM等系列單片機上而只需做簡單的修改。它支持FAT12、FAT16、FATI32,支持多個存儲媒介;有獨立的緩沖區,可以對多個文件進行讀/寫,并特別對8位單片機和16位單片機做了優化。
3、 FATFS文件系統特點:
- Window兼容的FAT文件系統(支持FAT12/FAT16/FAT32)。
- 代碼量少、效率高。
- 與平臺無關、移植簡單,全部通過C語言編寫。
- 多種配置選項:支持多卷(物理驅動器或分區,最多10個卷)、多個ANSI/OEM代碼頁、支持長文件名、支持RTOS、支持多種扇區大小等。
4、 文件系統主要文件介紹:
二、 硬件電路

圖14_0 原理圖芯片引角連接

圖14_1 原理圖TF卡座引角連接
三、 實驗原理
STM32F407上帶有SDIO控制器,iCore3核心板上將SDIO連接到TF卡座上。本實驗將Micro SD卡插入TF卡座上即可。通過FATFS創建test.txt文件,并且寫入數據0-511,然后讀出并打印到終端上。硬件連接示意圖如下:
圖14_2 工作原理示意圖
四、 源代碼
主函數
- <font color="#444444"><font face="Tahoma">/*
- * --------------------
- * Company : LUOYANG GINGKO TECHNOLOGY CO.,LTD.
- : 洛陽銀杏科技有限公司
- * --------------------
- * Project Name : iCore3 fatfs_sd
- * Description : iCore3 fatfs_sd
- * --------------------
- * Tool Versions : uVision V5.17.0.0
- * Target Device : STM32F407IGT6
- * --------------------
- * Engineer : ysloveivy.
- * Revision : 0.01
- * Created Date : 2015.12.02
- * --------------------
- * Engineer :
- * Revision :
- * Modified Date :
- * --------------------
- * Additional Comments :
- *
- * --------------------
- */
- //--------------------------- Include ---------------------------//
- #include "..\include\led.h"
- #include "..\include\main.h"
- #include "..\include\usart.h"
- #include "..\fatfs\ff.h"
- #include "..\fatfs\diskio.h"
- #include "..\include\stm324xg_eval_sdio_sd.h"
- #include "..\fwlib\inc\stm32f4xx_gpio.h"
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- //---------------------------- Define ---------------------------//
- //-------------------------- Variable ---------------------------//
- //--------------------- Function Prototype ----------------------//
- //--------------------------- Function --------------------------//
- /*
- * Name : main
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 12/02/2015
- *
- * create.
- * --------------------
- */
- int main(void)
- {
- int i,j;
- FIL file; //文件對象
- FATFS fatfs; //邏輯驅動器的工作區
- static FRESULT res; //FRESULT函數公共結果代碼
- unsigned char write_buffer[512]; //寫文件緩沖區
- unsigned char read_buffer[512]; //讀文件緩沖區
- unsigned int counter;
- led.initialize();
- usart4.initialize(115200);
- usart4.printf("\x0c");
- usart4.printf("\033[1;32;40m");
- usart4.printf("\r\n\r\nhello! I am iCore3!\r\n\r\n\r\n");
- //判斷SD卡是否初始化
- if(SD_Init() != 0){
- usart4.printf("SD ERROR!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("SD Initialize successful!\r\n");
- }
- for(i = 0;i < 1000000;i++);
- res = f_mount(&fatfs,"0:",1); //掛載SD卡
- if(res != RES_OK){
- usart4.printf("f_mount error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_mount successful!\r\n");
- }
- res = f_open(&file,"0:/test.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
- //打開驅動器0上的源文件
- if(res != RES_OK){
- usart4.printf("f_open error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_open successful!\r\n");
- }
- res = f_lseek(&file,0); //移動寫指針到文件首
- if(res != RES_OK){
- usart4.printf("f_lseek error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_lseek successful!\r\n");
- }
- for(i = 0;i < 512;i++){
- write_buffer[i] = i % 256;
- }
- res = f_write(&file,write_buffer,512,&counter); //將緩沖器中的內容寫入源文件
- if(res != RES_OK || counter != 512){
- usart4.printf("f_write error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_write successful!\r\n");
- }
- res = f_lseek(&file,0); //移動讀指針到文件首
- if(res != RES_OK){
- usart4.printf("f_lseek error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_lseek successful!\r\n");
- }
- res = f_read(&file,read_buffer,512,&counter);
- if(res != RES_OK || counter != 512){
- usart4.printf("f_read error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_read successful!\r\n");
- }
- f_close(&file); //關閉源文件
- usart4.printf("read data:\r\n");
- for(i = 0;i < 32;i++){
- for(j = 0; j < 16; j ++)
- usart4.printf(" %02X",read_buffer[i*16+j]);
- usart4.printf("\r\n");
- }
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_GREEN_ON;
- for(i = 0;i < 10000000;i++);
- LED_GREEN_OFF;
- }</font></font>
復制代碼五、 實驗步驟
1. 把仿真器與iCore3的SWD調試口相連(直接相連或者通過轉接器相連);
2. 把iCore3通過Micro USB線與計算機相連,為iCore3供電;
3. 打開PuTTY串口終端(注PuTTY使用方法見附錄);
4. 打開Keil MDK開發環境,并打開本實驗工程;
5. 燒寫程序到iCore3上;
6. 也可以進入Debug模式,單步運行或設置斷點驗證程序邏輯。
六、 實驗現象
在終端顯示屏上可以看到FATFS操作的信息,如下圖:
圖14_3 實驗現象圖
七、 資料及代碼包下載
鏈接:http://pan.baidu.com/s/1eRHeR9S 密碼:go0n
附錄:
1、iCore3供電后,打開計算機----屬性----設備管理器----端口。
圖14_4 COM口查看示意圖
2、打開PuTTY。
圖14_5 PuTTY軟件設置示意圖
3、此時就可以燒寫程序進行驗證了。
-
-
iCore3_14_FATFS.zip
2018-5-4 01:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.75 MB, 下載次數: 11, 下載積分: 黑幣 -5
作者: Y!NG 時間: 2018-7-20 09:50
請問這個移植過程是怎么樣的?外接SD卡是不是固定引腳
作者: kerisd 時間: 2018-7-20 13:56
學習學習學習
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲国产成人av
|
99在线观看视频
|
少妇高潮久久久久久潘金莲
|
99一区二区
|
一级毛片播放
|
色香蕉网
|
久久超|
精品黄色
|
日皮视频在线观看
|
欧美一级特黄视频
|
国产免费高清
|
国产一级黄色录像
|
国产片一区二区
|
www.一级片|
哦┅┅快┅┅用力啊┅aps
|
欧美二区视频
|
免费一级黄色录像
|
日韩国产一区
|
国产二区精品
|
日韩精品少妇
|
国产一级一片免费播放放a
免费国产视频
|
九九热在线视频
|
黄色av毛片
|
一本色道久久加勒比精品
|
精品国产区一区二
|
中国一级黄色
|
不卡av在线播放
|
天天射日日干
|
五月天婷婷激情
|
婷婷av在线
|
9l视频自拍九色9l视频成人
|
日产久久视频
|
四虎成人在线
|
日韩一区二区在线视频
|
国产精品国产三级国产专区52
|
99视频在线精品免费观看2
|
亚洲精品久久久
|
午夜视频成人
|
亚洲一区在线视频
|
av香蕉|
色网站在线|