stm32 - FatFS f_write 永不返回
问题描述
我正在尝试使用 STM32F401RET6 开发板写入 SD 卡上的文件。我正在使用我在亚马逊上获得的 SDIO 适配器(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 卡,并且都表现相同。
解决方案
推荐阅读
- txt - 我想一次将字符添加到txt文档中所有行的开头和结尾
- drools - jBPM 登录失败:未授权:所有预定义用户都不起作用
- reactjs - 使用 CRSF 和自定义标头在 React 中重定向
- kendo-ui - 向 Kendo Grid 指定列中的所有单元格添加更改事件
- java - 如何使webview返回上一页并且不显示about:空白?
- screen-scraping - 当我使用 selenium webdriver.Chrome().close() 时,它会切换到之前的窗口吗?
- c++ - Eigen:我需要定义一个具有定义大小的矩阵 - 不是动态(不是堆)而是固定大小(在堆栈上)
- flutter - 颤动的TexteditingController在ios上不起作用
- java - 如何在 firebase 数据库中隐藏类似数据?
- python - 在字符串中查找多个子字符串而不对其进行多次迭代