RT-Thread Studio学习(十)MPU9250

RT-Thread Studio学习(十)MPU9250

简介

本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下运用MPU9250。

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

详细步骤参考文档《RT-Thread Studio学习(一)使用外部时钟系统》。

设置SDIO的驱动框架

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

测试

修改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);


编译下载后的结果为
RT-Thread Studio学习(十)MPU9250

上一篇:mini一体式U优盘、SD卡、TF卡等FLASH存储卡不识别怎么数据恢复


下一篇:SD-WAN技术分析及网络设计