这个移植花费了我好多时间…

本来是想使用mpu6xxx的软件包的,但是得到的数据抖动太厉害了

在网上找到了两种得到稳定的数据的方法

  • DMP

  • Kalman滤波

看到DMP的效果更好,就选择DMP的方案

了解到 InvenSense 公司提供的 MotionDriver 可以用DMP的方式读取mpu,就开始移植 MotionDriver 这个库

本项目的地址 https://github.com/greedyhao/MotionDriver2RTT

移植步骤

简单的说,就是把 core/driver/eMPL/inv_mpu.c 这个文件中需要使用到的函数实现就行了

这个文件中也有相关说明

/* The following functions must be defined for this platform:* i2c_write(unsigned char slave_addr, unsigned char reg_addr,*      unsigned char length, unsigned char const *data)* i2c_read(unsigned char slave_addr, unsigned char reg_addr,*      unsigned char length, unsigned char *data)* delay_ms(unsigned long num_ms)* get_ms(unsigned long *count)* reg_int_cb(void (*cb)(void), unsigned char port, unsigned char pin)* labs(long x)* fabsf(float x)* min(int a, int b)*/

不过实际需要实现的只有 i2c_write i2c_read delay_ms get_ms,以及 core/driver/stm32L/log_stm32.c 下的 log_i 与 log_e 的底层函数

#define i2c_write   imu_i2c_write_regs
#define i2c_read    imu_i2c_read_regs
#define delay_ms    thread_mdelay
#define get_ms      get_tick_count
#define log_i       MPL_LOGI
#define log_e       MPL_LOGE
#define min(a,b)    ((a<b)?a:b)
#define labs(n)     (((n) < 0) ? (-(n)) : (n))

i2c的实现

struct rt_mpu_device *mpu_dev;

通过 mpu_dev 这个全局指针来保存mpu设备的相关信息

不过全局指针的方式进行i2c通信不知道会不会不太好,暂时没有其他方式实现

rt_err_t imu_i2c_write_regs(unsigned char slave_addr, unsigned char reg_addr, unsigned short length, const unsigned char *data_ptr)
{...if (!rt_mpu_write_reg(mpu_dev, reg_addr, length, data_ptr)){res = RT_EOK;}...
}rt_err_t imu_i2c_read_regs(unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char *data)
{...    if (!rt_mpu_read_regs(mpu_dev, reg_addr, length, data)){res = RT_EOK;}...
}

因为 rt-thread 的i2c接口和 MotionDriver 中需要的i2c接口不一致,就写了个中间层适配,从 MotionDriver 的i2c接口传入的 slave_addr 直接使用 mpu_dev 中的地址,这样就可以使用 rt-thread 的 i2c设备框架了

i2c驱动的实现很重要,不然这个库没办法用的,遇到问题先检查i2c驱动的实现

其他函数

其他的函数都可以使用 rt-thread 系统中自带函数

遇到问题

fifo overflow

卡在这个问题好久,偶然间从网上了解到,DMP程序要考虑到DMP数据的输出速率

本项目中设置的是100Hz,读取的速度也要相对应,不然就会overflow

为了防止溢出,我直接加大了fifo的大小,并加快了读取速度

效果图

现在数据稳得一批

个人博客

公众号:greedyhao

