RT-Thread Studio学习(九)TF卡文件系统

本文档介绍了如何在RT-ThreadStudio环境中,基于STM32F407VET芯片配置SD卡驱动。首先,通过STM32CubeMX设置SDIO并生成代码,然后在RT-Thread项目中启用相关组件和设置。最后,展示了在main.c中初始化SD卡、挂载文件系统并进行读写测试的代码。
摘要由CSDN通过智能技术生成

简介

本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用SD卡驱动包。

新建RT-Thread项目并使用外部时钟

详细步骤参考文档《RT-Thread Studio学习之使用外部时钟系统》。
只是因为drv_clk.c文件中使用了外部函数SystemClock_Config,如下:

void clk_init(char *clk_source, int source_freq, int target_freq)
{
    /*
     * Use SystemClock_Config generated from STM32CubeMX for clock init
     * system_clock_config(target_freq);
     */
    extern void SystemClock_Config(void);
    SystemClock_Config();
}

所以,不需要将STM32CubeMX项目中main.c的函数SystemClock_Config()内容复制到RT-Thread Studio项目中的drv_clk.c文件里的系统时钟配置函数system_clock_config

设置SDIO的驱动框架

1、STM32CubeMX设置
在CubeMX软件中配置TF卡的引脚,如下图
在这里插入图片描述
使能SDIO,Mode选择SD 4 bits Wide bus,再点击GENERATE CODE生成代码。
2、RT-Thread Studio设置
使能如下组件:
在这里插入图片描述
在详细设置中进行如下设置:
在这里插入图片描述
在这里插入图片描述
board.h文件中使能SDIO:
在这里插入图片描述

测试

修改main.c文件,代码如下:

/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2021-06-10     RT-Thread    first version
 */

#include <rtthread.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

#include <rtdevice.h>
#include <board.h>
#include <stdio.h>
#include <string.h>
#include "dfs_posix.h"


static void sd_init(void)
{
    rt_device_t name_sd0_t=RT_NULL;
    int count=10;
    while(name_sd0_t==RT_NULL) //等待sd卡注册
    {
        if((count--)==0)
        {
            LOG_E("find sd0 failed\r\n");
            break;
        }
        rt_thread_mdelay(500);
        name_sd0_t=rt_device_find("sd0");
    }
    if(name_sd0_t!=RT_NULL)  //sd成功注册到系统
    {
        LOG_D("find sd0 success\r\n");

        if(dfs_mount("sd0", "/", "elm", 0, 0)==0)  //将sd挂载到根目录
        {
            LOG_D("dfs mount sd0 success\r\n");
        }
        else
        {
            LOG_E("dfs mount sd0 failed\r\n");
        }
    }
}


void sd_rw(void)
{
    char wbuf[] = "hello world!", rbuf[30] = {0};
    int rsize = 0;
    int fd = 0;                                 //文件描述符

    //写入数据
    fd = open("/a.txt", O_WRONLY | O_CREAT);    //打开文件,如果不存在就新建一个
    if(fd>0)
    {
        write(fd, wbuf, sizeof(wbuf));
        close(fd);
        rt_kprintf("write success\r\n");
    }

    //读取数据
    fd = open("/a.txt", O_RDONLY);              //使用只读格式打开
    if(fd>0)
    {
        rsize = read(fd, rbuf, 100);
        close(fd);
        if(rsize>0)
        {
            rt_kprintf("READ(%d): %s",rsize,rbuf);
        }
    }
}

int main(void)
{
    int count = 1;
    sd_rw();

    while (count++)
    {
        if(count<10)
            LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

INIT_COMPONENT_EXPORT(sd_init);


编译下载后的结果为
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值