FatFS f_write永不返回

时间:2018-12-06 16:32:21

标签: stm32 sd-card stm32f4discovery fat32 fatfs

我正在尝试使用STM32F401RET6开发板写入SD卡上的文件。我正在使用在亚马逊(https://www.amazon.ca/gp/product/B07C26YZPK/ref=oh_aui_detailpage_o06_s00?ie=UTF8&psc=1)上安装的SDIO适配器。在STM32CubeMX中,我启用了1位SDIO,并将FATFS中间件设置为SD卡。我没有在“配置”标签中进行任何更改。

我正在“ USER CODE BEGIN 2”(在void main的无限循环正上方)中使用以下代码来编写“ Hello World!”。到SD卡。

FATFS fs;
FIL file;
UINT bytesWritten;
FRESULT res;

res = f_mount(&fs, SDPath, 1);
PRINT_RESULT("Mounting filesystem", res);

if (res != FR_OK) return 1;

res = f_open(&file, "WRITE.TXT\0", FA_WRITE | FA_CREATE_ALWAYS);
PRINT_RESULT("Opening file", res);

if (res != FR_OK) return 1;

char data[] = "Hello World!\0";
res = f_write(&file, data, sizeof(data), &bytesWritten);
PRINT_RESULT("Writing file", res);

f_close(&file);

此代码使用我编写的宏来更轻松地记录这些函数的结果。

#define PRINT_RESULT(action, res) do { \
  char msg[sizeof(action) + 6]; \
  sprintf(msg, "%s: %03d\n", action, res); \
  HAL_UART_Transmit(&huart2, (uint8_t *) msg, sizeof(msg), 100); \
} while (0);

当我上传并运行它时,我在串行监视器中得到了以下内容:

Mounting filesystem: 000
Opening file: 000

这意味着挂载文件系统和打开文件以进行写入均成功。但是,f_write函数永远不会返回。将SD卡放入计算机后,我可以看到该文件已创建,但为空。

我可以读取文件,但没有问题。我还尝试了f_puts,该方法也不起作用。我正在使用STM32CubeMX 4.27,并使用生成的Makefile进行编译。我已经尝试了几种SD卡,并且所有行为都相同。

0 个答案:

没有答案