记录STM32H743使用STMCUBEMX配置SDMMC

1、新建工程
2、配置工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、启动STM32CUBEMX
(1)配置RCC
在这里插入图片描述
在这里插入图片描述

(2)配置SDMMC1
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、SD卡初始化

int sdcard_status = 0;
HAL_SD_CardCIDTypedef sdcard_cid;
MX_SDMMC1_SD_Init();
fre = HAL_RCC_GetSysClockFreq();
printf("%d\r\n",fre);
fre = HAL_RCC_GetHCLKFreq();
printf("HCLKFreq = %d\r\n",fre);
fre = HAL_RCC_GetPCLK1Freq();
printf("PCLK1Freq = %d\r\n",fre);
fre = HAL_RCC_GetPCLK2Freq();
printf("PCLK2Freq = %d\r\n",fre);


sdcard_status = HAL_SD_GetCardState(&hsd1);
if(sdcard_status == HAL_SD_CARD_TRANSFER)
{
		printf("SD card init ok!\r\n\r\n");
		
		//打印SD卡基本信息
		printf("SD card information!\r\n");
		printf("CardCapacity: %llu\r\n",((unsigned long long)hsd1.SdCard.BlockSize*hsd1.SdCard.BlockNbr));
		printf("CardBlockSize: %d \r\n",hsd1.SdCard.BlockSize);
		printf("RCA: %d \r\n",hsd1.SdCard.RelCardAdd);
		printf("CardType: %d \r\n",hsd1.SdCard.CardType);
		
		//读取并打印SD卡的CID信息
		HAL_SD_GetCardCID(&hsd1,&sdcard_cid);
		printf("ManufacturerID: %d \r\n",sdcard_cid.ManufacturerID);
}
else
{ 
		printf("SD card init fail!\r\n" );
}

参考:
https://blog.csdn.net/mculover666/article/details/100555620

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
STM32H743是一款高性能的微控制器,它内置了SDMMC控制器,可以用于SD卡和MMC卡的读写操作。下面是使用STM32CubeMX和RT-Thread Studio进行SDMMC配置的详细过程: 1. 打开STM32CubeMX,选择对应的芯片型号,打开SDMMC功能。 2. 配置SDMMC时钟,使其与SD卡或MMC卡的时钟匹配。 3. 配置SDMMC的数据线和命令线,使其与SD卡或MMC卡的接口匹配。 4. 生成代码并导入到RT-Thread Studio中。 5. 在RT-Thread Studio中编写SDMMC读写操作的代码,例如: ```c #include "stm32h7xx_hal.h" #include "drv_sdmmc.h" #define SDMMC_BLOCK_SIZE 512 SD_HandleTypeDef hsd1; int sdmmc_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 = 2; if (HAL_SD_Init(&hsd1) != HAL_OK) { return -1; } return 0; } int sdmmc_read(uint32_t block_addr, uint8_t *buf, uint32_t block_cnt) { if (HAL_SD_ReadBlocks(&hsd1, buf, block_addr, block_cnt, SDMMC_TIMEOUT) != HAL_OK) { return -1; } return 0; } int sdmmc_write(uint32_t block_addr, uint8_t *buf, uint32_t block_cnt) { if (HAL_SD_WriteBlocks(&hsd1, buf, block_addr, block_cnt, SDMMC_TIMEOUT) != HAL_OK) { return -1; } return 0; } ``` 以上代码中,sdmmc_init()函数用于初始化SDMMC控制器,sdmmc_read()函数用于读取SD卡或MMC卡中的数据,sdmmc_write()函数用于向SD卡或MMC卡中写入数据。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*枫*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值