您的位置:首页 > 健康 > 美食 > stm32f407 基于Arduino兼容层RTduino 开发MPU6050

stm32f407 基于Arduino兼容层RTduino 开发MPU6050

2024/12/25 0:41:36 来源:https://blog.csdn.net/weixin_46158019/article/details/141897272  浏览:    关键词:stm32f407 基于Arduino兼容层RTduino 开发MPU6050

一、环境

基于 RT-Thread Studio 版本: 2.2.6
RT-Thread 版本:V4.1.1
开发板:stm32f407zgt6 野火开发板

二、工程创建

工程创建可参考文章
<手把手教 stm32f407 基于rtthread操作系统使用Arduino兼容层RTduino>

在这里插入图片描述

三、引脚配置

原理图引脚,使用 I2C1,引脚是 PB8(SCL),PB9(SDA).
在这里插入图片描述
在这里插入图片描述

工具 : pinout-generator工具,pinout-generator工具的主要特点包括:
1、使用图形界面进行操作,简单易用
2、支持多种芯片系列,可根据需要自行添加
3、快速生成对接 RT-Thread BSP 需要的各个文件
4、避免手动对接过程中的误操作问题
5、提高对接效率

下载地址:
https://github.com/RTduino/pinout-generator
https://gitee.com/rtduino/pinout-generator

使用的引脚有 串口1,I2C1,指示灯。
PA9、PA10;
PB8、PB9;
PC3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、工程配置

将该工具生成的文件添加到 RT-Thread Studio 工程中的aoolications 中。

在这里插入图片描述
在这里插入图片描述
pins_arduino.c 添加如下 头文件

#include "drv_common.h"

在这里插入图片描述
根据 bord.h 中的提示,配置 I2C
在这里插入图片描述

在这里插入图片描述
添加软件包,如果提示

当前软件包不存在于rt-thread资源索引中. 请尝试右键项目选择Packages Update更新后重试 ID

解决办法:
进入 安装目录下

 RT-ThreadStudio\platform\env_released\env\packages\

删除 packages,后重新

git clone https://gitee.com/rt-thread-mirror/packages.git 

重新拉取就可以了。
在这里插入图片描述
在这里插入图片描述
同时使能 Wire.h
在这里插入图片描述
添加测试文件 arduino_mpu6050.cpp,添加头文件

#include <Arduino.h>
#include "RTduino.h"

并复制软件包测试例程中的内容到该文件,

在这里插入图片描述
软件包测试例程
在这里插入图片描述
arduino_mpu6050.cpp 文件内容如下:

#include <Arduino.h>
#include "RTduino.h"
#include <Wire.h>
#include <MPU6050.h>MPU6050 mpu;void checkSettings()
{Serial.println();Serial.print(" * Sleep Mode:        ");Serial.println(mpu.getSleepEnabled() ? "Enabled" : "Disabled");Serial.print(" * Clock Source:      ");switch(mpu.getClockSource()){case MPU6050_CLOCK_KEEP_RESET:     Serial.println("Stops the clock and keeps the timing generator in reset"); break;case MPU6050_CLOCK_EXTERNAL_19MHZ: Serial.println("PLL with external 19.2MHz reference"); break;case MPU6050_CLOCK_EXTERNAL_32KHZ: Serial.println("PLL with external 32.768kHz reference"); break;case MPU6050_CLOCK_PLL_ZGYRO:      Serial.println("PLL with Z axis gyroscope reference"); break;case MPU6050_CLOCK_PLL_YGYRO:      Serial.println("PLL with Y axis gyroscope reference"); break;case MPU6050_CLOCK_PLL_XGYRO:      Serial.println("PLL with X axis gyroscope reference"); break;case MPU6050_CLOCK_INTERNAL_8MHZ:  Serial.println("Internal 8MHz oscillator"); break;}Serial.print(" * Gyroscope:         ");switch(mpu.getScale()){case MPU6050_SCALE_2000DPS:        Serial.println("2000 dps"); break;case MPU6050_SCALE_1000DPS:        Serial.println("1000 dps"); break;case MPU6050_SCALE_500DPS:         Serial.println("500 dps"); break;case MPU6050_SCALE_250DPS:         Serial.println("250 dps"); break;}Serial.print(" * Gyroscope offsets: ");Serial.print(mpu.getGyroOffsetX());Serial.print(" / ");Serial.print(mpu.getGyroOffsetY());Serial.print(" / ");Serial.println(mpu.getGyroOffsetZ());Serial.println();
}void mpu6050_fun_setup()
{Serial.begin(115200);// Initialize MPU6050Serial.println("Initialize MPU6050");while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)){Serial.println("Could not find a valid MPU6050 sensor, check wiring!");delay(500);}// If you want, you can set gyroscope offsets// mpu.setGyroOffsetX(155);// mpu.setGyroOffsetY(15);// mpu.setGyroOffsetZ(15);// Calibrate gyroscope. The calibration must be at rest.// If you don't want calibrate, comment this line.mpu.calibrateGyro();// Set threshold sensivty. Default 3.// If you don't want use threshold, comment this line or set 0.mpu.setThreshold(3);// Check settingscheckSettings();
}void mpu6050_fun_loop()
{Vector rawGyro = mpu.readRawGyro();Vector normGyro = mpu.readNormalizeGyro();Serial.println("**************************************");Serial.println();Serial.print(" Xraw = ");Serial.print(rawGyro.XAxis);Serial.print(" Yraw = ");Serial.print(rawGyro.YAxis);Serial.print(" Zraw = ");Serial.println(rawGyro.ZAxis);Serial.print(" Xnorm = ");Serial.print(normGyro.XAxis);Serial.print(" Ynorm = ");Serial.print(normGyro.YAxis);Serial.print(" Znorm = ");Serial.println(normGyro.ZAxis);Serial.println();Serial.println("**************************************");delay(500);
}
static int rtduino_mpu6050_fun_init(void)
{rtduino_sketch_loader_create("mpu6050_fun", mpu6050_fun_setup, mpu6050_fun_loop);return 0;
}
INIT_COMPONENT_EXPORT(rtduino_mpu6050_fun_init);

修改 SConscript 文件,修改后同步配置到工程。
在这里插入图片描述
在这里插入图片描述
编译
在这里插入图片描述

五、测试结果

在这里插入图片描述

将可执行文件下载到开发板,运行结果如下:
在这里插入图片描述
移动开发板
在这里插入图片描述

参考:
https://docs.rtduino.com/#/zh/manual/adapt/bsp/pinout-generator/pinout-generator

https://gitee.com/rtduino/RTduino

https://gitee.com/rtduino

https://gitee.com/RT-Thread-Mirror/packages

https://docs.rtduino.com/#/zh/manual/multi-threading/sketch-loader

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com