STM32 基础系列教程 42 - SDMMC+Fatfs

67 篇文章 83 订阅
62 篇文章 76 订阅

前言

本节我们将基于42讲 “STM32 基础系列教程 41 - SDMMC” 的基础来实现基于SD卡文件系统的文件操作。

 

示例详解

基于硬件平台: 正点源子的stm32f4 探索者开发板,主要使用了SDIO接口和文件系统,MCU 的型号是 STM32F4ZET6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的开发板及部分原理图:

https://www.eeboard.com/shop/data/uploads/2018/08/01/1533087371.jpg

 

 

    1. 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:

 

      1. 系统时钟树

 

      1. 串口配置(用于程序调试)

 

      1. RCC配置

      1. SYS配置

 

      1. SDIO配置

开DMA,不是必需但建议开!

      1. 文件系统配置

      1. 中断配置

DMA及SDIO中断设置,原则是全局中断优先级高于DMA中断:

      1. 引脚配置

      1. 堆栈配置,本工程较大,可以适当加大堆栈大小:

 

    1. 工程代码

本实验工程代码较第41讲会增加以下程序源文件:

      1. 在fatfs.c 中加入如下图所示代码:

最后为了打印信息需要,在main.c中 USER CODE 4 区加入如下代码:

    1. 编译工程,调试代码:

(注:在使用探索者F4调试时,下载或仿真调试时先不要PC串口工具连接上开发板的USB_232接口,有可能导致程序运行不了--boot0引脚电平不对,可以先跑起来再在PC串口工具上连接相应端口!!,可按下面的具体操作步骤来操作—>>  )

 

串口已打开,程序全速运行(F5或单击全速运行图标)相看运行结果:

程序运行结果:

可以看到文件的读写操作已成功,如果有SD卡读卡器的话,可以在电脑上看到SD卡中有一个STM32cube.txt文件,其内容为"This is STM32 working with FatFs"。

 

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

 

文中源码资料下载,在公众号里给十三发消息:

下载|STM32基础系列教程42

 

关注十三公众号

 

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卡中写入数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值