STM32无法创建.txt文件

STM32F407通过HAL库的FATFS文件系统创建一个.txt文件,但文件无法成功创建,且创建文件的程序会使整个工程卡死。

img

img

img


如图所示,如果我不按KEY1,工程能够正常运行,但我按KEY1后,整个工程就卡死了,RESET也没用,必须断电重启。

先确认文件系统是否正常,把fmount fopen fwrite的result打印出来确认一下。
还有一种可能是,在循环里判断按钮状态间隔太短,导致fatfs一些列函数被快速反复执行,导致一些错误发生

你的按键需要加防抖处理的,否则,第一次创建文件成功,后面按键重复进入,再创建文件肯定会失败的

看看ATFS配置问题:在使用HAL库的FATFS文件系统之前,需要正确配置FATFS库和SD卡的硬件接口和时钟等参数,否则可能导致文件系统无法正常工作。你可以检查你的FATFS配置是否正确,例如检查时钟设置是否正确,SD卡接口是否正确连接,以及SD卡初始化是否成功等。

这个没问题就看看,文件名或路径问题:在创建.txt文件时,需要提供正确的文件名和路径信息。如果文件名或路径不正确,可能会导致文件无法成功创建。你可以检查文件名和路径是否正确,例如使用FATFS的f_opendir和f_open函数打开目录和文件,确保它们返回了正确的值。

我的主页又相关的这个操作的博客,希望能帮到你!!!

以下是一些建议可以帮助您解决这个问题:

确保您已经连接了SD卡或其他储存设备,并正确初始化。

如果仍然出现问题,请检查硬件连接、供电以及SD卡是否损坏。
希望以上建议能对您有所帮助!

根据您提供的信息,似乎涉及到了STM32F407这个单片机,并且想要通过HAL库创建一个名为".txt"的文件。但是,文件无法成功创建,且创建文件的程序会使整个工程卡死。

首先,我们需要确认一下是否有权限来创建这个文件。如果当前用户没有权限来创建这个文件,那么即使文件已经存在,也无法创建。您可以使用如下代码检查权限:

#include <权限.h>

if (文件权限 < 0x0700 && !(filemode & 0x00FF0000)) {
    printf("文件权限不足,无法创建文件!\n");
    return -1;
}

其中,filemode表示当前用户是否有权限访问文件,文件权限表示当前用户是否有权限创建文件。

接下来,我们需要确认一下文件是否存在。如果文件已经存在,则无法创建。您可以使用如下代码检查文件是否存在:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    char filename[MAX_PATH];
    int fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY | O_RDONLY, 0666);
    if (fd < 0) {
        printf("无法创建文件!\n");
        return -1;
    }

    printf("文件存在,无法创建!\n");
    return -2;
}

其中,open函数用于创建文件,O_CREAT表示必须指定文件名,O_TRUNC表示文件名必须被粉碎,O_WRONLY表示只能读取,O_RDONLY表示只能读取。

最后,我们需要确认一下创建文件的程序是否正确。如果程序存在问题,则可能会导致文件无法创建或者创建文件后导致整个工程卡死。您可以使用如下代码检查程序是否正确:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char filename[MAX_PATH];
    int fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY | O_RDONLY, 0666);
    if (fd < 0) {
        printf("无法创建文件!\n");
        return -1;
    }

    printf("文件创建成功!\n");
    return 0;
}

其中,open函数用于创建文件,O_CREAT表示必须指定文件名,O_TRUNC表示文件名必须被粉碎,O_WRONLY表示只能读取,O_RDONLY表示只能读取。