FatFS f_write никогда не возвращается - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь записать файл на SD-карту, используя плату разработки STM32F401RET6.Я использую адаптер SDIO, который я получил на amazon (https://www.amazon.ca/gp/product/B07C26YZPK/ref=oh_aui_detailpage_o06_s00?ie=UTF8&psc=1). В 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-карти все действуют сая.

...