打印
[STM32F1]

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

[复制链接]
2314|77
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前言
为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:21 回复TA
原文链接:https://blog.csdn.net/qq_30938259/article/details/122953550 
沙发
工程师犹饿死|  楼主 | 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一键安装的。

使用特权

评论回复
5
工程师犹饿死|  楼主 | 2022-5-28 22:18 | 只看该作者
使用的是HAL库

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


使用特权

评论回复
6
工程师犹饿死|  楼主 | 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

使用特权

评论回复
7
工程师犹饿死|  楼主 | 2022-5-28 22:20 | 只看该作者
macro

使用特权

评论回复
8
工程师犹饿死|  楼主 | 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,唯一的区别是用的头文件不一样

使用特权

评论回复
9
工程师犹饿死|  楼主 | 2022-5-28 22:25 | 只看该作者
静态库
在工程的Middlewares\MPU6050_Motion_Driver.zip位置有官方的库,内部包含msp430和stm32f4两个例子,官方python上位机,说明文档和各个版本的静态库。

使用特权

评论回复
10
工程师犹饿死|  楼主 | 2022-5-28 22:25 | 只看该作者

使用特权

评论回复
11
工程师犹饿死|  楼主 | 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架构,那选择的就是

使用特权

评论回复
12
工程师犹饿死|  楼主 | 2022-5-28 22:26 | 只看该作者
\motion_driver_6.12\mpl libraries\arm\gcc4.9.3\liblibmplmpu_m3.zip

使用特权

评论回复
13
工程师犹饿死|  楼主 | 2022-5-28 22:27 | 只看该作者
压缩包的库,使用用Keil和IAR同理

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

使用特权

评论回复
14
工程师犹饿死|  楼主 | 2022-5-28 22:28 | 只看该作者
比如此处liblibmplmpu.a填写的是libmplmpu

使用特权

评论回复
15
工程师犹饿死|  楼主 | 2022-5-28 22:29 | 只看该作者

使用特权

评论回复
16
工程师犹饿死|  楼主 | 2022-5-28 22:30 | 只看该作者
源位置

使用特权

评论回复
17
工程师犹饿死|  楼主 | 2022-5-28 22:31 | 只看该作者
*MDK的优化真的太糟心了,虽然代码量少,但总是bug,不如gcc稳定,工程使用stm32cubeide(eclipse)建立的,写代码编译都在vscode,代码补全真的好用,eclipse主要用来调试。

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

使用特权

评论回复
18
工程师犹饿死|  楼主 | 2022-5-28 22:31 | 只看该作者
Motion Driver 6.12 移植
基于官方库文件略作修改,可以直接用于STM32F1系列,使用gcc编译器 hal库*(Middlewares\MPU6050_Motion_Driver\mpl\liblibmplmpu.a为官方静态库,此处使用的适用于GCC-CM3,假如使用其他编译器替换该静态库并设置链接命令即可)*

STM32F4、MSP430部分未作修改

使用特权

评论回复
19
工程师犹饿死|  楼主 | 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

使用特权

评论回复
20
工程师犹饿死|  楼主 | 2022-5-28 22:32 | 只看该作者
porting文件夹存放移植需要的函数,其余四个文件夹均为Motion Driver 6.12原有的文件夹

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

​ mpu6050_SL.c是我自己使用时封装的一部分函数,可有可无。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

886

帖子

1

粉丝