STM32H750IBTX SDMMC 配置 从 CubeMX 到 FATFS + FreeRTOS

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_ckpll2_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 系统核心配置

  1. SYS: Debug 设为 Serial Wire
  2. <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值