STM32H750 双路 SDMMC 配置指南
1. 引言
本人之前做了STM32F407的SD卡FREERTOS系统FATFS的读写,都能正常使用但是STM32H750系列的配置更加复杂一点;今天就写一个STM32H750双路SMMIC配置指南
我们成功在 STM32F407 上实现了基于 FreeRTOS 和 FATFS 的 SD 卡读写。然而,STM32H750 系列在存储接口上提供了更强大的双路 SDMMC(Secure Digital MultiMedia Card)控制器,这为需要高速、多存储设备或冗余备份的应用场景(如双卡备份、数据日志分离)提供了硬件支持。但与之对应的,其配置也更为复杂。
本文将详细讲解如何在 STM32H750VBT6 微控制器上,配置并使用其双路 SDMMC 接口(SDMMC1 和 SDMMC2),并集成 FATFS 文件系统与 FreeRTOS 实时操作系统,实现稳定可靠的双卡文件操作。
上图 时钟的配置


SDMMIC1配置




MDMA的配置
至此配置基本结束main里初始化MX_MDMA_Init和MX_SDMMC1_SD_Init系统自带;SD_int是自己写的调用FATFS函数读取

贴上代码
uint8_t FindBINFileOnSD(char *filename)
{
FATFS fs;
DIR dir;
FILINFO fno;
FRESULT res;
// 挂载
if (f_mount(&fs, "0:", 1) != FR_OK) return 0;
// 打开目录
if (f_opendir(&dir, "0:") != FR_OK) {
f_mount(NULL, "0:", 0);
return 0;
}
// 查找
while (1) {
res = f_readdir(&dir, &fno);
if (res != FR_OK || fno.fname[0] == 0) break;
if (fno.fattrib & AM_DIR) continue;
char *ext = strrchr(fno.fname, '.');
if (ext && (strcmp(ext, ".bin") == 0 || strcmp(ext, ".BIN") == 0))
{
sprintf(filename, "0:%s", fno.fname);
f_closedir(&dir);
f_mount(NULL, "0:", 0);
return 1;
}
}
f_closedir(&dir);
f_mount(NULL, "0:", 0);
return 0;
}
2. 硬件准备与原理
2.1 硬件连接
STM32H750 的 SDMMC1 和 SDMMC2 引脚定义不同,需根据数据手册正确连接:
SDMMC1 (通常用于 SD 卡槽 1):
- CK: PC12
- CMD: PD2
- D0: PC8
- D1: PC9
- D2: PC10
- D3: PC11
- CD (Card Detect): 可选,如 PG2
SDMMC2 (通常用于 SD 卡槽 2 或 eMMC):
- CK: PD6
- CMD: PD7
- D0: PD0
- D1: PD1
- D2: PD2 (注意:与 SDMMC1 CMD 引脚 PD2 冲突,需分时复用或仅用 1-bit 模式)
- D3: PD3
- CD: 可选,如 PG3
重要提示:SDMMC2 的 D2 引脚 (PD2) 与 SDMMC1 的 CMD 引脚冲突。若需同时使用两路 4-bit 模式,必须进行引脚重映射或使用 1-bit 模式。本文示例将 SDMMC2 配置为 1-bit 模式以规避冲突。
2.2 时钟配置
SDMMC 时钟来源于 pll1_q_ck 或 pll2_r_ck,通过 AHB 总线时钟分频。为确保 SD 卡正常工作(识别阶段时钟需 ≤ 400 kHz,数据传输阶段可提高),需要在 CubeMX 中正确配置:
- SDMMC Kernel Clock: 例如 200 MHz (来自 PLL2)
- SDMMC Clock Divider: 在初始化阶段设置为 0xFE (即 /(2254)),使 SDMMC_CK ≈ 200 MHz / (2254) ≈ 393.7 kHz,满足识别要求。
- 识别后,可通过
HAL_SD_ConfigWideBusOperation和调整分频器提高至最高 50 MHz (SD 高速模式) 或 100 MHz (SD 超高速模式,需卡支持)。
3. CubeMX 工程配置
3.1 系统核心配置
- SYS: Debug 设为
Serial Wire。 <


489

被折叠的 条评论
为什么被折叠?



