标题: [零基础学习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
1.75 MB, 下载次数: 11, 下载积分: 黑币 -5
作者: Y!NG 时间: 2018-7-20 09:50
请问这个移植过程是怎么样的?外接SD卡是不是固定引脚
作者: kerisd 时间: 2018-7-20 13:56
学习学习学习
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |