【发布时间】:2018-12-31 07:35:07
【问题描述】:
我现在正在为 STM32F7 1.8.0 使用 CubeMx 4.23.0 和 FW 包 MCU是Core746i板上的STM32F746。 一切都是 CubeMx 自动生成的。
main.c:
SCB_EnableICache();
SCB_EnableDCache();
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SDMMC1_SD_Init();
MX_USB_DEVICE_Init();
MX_FATFS_Init();
HAL_Delay(3000);
DebugString("start OK");
uint8_t res = 0;
FATFS SDFatFs;
FIL MyFile; /* File object */
char SD_Path[4];
res = f_mount(&SDFatFs, (TCHAR const*)SD_Path, 0);
sprintf(DebugStr, "f_mount = 0x%02X", res);
DebugString(DebugStr);
res = f_open(&MyFile, "test.txt", FA_READ);
sprintf(DebugStr, "f_open = 0x%02X", res);
DebugString(DebugStr);
sdmmc.c:
void MX_SDMMC1_SD_Init(void)
{
hsd1.Instance = SDMMC1;
hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B;
hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
hsd1.Init.ClockDiv = 7;
//HAL_SD_Init(&hsd1);
// ^^^^^ I also tried this here
//HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B)
//^^^^ and this
}
如果是 f_mount(&SDFatFs, (TCHAR const*)SD_Path, 0)
- f_mount = 0x03
- f_open = 0x01
使用 0(现在不要挂载)输出为:
- f_mount = 0x00
- f_open = 0x03
0x03 的值是 FR_NOT_READY,但官方信息很模糊
我尝试过的事情:
- 将 HAL_SD_Init(&hsd1) 添加到 MX_SDMMC1_SD_Init() 因为我没有找到 SD 卡 GPIO 初始化发生在哪里。
- 2 GB 无名 SD 卡,1 GB Transcend 卡。
- 不同的 hsd1.Init.ClockDiv 3 到 255。
- 全部重新焊接。
- 使用 HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B) 切换到 4 位宽总线;
- 打开和关闭引体向上。
但是卡仍然没有挂载。它以 FAT 格式格式化,在 PC 上运行,我尝试打开的文件存在,但为空。
如何让它挂载? 提前致谢!
【问题讨论】:
-
您尝试打开的文件存在吗? “test.txt”是否存在?即使挂载失败?您收到 FR_NOT_READY 是因为 1. 硬件级别有问题,请检查 FAT-FS 引脚是否已映射 2. 未找到 FAT。但你说你已经检查过这些。请尝试像 f_mount(fs, "", 0);即以路径作为根路径安装。我不确定你是否传递了一个空字符数组。
-
检查代码中的硬件映射。测试 f_mount(fs, "", 0);如果这也失败了,说明你的硬件有问题。
标签: stm32 stm32f7 fatfs cubemx