1、概述
本人开发了一款基于STM32F407ZG处理器的8路步进电机控制器,使用SPI3端口板载了SD卡,既然已经有了SD卡,自然要编写驱动代码挂载文件系统,下面是完整的SD卡文件系统挂载的过程。
2、STM32F407处理器SPI接口挂载SD卡过程记录
第1步,启动一个可以正常工作的软件工程
点击CubeMX Setting启动STM32CubeMX配置工具。
稍等片刻,CubeMX启动中。
CubeMX启动成功。
第2步,配置SPI接口。
根据原理图配置好SPI3接口。
点击GENERATE CODE生成代码,然后关闭CubeMX。
CubeMX Setting工具会在在后台生成软件工程配置信息。
第3步,使用RT-Thread Setting工具配置软件工程。
双击RT-Thread Setting启动配置工具。
在配置界面中移动鼠标至SPI图标,在出现的浮动菜单中点击configs菜单。
打开SD卡驱动选项,打开SPI驱动选项,打开SPI接口使用SD卡选项。
配置好虚拟文件系统选项。然后点击RT-Thread Studio左上角的保存软件工程配置。
第4步,更改board.h文件,打开SPI3的相关宏定义。
打开board.h文件,找到SPI3的宏定义,去掉注释打开宏定义。
第5步,编译软件工程。
代码编译成功。
第6步,下载固件到目标板中运行。
代码下载成功并运行至main()函数断点处。
点击全速运行代码。
PC端打开Putty,选择合适的串口连接到目标板,在MSH窗口中运行命令:list device后,已经可以见到一个SPI3设备。
第7步,编写挂载SD卡的代码。
在软件工程的bsp目录下创建一个bsp_sd_card.c文件,在文件中输入以下代码:
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2024-01-03 hubo the first version
*/
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-8-23 SummerGift the first version
*/
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_spi.h"
#include "spi_msd.h"
#include <dfs_fs.h>
#include "drv_spi.h"
#define DBG_TAG "sdcard"
#define DBG_LVL DBG_ERROR
#include <rtdbg.h>
#ifdef BSP_USING_TF_CARD
static int rt_hw_spi3_tfcard(void)
{
rt_hw_spi_device_attach("spi3", "spi30", GPIOC, GPIO_PIN_9);
return msd_init("sd0", "spi30");
}
INIT_COMPONENT_EXPORT(rt_hw_spi3_tfcard);
#ifdef RT_USING_FINSH
#include <finsh.h>
#ifdef FINSH_USING_MSH
int sdcard_mount(void)
{
#ifdef BSP_USING_TF_CARD
/* 挂载 TF 卡中的文件系统,参数 elm 表示挂载的文件系统类型为 elm-fat 文件系统*/
if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
{
LOG_I("Filesystem initialized!");
}
else
{
LOG_E("Failed to initialize filesystem!");
}
#endif /*BSP_USING_TF_CARD*/
return 0;
}
MSH_CMD_EXPORT(sdcard_mount, sdcard_mount);
#endif
#endif
#endif /*BSP_USING_TF_CARD*/
打开board.h文件,添加一个宏用于打开SD卡:
#define BSP_USING_TF_CARD
第8步,编译代码,下载运行。
首先给开发板断电,然后插入一张格式化成FAT32的SD卡,在卡上放置一些文件。
运行代码后,从PC启动Putty进入MSH界面,运行命令:help后,已经可见sdcard_mount命令,然后运行以下命令:
sdcard_mount
ls
查看运行结果:
已经可以看到SD卡上的一个文件。
至此,挂载SD卡的过程就全部完成了。