移植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库接口获取数据的方法有详细解说。
结果展示
开发环境
STM32CubeIDE Version: 1.8.0
也可以使用VScode + GNU Arm Embedded Toolchain + OpenOCD
vscode的配置文件都在工程里,修改一下路径就能用,编译调试都有,gcc和openocd我都是MSYS2一键安装的。 使用的是HAL库
Includ path
假如不设置Includ path,那#include “…”都要改成相对路径,否则编译器找不到头文件
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
macro
DEBUG
USE_HAL_DRIVER
STM32F103xE
//下面的是DMP相关的
EMPL
MPL_LOG_NDEBUG=0
MPU6050
USE_DMP
REMOVE_LOGGING
EMPL_TARGET_STM32F1//EMPL_TARGET_STM32F4,唯一的区别是用的头文件不一样
静态库
在工程的Middlewares\MPU6050_Motion_Driver.zip位置有官方的库,内部包含msp430和stm32f4两个例子,官方python上位机,说明文档和各个版本的静态库。
STM32属于arm架构,使用\motion_driver_6.12\mpl libraries\arm目录下的文件
MSP430使用\motion_driver_6.12\mpl libraries\msp430目录下的文件
比如我是用 GNU Arm Embedded Toolchain工具链的,芯片是STM32F1系列,属于Cortex-M3架构,那选择的就是 \motion_driver_6.12\mpl libraries\arm\gcc4.9.3\liblibmplmpu_m3.zip
压缩包的库,使用用Keil和IAR同理
静态库放到MPU6050_Motion_Driver\mpl\liblibmplmpu.a,
gcc要用库名的时候去掉开头lib和后缀.a 比如此处liblibmplmpu.a填写的是libmplmpu
源位置
*MDK的优化真的太糟心了,虽然代码量少,但总是bug,不如gcc稳定,工程使用stm32cubeide(eclipse)建立的,写代码编译都在vscode,代码补全真的好用,eclipse主要用来调试。
之后中断会改成FreeRTOS的,对读数据的函数进一步封装
下面直接贴github上的readme,就不改了。
Motion Driver 6.12 移植
基于官方库文件略作修改,可以直接用于STM32F1系列,使用gcc编译器 hal库*(Middlewares\MPU6050_Motion_Driver\mpl\liblibmplmpu.a为官方静态库,此处使用的适用于GCC-CM3,假如使用其他编译器替换该静态库并设置链接命令即可)*
STM32F4、MSP430部分未作修改 目录
├── 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
porting文件夹存放移植需要的函数,其余四个文件夹均为Motion Driver 6.12原有的文件夹
其中STM32F1_porting.c为移植必须的内容,
mpu6050_SL.c是我自己使用时封装的一部分函数,可有可无。