新版STM32CubeMX的FatFs中间件访问SD卡失败的解决笔记

本文详细解析了在STM32CubeMXVer5.6.0及FatFsR0.12c环境下,f_open函数返回错误的问题。通过检查硬件原理图、调整STM32CubeMX配置,尤其是PlatformSettings中插卡检测引脚的设置,成功解决了f_mount和f_open函数的错误,确保了FatFs中间件在STM32开发框架中的正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字

STM32CubeMX Ver5.6.0、FatFs R0.12c、STM32Cube库、没有使用FreeRTOS、f_open函数返回错误、ioc、Platform Settings

问题的提出

    在给IoT网关和复杂节点制作IoT开发框架时,打算把FatFs中间件加入到开发框架中,却发现老是在f_mount或f_open函数中出错,但FatFs的设置反复检查都没错,唯一就是更新了STM32CubeMX和STM32Cube库为最新版(2020-4-15)。

1)检查原理图

很多开发板都没有把该引脚连到GPIO上,所以硬件上是不能实现插卡检测功能的。

2)MX(STUM32CubeMX)做的修改

很多开发板没有用GPIO连接卡座的检测插卡引脚,然后STM32CubeMX的前面的版本是OK的,但新的MX版本加入了一个名为”Platform Settings”,里面有一个关于“插卡检测引脚的设置”,因为没有实际的引脚连接,这里提示感叹号。

选一个STM32F407ZGT6没用到的引脚,这里是PG15,设为GPIO Input,一定要设为下拉,如下图所示:

3)加入测试代码,并调试

3.1)插卡、对卡进行写入操作

MX生成代码,在MDK中加入一些测试代码,调试通过(在SD卡上写入字符串,拿到PC上读出正常,并且FatFs的API的返回值全部是FR_OK),如下图所示:

3.2)拨卡、对卡进行写入操作

代码同上,测试结果如下:

结论

新版的STM32MX给FatFs中间件的配置上进行了改动,主要是针对BSP API,新增了一个Platform Settings,并要求提供一个引脚来专门检测插卡(Detect_SDIO(GPIO:Input) , 为了解决MX生成代码中会在“检查卡状态函数中”总是失败导致的f_open函数失败,解决办法多种多样,比如可以直接改代码也是可行的,我这里是通过拉低一个没用引脚来告诉FatFs中间件的执行流程,卡永远是插入的。

整个测试项目,含ioc和工程可在这下载

 

<think>好的,我现在需要处理用户关于STM32开发笔记的查询。首先,用户提到了几个引用内容,需要整合这些信息来生成相关的回答和相关问题。用户的需求是记录或查阅与STM32相关的开发笔记,因此需要明确如何组织这些笔记,并可能提供一些实际的应用案例或步骤。 首先,引用[1]提到在STM32开发板上使用RT-Thread驱动SD进行文件读写的步骤。这涉及到配置FATFSSDIO功能,编译代码,烧录程序。这可以作为开发笔记中的一个实例,说明如何实现特定功能。需要确保在回答中正确引用,并可能分步骤说明。 引用[2]介绍了STM32CubeIDE的安装和功能,包括其基于Eclipse框架,支持外设配置、代码生成、编译和调试。这部分信息可以帮助用户了解开发工具的使用,可能在开发笔记中涉及环境搭建和工具配置的内容。需要强调STM32CubeIDE的重要性,以及如何利用其功能简化开发流程。 引用[3]提到STM32CubeF0开发包中的中间件组件和样例程序,这对于实际项目开发非常有用。用户可能需要了解如何利用这些样例程序加速开发,因此在开发笔记中可以包含如何查找和使用这些示例的方法。 接下来,用户想要记录或查阅开发笔记,可能需要知道如何组织这些笔记,包括硬件配置、软件环境、驱动开发、调试技巧等。需要将这些引用内容分类整理到不同的章节中,例如环境搭建、外设驱动、中间件应用等。 生成相关问题部分,需要考虑用户可能遇到的进一步问题。例如,如何配置SDIO和FATFS,如何安装STM32CubeIDE,如何利用样例程序等。同时,可能涉及性能优化、常见问题解决、RTOS的应用等。 需要注意的是,回答必须使用中文,数学公式用$...$,独立公式用$$...$$,但根据用户的问题,可能数学公式较少,更多是代码和步骤说明。要确保LaTeX语法正确,但问题中可能涉及的数学内容不多,但如果有涉及的地方需正确应用。 最后,回答结构要清晰,分步骤说明如何整理开发笔记,每个部分结合引用内容,并自然地添加引用标识。例如,在讲解配置SD时引用[^1],在介绍开发工具时引用[^2],在样例程序部分引用[^3]。 需要检查是否有遗漏的信息,比如是否有其他引用或用户提到的关键点需要覆盖。确保所有引用都被正确使用,并且相关问题的生成覆盖用户可能感兴趣的方面,如工具使用、驱动开发、中间件应用、调试方法等。</think>### STM32开发笔记整理指南 整理STM32开发笔记时,建议按以下模块分类,并结合实际开发需求记录关键步骤和技巧: #### 1. **开发环境搭建** - **STM32CubeIDE安装与配置** 安装STM32CubeIDE时需注意其集成开发环境基于Eclipse®框架,支持代码生成、编译调试及外设配置[^2]。例如,在安装后需配置GCC工具链和GDB调试器。 ```bash # 示例:Ubuntu下安装命令(部分步骤) sudo apt-get install stm32cubeide ``` - **固件包管理** STM32CubeF0等固件包提供丰富的中间件(如FATFS、USB库)和样例程序,可直接在`Drivers/CMSIS/Examples`目录下查找参考代码。 #### 2. **外设驱动开发** - **SD文件系统实现** 在STM32上驱动SD配置SDIO接口和FATFS文件系统: 1. 在STM32CubeMX中启用`SDIO`和`FATFS`组件 2. 生成代码后添加文件读写逻辑,例如: ```c FATFS fs; f_mount(&fs, "", 1); // 挂载文件系统 ``` 完整步骤可参考正点原子开发板示例[^1]。 - **GPIO与中断配置** 记录关键寄存器配置(如推挽输出、上拉电阻)和中断服务函数设计。 #### 3. **调试与优化** - **性能分析工具** 使用STM32CubeIDE内置的`System Viewer`监控CPU负载,或通过`Tracealyzer`分析RTOS任务调度。 - **常见问题排查** 例如SD初始化失败时,检查时钟配置SDIO_CK频率需适配类型)或DMA传输对齐问题。 #### 4. **RTOS与中间件应用** - **RT-Thread集成** 在RTOS中管理SD读写任务时,需注意线程优先级和堆栈分配。例如: ```c rt_thread_create("sd_task", sd_thread_entry, RT_NULL, 1024, 20, 10); ``` 具体配置方法可参考RT-Thread官方文档。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值