OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7374|回复: 7

sd卡建立文件夹后再建立文件,建立文件时返回值说找不到路径?

[复制链接]

20

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-7-6
在线时间
61 小时
发表于 2015-11-21 22:04:27 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#define __SHOW_SD_PROCEDURE__ RTC_TimeTypeDef RTC_TimeStruct; //__align(8) 8字节对其 RTC_DateTypeDef RTC_DateStruct; char FileDirName[16]; int j = 0; DIR FileDir; DIR* CreateNewFileDir(void) { sprintf(FileDirName, "/%02d-%2d-%2d",RTC_DateStruct.RTC_Year, RTC_DateStruct.RTC_Month, RTC_DateStruct.RTC_Date); f_mkdir(FileDirName); //以当前的日期创建一个文件夹 } static int i = 0; char FileName[64]; char CntBuf[64]; u8 res_open = 1; int open = 0; char date[16]; char time[16]; FIL File; FIL* CreateNewFile(void) { sprintf(FileName, "/%02d-%2d-%2d/%02d-%2d-%2d.txt", RTC_DateStruct.RTC_Year, RTC_DateStruct.RTC_Month, RTC_DateStruct.RTC_Date, RTC_TimeStruct.RTC_Hours, RTC_TimeStruct.RTC_Minutes, RTC_TimeStruct.RTC_Seconds); sprintf(date, "Date: %02d:%02d:%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date); sprintf(time, "Time: %02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds); LCD_ShowString(60, 80, 210, 16, 16, date); LCD_ShowString(60, 110, 210, 16, 16, time); while(res_open!=0) { res_open = f_open(&File, FileName, FA_OPEN_ALWAYS | FA_WRITE ); if(++open > 2) { sprintf(CntBuf, "f_open = %d", res_open); LCD_ShowString(60, 50, 210, 16, 16, CntBuf); } } res_open = 1; open = 0; f_lseek(&File, 0); #ifdef __SHOW_SD_PROCEDURE__ LCD_ShowString(60, 140, 210, 16, 16, FileName); #endif LCD_ShowString(60, 170, 210, 16, 16, "CreateNewFile = "); LCD_ShowNum(200, 170, ++i, 8, 16); return &File; } #define FILE_BLOCK_CNT 20 int FileBlockCnt = 0; int FileCnt = 0; int NowDate=0; int main(void) { char CntBuf[64]; FIL *SDFile = NULL; //------------------------------- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 //------------------------------- delay_init(168); // 初始化延时函数 uart_init(115200); // 初始化串口波特率为115200 LED_Init(); // 初始化LED LCD_Init(); // LCD初始化 RS485_Init(115200); // 初始化RS485串口2 RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits, 0); // 配置WAKE UP中断,1秒钟中断一次 IWDG_Init(4, 2500); //与分频数为64,重载值为2500,溢出时间为5s exfuns_init(); //为fatfs相关变量申请内存 usmart_dev.init(72); my_mem_init(SRAMIN); //初始化内部内存池 SD_InitializeCards(); f_mount(fs[0], "0:", 1); //注册工作区 // //----------------------------- while(1) { if(QueueFullWithData) { if(FileBlockCnt == 0) { IWDG_Feed(); //喂狗 RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); if (NowDate!=RTC_DateStruct.RTC_Date) { CreateNewFileDir(); NowDate = RTC_DateStruct.RTC_Date; } SDFile = CreateNewFile(); IWDG_Feed(); //喂狗 //sd卡存储的内容越多,打开的时间越慢 } f_write(SDFile, QueueFullWithData, QUEUE_SIZE, (UINT*)&bw); delay_ms(10); QueueFullWithData = NULL; LCD_ShowString(60, 200, 210, 16, 16, "Saved File Block = "); LCD_ShowNum(200, 200, ++FileBlockCnt, 8, 16); if(FileBlockCnt == FILE_BLOCK_CNT) { f_close(SDFile); FileBlockCnt = 0; LCD_ShowString(60, 230, 210, 16, 16, "Saved File Cnt = "); LCD_ShowNum(200, 230, ++FileCnt, 8, 16); } } IWDG_Feed(); //喂狗 } }[/mw_shl_code] [mw_shl_code=c,true]建立好文件夹以后,往文件夹里面建立txt文件,结果返回值说找不到路径,请问是哪里有错了?[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

问题解决了,是由于sd卡中已经有了要建立的文件夹,导致f_mkdir(FileDirName);            //以当前的日期创建一个文件夹 这句的返回值为FR_EXITING,所以f_open才会返回5
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-7-6
在线时间
61 小时
 楼主| 发表于 2015-11-21 22:04:28 | 显示全部楼层
问题解决了,是由于sd卡中已经有了要建立的文件夹,导致f_mkdir(FileDirName);            //以当前的日期创建一个文件夹
这句的返回值为FR_EXITING,所以f_open才会返回5
回复

使用道具 举报

20

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-7-6
在线时间
61 小时
 楼主| 发表于 2015-11-22 10:49:34 | 显示全部楼层
f_open的返回值是5,NO_PATH
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-11-22 22:18:56 | 显示全部楼层
新建完close了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-7-6
在线时间
61 小时
 楼主| 发表于 2015-11-22 22:30:45 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
是新建完文件夹要close吗 ,还是新建完文件close?新建文件每次都close了。
新上电的时候如果sd卡是直接插在板子上的f_open会返回5,然后把sd卡拔出来重新插入后会好。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-11-22 22:57:56 | 显示全部楼层
回复【4楼】kekehuhu:
---------------------------------
新建文件要close。
文件夹没试过。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-7-6
在线时间
61 小时
 楼主| 发表于 2015-11-23 09:57:22 | 显示全部楼层
[mw_shl_code=c,true]024 sprintf(FileName, "/%02d-%2d-%2d/%02d-%2d-%2d.txt", 025 RTC_DateStruct.RTC_Year, RTC_DateStruct.RTC_Month, 026 RTC_DateStruct.RTC_Date, RTC_TimeStruct.RTC_Hours, 027 RTC_TimeStruct.RTC_Minutes, RTC_TimeStruct.RTC_Seconds); 028 sprintf(date, "Date: %02d:%02d:%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date); 029 sprintf(time, "Time: %02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds); 030 LCD_ShowString(60, 80, 210, 16, 16, date); 031 LCD_ShowString(60, 110, 210, 16, 16, time); 032 033 while(res_open!=0) 034 { 035 res_open = f_open(&File, FileName, FA_OPEN_ALWAYS | FA_WRITE ); 036 if(++open > 2) 037 { 038 sprintf(CntBuf, "f_open = %d", res_open); 039 LCD_ShowString(60, 50, 210, 16, 16, CntBuf); 040 } 041 } [/mw_shl_code]
就这块的f_open返回值为5,说是没有路径,可是我单步跟踪路径格式是对的,把卡拔下来插上就又可以了,就时不能直接把卡插在板子上直接上电工作。
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
发表于 2016-1-28 16:52:25 | 显示全部楼层

请问原子:我想用f_mkdir("test");建立一个文件夹,返回值是FR_OK,应该是成功了,但是TF卡在电脑上看却没有这个文件夹,而且当我再次f_mkdir("test")的时候,还是FR_OK,而不是FR_EXISTING,请问这是怎么回事啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 02:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表