工程师犹饿死 发表于 2022-5-28 20:20

移植MPU6050/9250的DMP官方库修改移植 DMP简单教程

前言
为STM32F1/F4移植的Motion Driver 6.12库 俗称DMP库。

官方的库从初始化硬件到获取数据一条龙服务,关键是假如想要用MPU的DMP单元,对于一般人来说那就只能用官方库了,因为官方库包含一个最核心的闭源静态库。

工程已经发布在Github:https://github.com/Huffer342-WSH/MPU6050_I2C

蓝奏云:https://wwz.lanzouo.com/iV0SQ004pn8b 密码:1n4j

该项目源自野火的例程,但野火MPU6050的例程对DMP的功能浅尝辄止,视频也讲的比较乱,我对原代码进行了一些删减,去掉了一些没有意义的部分,同时对略微的修改了官方库更方便移植,工程默认状态是在串口输出数据,想要匿名上位机的程序修改预编译指令即可。

除了移植程序外,在README文件中对使用DMP库接口获取数据的方法有详细解说。



工程师犹饿死 发表于 2022-5-28 20:23

结果展示

工程师犹饿死 发表于 2022-5-28 20:24

工程师犹饿死 发表于 2022-5-28 22:17

开发环境
STM32CubeIDE Version: 1.8.0

也可以使用VScode + GNU Arm Embedded Toolchain + OpenOCD
vscode的配置文件都在工程里,修改一下路径就能用,编译调试都有,gcc和openocd我都是MSYS2一键安装的。

工程师犹饿死 发表于 2022-5-28 22:18

使用的是HAL库

Includ path
假如不设置Includ path,那#include “…”都要改成相对路径,否则编译器找不到头文件


工程师犹饿死 发表于 2022-5-28 22:19

   Core/Inc Drivers/STM32F1xx_HAL_Driver/Inc   
   Drivers/STM32F1xx_HAL_Driver/Inc/Legacy   
   Drivers/CMSIS/Device/ST/STM32F1xx/Include Drivers/CMSIS/Include   
   Middlewares/Third_Party/FreeRTOS/Source/include   
   Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2   
   Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3   
   Middlewares/MPU6050_Motion_Driver/driver/eMPL   
   Middlewares/MPU6050_Motion_Driver/driver/include   
   Middlewares/MPU6050_Motion_Driver/eMPL-hal   
   Middlewares/MPU6050_Motion_Driver/driver/stm32L   
   Middlewares/MPU6050_Motion_Driver/mllite   
   Middlewares/MPU6050_Motion_Driver/mpl   
   Middlewares/MPU6050_Motion_Driver/porting

工程师犹饿死 发表于 2022-5-28 22:20

macro

工程师犹饿死 发表于 2022-5-28 22:24

DEBUG
USE_HAL_DRIVER
STM32F103xE
//下面的是DMP相关的
EMPL
MPL_LOG_NDEBUG=0
MPU6050
USE_DMP
REMOVE_LOGGING
EMPL_TARGET_STM32F1//EMPL_TARGET_STM32F4,唯一的区别是用的头文件不一样

工程师犹饿死 发表于 2022-5-28 22:25

静态库
在工程的Middlewares\MPU6050_Motion_Driver.zip位置有官方的库,内部包含msp430和stm32f4两个例子,官方python上位机,说明文档和各个版本的静态库。

工程师犹饿死 发表于 2022-5-28 22:25

工程师犹饿死 发表于 2022-5-28 22:26

STM32属于arm架构,使用\motion_driver_6.12\mpl libraries\arm目录下的文件

MSP430使用\motion_driver_6.12\mpl libraries\msp430目录下的文件

比如我是用 GNU Arm Embedded Toolchain工具链的,芯片是STM32F1系列,属于Cortex-M3架构,那选择的就是

工程师犹饿死 发表于 2022-5-28 22:26

\motion_driver_6.12\mpl libraries\arm\gcc4.9.3\liblibmplmpu_m3.zip

工程师犹饿死 发表于 2022-5-28 22:27

压缩包的库,使用用Keil和IAR同理

静态库放到MPU6050_Motion_Driver\mpl\liblibmplmpu.a,
gcc要用库名的时候去掉开头lib和后缀.a

工程师犹饿死 发表于 2022-5-28 22:28

比如此处liblibmplmpu.a填写的是libmplmpu

工程师犹饿死 发表于 2022-5-28 22:29

工程师犹饿死 发表于 2022-5-28 22:30

源位置

工程师犹饿死 发表于 2022-5-28 22:31

*MDK的优化真的太糟心了,虽然代码量少,但总是bug,不如gcc稳定,工程使用stm32cubeide(eclipse)建立的,写代码编译都在vscode,代码补全真的好用,eclipse主要用来调试。

之后中断会改成FreeRTOS的,对读数据的函数进一步封装
下面直接贴github上的readme,就不改了。

工程师犹饿死 发表于 2022-5-28 22:31

Motion Driver 6.12 移植
基于官方库文件略作修改,可以直接用于STM32F1系列,使用gcc编译器 hal库*(Middlewares\MPU6050_Motion_Driver\mpl\liblibmplmpu.a为官方静态库,此处使用的适用于GCC-CM3,假如使用其他编译器替换该静态库并设置链接命令即可)*

STM32F4、MSP430部分未作修改

工程师犹饿死 发表于 2022-5-28 22:32

目录
├── driver
    ├── eMPL
         ├── inv_mpu.c
         ├── inv_mpu_dmp_motion_driver.c
         ├── ...
    ├── include...
    ├── stm32L...
├── eMPL-hal...
├── mllite...
├── porting
         ├── STM32F1_porting.c
         ├── STM32F1_porting.h
         ├──mpu6050_SL.c
         └──mpu6050_SL.h
├── README.md

工程师犹饿死 发表于 2022-5-28 22:32

porting文件夹存放移植需要的函数,其余四个文件夹均为Motion Driver 6.12原有的文件夹

其中STM32F1_porting.c为移植必须的内容,

​ mpu6050_SL.c是我自己使用时封装的一部分函数,可有可无。
页: [1] 2 3 4
查看完整版本: 移植MPU6050/9250的DMP官方库修改移植 DMP简单教程