RT-Thread Studio学习(十)MPU9250
简介
本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下运用MPU9250。
新建RT-Thread项目并使用外部时钟
详细步骤参考文档《RT-Thread Studio学习(一)使用外部时钟系统》。
设置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);
编译下载后的结果为