移植MotionDriver到RTT相关推荐

  1. RTTHREAD软件包目录

    RTTHREAD软件包目录 这边统计下RTTHREAD软件包的各项内容 IOT 包名 技术标签 依赖平台 备注 abup_fota OTA TCP/UDP 本软件包是用于 Abup FOTA 升级的固 ...

  2. RTTHREAD 软件包目录(实时更新)

    RTTHREAD 软件包目录 ai 包名 作者 license 备注 elapack wuhanstudio MIT 嵌入式线性代数库,兼容 matlab libann wuhanstudio MIT ...

  3. RTT之创建工程模板

    文章目录 一.下载RT_Thread Nano源码 二.安装RT_Thread Package 三.移植RTT 1.拷贝RT_Thread Package到裸机工程根目录 2.介绍RT-Thread目 ...

  4. 【专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码

    说明: 1.在实际项目中,很多时候,我们需要将传感器或者ADC的数值以波形的形式显示.通常的解决办法是用串口上位机,USB接口上位机或者MDK的逻辑分析仪功能,使用这三种方式都比较繁琐.本期专题为大家 ...

  5. Segger RTT深度使用说明-移植-Jlink rtt viewer显示-输出到Secure CRT

    简介 RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端.J-Link驱动4.90之后的版本都支持RTT.RTT既可以从MCU上输出信息 ...

  6. RT-thread基础移植//依据rtt实战学习记录

    主要任务有以下几点: 任务 1:BSP 跑起来 任务 2:完成报警模块 任务 3:完成按键模块 任务 4:完成温湿度传感器的驱动 和明显各个任务是层层递进的,并且有易到难,今天是第一天,由于上课的原因 ...

  7. 移植RTT使用cubeMx配置后出现 cannot open source input file stm32f1xx_hal_exti.h: No such file or directory

    问题原因: 因为官方的f1HAL库存在没有"stm32f1xx_hal_exti.h"文件, 解决办法: 从cubuMx生成的工程内部复制一个"stm32f1xx_hal ...

  8. RTT 使用menuconfig 和cubeMux 在移植过来的模板工程上增加一个串口2

    1.在board目录下Kconfig文件中增加如下内容 打开CubeMX_Config下的CubeMX_Config.ioc的cubeMx工程 a;使能串口1: b;使能外部时钟,设置时钟树: 1工程 ...

  9. 关于精英版stm32从模板工程移植RTT Spi驱动打开后编译不过的处理办法

    移植成功后天健SPI驱动代码,出现编译不过,编译器提示 SPI_HandleTypeDef 类型未定义 解决办法是: 打开下图中文件中的宏定义即可

  10. 【RTT】移植:LVGL 8.0.2

      开发板:潘多拉开发板   系统版本:v4.0.3   LVGL版本:8.0.2   注:这篇文章就简单记录下编译成功,跑了一个 demo 的过程,至于是否完全移植成功,不确定哈,毕竟 LVGL 还 ...

最新文章

  1. 0x16.基本数据结构 — Trie树(字典树)+ A C 自 动 机
  2. Delphi编写后台监控软件
  3. StringBuilder的构造方法和append方法
  4. 小白带你入坑xamarin系列之环境搭建和准备
  5. oracle 快捷 企业,Oracle自治数据库提供APEX 20.1,助企业快速构建应用
  6. 过度扩容 A股“虚胖”
  7. 举例说明语言接触会造成哪些结果_语言学概论全真模拟演练(二)
  8. 腾讯,360,华为等应用市场相继发布适配公告,发力安卓P版本
  9. c语言switch编写个人所得税,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  10. mcal rtm_RTM的完整形式是什么?
  11. arcmap新手教程_ArcGIS入门教程(1)——ArcMap应用基础
  12. 海量图标矢量图免费下载【来自阿里】
  13. 三款MikroTik家用和小型办公网路由器
  14. 计算机时间单位,时间计算机单位之间的换算
  15. win10安装SVN失败问题汇总
  16. CobaltStrike逆向学习系列(15):CS功能分析-BOF
  17. python(进阶篇)——自动化操作Excel(xlrd和xlwt)
  18. border-radius简介
  19. 金蝶云之家APP产品分析报告
  20. ARM SIMD 指令集:NEON 简介

热门文章

  1. android手机 办公软件,寻最佳手机Office助手 八大安卓办公软件横评
  2. CMake中链接库的顺序问题
  3. matlab的colorbar取对数
  4. Html中的favicon ico
  5. Linux系统设置固定ip
  6. ceph pg peering和恢复 (1)
  7. 计量模型 | 固定效应与交互固定效应
  8. 08.音频系统:第004课_Android音频系统详解:第002节_以例子说明几个重要概念
  9. 提醒专注:既往不恋,未来不迎,当下不杂
  10. EXCEL 2016 冻结窗口(首行首列,多行多列)