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

[复制链接]
4590|77
 楼主| 工程师犹饿死 发表于 2022-5-28 20:20 | 显示全部楼层 |阅读模式
前言
为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库接口获取数据的方法有详细解说。



评论

原文链接:https://blog.csdn.net/qq_30938259/article/details/122953550  发表于 2022-5-28 20:21
 楼主| 工程师犹饿死 发表于 2022-5-28 20:23 | 显示全部楼层
结果展示
1785562921458b881e.png
 楼主| 工程师犹饿死 发表于 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 “…”都要改成相对路径,否则编译器找不到头文件

3514662922f2f1e9e0.png
 楼主| 工程师犹饿死 发表于 2022-5-28 22:19 | 显示全部楼层
  1.    Core/Inc Drivers/STM32F1xx_HAL_Driver/Inc   
  2.    Drivers/STM32F1xx_HAL_Driver/Inc/Legacy   
  3.    Drivers/CMSIS/Device/ST/STM32F1xx/Include Drivers/CMSIS/Include   
  4.    Middlewares/Third_Party/FreeRTOS/Source/include   
  5.    Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2   
  6.    Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3   
  7.    Middlewares/MPU6050_Motion_Driver/driver/eMPL   
  8.    Middlewares/MPU6050_Motion_Driver/driver/include   
  9.    Middlewares/MPU6050_Motion_Driver/eMPL-hal   
  10.    Middlewares/MPU6050_Motion_Driver/driver/stm32L   
  11.    Middlewares/MPU6050_Motion_Driver/mllite   
  12.    Middlewares/MPU6050_Motion_Driver/mpl   
  13.    Middlewares/MPU6050_Motion_Driver/porting
 楼主| 工程师犹饿死 发表于 2022-5-28 22:20 | 显示全部楼层
 楼主| 工程师犹饿死 发表于 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 | 显示全部楼层
  1. \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
5027262923157e3301.png
 楼主| 工程师犹饿死 发表于 2022-5-28 22:29 | 显示全部楼层
 楼主| 工程师犹饿死 发表于 2022-5-28 22:30 | 显示全部楼层
源位置
12549629231f0e3977.png
 楼主| 工程师犹饿死 发表于 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 | 显示全部楼层
目录
  1. ├── driver
  2.     ├── eMPL
  3.          ├── inv_mpu.c
  4.          ├── inv_mpu_dmp_motion_driver.c
  5.          ├── ...
  6.     ├── include...
  7.     ├── stm32L...
  8. ├── eMPL-hal...
  9. ├── mllite...
  10. ├── porting
  11.          ├── STM32F1_porting.c
  12.          ├── STM32F1_porting.h
  13.          ├──mpu6050_SL.c
  14.          └──mpu6050_SL.h
  15. ├── README.md

 楼主| 工程师犹饿死 发表于 2022-5-28 22:32 | 显示全部楼层
porting文件夹存放移植需要的函数,其余四个文件夹均为Motion Driver 6.12原有的文件夹

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

​ mpu6050_SL.c是我自己使用时封装的一部分函数,可有可无。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

967

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部