STM32平台下官方DMP库6.12超详细移植教程_mpu6050 dmp库6.12_SudekiMing的博客-程序员秘密

技术标签: stm32  STM32  姿态解算  DMP  MPU6050  

前记

Motion Driver官方库:Motion_Driver_6.12
STM32工程源码:STM32F103C8-软件MPU6050(DMP)

MPU6050软件I2C驱动,带OLED显示,移植了匿名地面站,可显示姿态信息(匿名地面站通信协议6.0版本,本人使用测试的匿名地面站版本V6.56版本)
匿名地面站姿态信息显示

———————————————————————————————————————————

1.解压官方库源文件

首先,让我们解压官方库源文件“motion_driver_6.12”,并拷贝“*motion_driver_6.12\arm\STM32F4_MD6\Projects\eMD6”路径下的“core”文件夹到新工程的“Libraries”文件夹下
请添加图片描述

2.替换“ibmpllib.a”库文件

改名为“Motion_Driver”,接下来,我们需要替换“mpl”文件夹下的“libmpllib.a”库文件,(因为源程序是IAR环境,库的文件后缀为.a,现在换成ARM平台下专为keil_M3生成的库,文件后缀为.lib),其路径为:motion_driver_6.12\mpl libraries\arm\Keil,因为我们是在STM32F103工程下移植库,故应选择“libmpllib_Keil_M3.zip”库,先将其解压,解压出来的库文件名即为“libmpllib.lib”,然后删除原libmpllib.a”库文件,添加我们刚才解压出来的“libmpllib.lib”库文件。请添加图片描述
接下来让我们打开工程:做一些必要的添加与修改

3.添加必要的宏定义

USE_STDPERIPH_DRIVER, STM32F10X_MD,USE_DMP,MPL_LOG_NDEBUG=1,EMPL,MPU6050,EMPL_TARGET_STM32F1请添加图片描述

4.添加头文件路径

在新工程中添加头文件路径,并勾选【C99 Mode】请添加图片描述

5.在工程管理中添加相应的目录

请添加图片描述
并把“Motion_Driver”库文件中所有的“.c”文件添加到工程目录下(包括“libmpllib.lib”库文件)请添加图片描述

6.修改文件,消除错误警告

工程配置上需要添加与修改的已经完成,接下来让我们编译一下工程,针对编译器所提示的错误与警告逐个的进行解决
请添加图片描述
(1)warning: #1-D: last line of file ends without a newline
首先大量有关keil工程下我们经常遇到的“文件的最后一行没有换行结束”问题,很简单,为了不产生这个警告,到每一个警告提示的文件中,在最后一行回车下一行即可。

再次编译工程,看下一个错误提示请添加图片描述
(2)error: #169: expected a declaration
因为我们是在STM32F103工程下对库进行移植,而官方所给的ARM_Keil平台下的移植例程源码是针对STM32F4的,所以我们把所有库文件中宏定义:#if defined EMPL_TARGET_STM32F4 改为 #if defined EMPL_TARGET_STM32F1
我们通过keil的搜索功能,找到所有的#if defined EMPL_TARGET_STM32F4定义,并修改,然后再次编译工程,此时又会产生一些新的错误,不过没事,那预示着我们离成功又近了一步。请添加图片描述
让我们先来解决上图提示的第三个错误
(3)error: #5: cannot open source input file “stm32f4xx.h”: No such file or directory

因为我们是在STM32F103工程下对库进行移植,所以把包含的STM32固件库头文件修改为#include “stm32f10x.h”

接下来的错误都只是提示“不能打开源代码某些头文件,没有这样的文件或目录”,而这些是我们需要自己为“Motion_Driver”库提供接口的头文件,比如包括必要的I2C读写接口,定时服务等,如若要输出调试信息到上位机,还需要提供串口接口。

让我们看下一个错误

(4)error: #5: cannot open source input file “i2c.h”: No such file or directory
对于此类错误,我们只需要把我们事先写好的“i2c.c和i2c.h”添加进工程即可

然后双击此错误定位到“inv_mpu.c”文件中,我们把“#include "main.h"和#include “board-st_discovery.h””头文件声明删除,这两个头文件是官方STM32F4例程里建立的文件,我们的库移植中不使用。顺便也把另一个"inv_mpu_dmp_motion_driver.c"中的“#include "main.h"和#include “board-st_discovery.h””头文件声明删除。
请添加图片描述
同样的对于错误
(5)error: #5: cannot open source input file “uart.h”: No such file or directory
我们把事先写好的“uart.c和uart.h”添加进工程即可

(6) warning: #223-D: function “__no_operation” declared implicitly

“__no_operation9();” 是IAR中空操作指令,可用来查看代码执行位置,在keil工程下,用" __ASM(“nop”);"替换

(7)在"inv_mpu_dmp_motion_driver.c"文件中添加 #include “SysTick.h” 和 #include "i2c.h"头文件声明

(8)在"inv_mpu"中添加 #include “SysTick.h” 和 #include “i2c.h” 头文文件声明

(9)"data_builder.c"中,修改static struct inv_sensor_cal_t sensors; 为 struct inv_sensor_cal_t sensors; 即去掉静态声明

7.总结

我们总结一下在库文件中都做了那些修改:
(1)在log_stm32.c文件中:

把#include "stm32f4xx.h"修改为 #include "stm32f10x.h"
删除 #include "main.h" 和 #include "board-st_discovery.h" 头文件声明
修改 #include "uart.h" 为自己写的 #include "USART1.h"

(2)inv_mpu.c文件中:

修改 #include "i2c.h"  为 自己写的I2C头文件 #include "SI2C1.h"

(3)inv_mpu_dmp_motion_driver.c文件中:

修改 #include "i2c.h"  为 自己写的I2C头文件 #include "SI2C1.h"

删除 #include "main.h" 和 #include "board-st_discovery.h" 头文件声明
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/WalterBrien/article/details/123303182

智能推荐

一文看懂保护接地的作用及原理_接地保护原理_wangweizhaoxin的博客-程序员秘密

什么是保护接地  保护接地,是为防止电气装置的金属外壳、配电装置的构架和线路杆塔等带电危及人身和设备安全而进行的接地。所谓保护接地就是将正常情况下不带电,而在绝缘材料损坏后或其他情况下可能带电的电器金属部分(即与带电部分相绝缘的金属结构部分)用导线与接地体可靠连接起来的一种保护接线方式。接地保护一般用于配电变压器中性点不直接接地(三相三线制)的供电系统中,用以保证当电气设备因绝缘损坏而漏电时产...

CSS制作各种形状(矩形、圆形、三角形、多边形、五角星星、太极阴阳图......)_mossbaoo的博客-程序员秘密

 CSS能够制作各种形状。正方形和矩形很容易,因为它们是自然形状。添加宽度和高度,就可以获得所需的确切尺寸矩形。添加border-radius,就可以将这些矩形变成圆形和椭圆形。我们还可以利用CSS中的::before和::after元素,添加到原始元素的形状,再通过巧妙地定位或者其它操作,就可以在CSS中使用单个HTML元素制作许多形状。 正方形#square {...

ArrayList中set()和add()中你不知道的坑_rangecheckforadd_诗——远方的博客-程序员秘密

一般使用List集合,估计都是使用这个ArrayList,一般呢也就是简单遍历数据和存储数据。很少使用到add(int index, E element)和set(int index, E element)两个方法。这两个方法,乍一看,就是在指定的位置插入一条数据。区别:set()是更新,更新指定下标位置的值。add()是添加,区别于一般的add(E e),这个就是有个位置的概念,特殊位...

HMM原理解析(转载)_自学AI的鲨鱼儿的博客-程序员秘密

转载链接: https://blog.csdn.net/yywan1314520/article/details/50454063 一、HMM基本概念隐马尔可夫模型(Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价值。平时,经常能接触...

如何将现成的hex文件用keil烧写_hex文件转elf_zhanghuaichao的博客-程序员秘密

1、将hex文件转成elf文件,方法要自行先搜索一下。2、新建一个工程,选这好CPU,不要添加启动代码。3、把生成的hex文件或elf文件复制到新工程的目录下。4、在工程的options->Output选项里,把Name of Executable:设成您的hex文件名。5、设置好options->Utilities的选项。5、直接点Load就行了。

随便推点

Redis的性能问题排查和springboot整合ehcache和redis实现二级缓存_springboot redis性能问题_yangyffk的博客-程序员秘密

redis性能相关的数据指标通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息,其中比较重要的2部分性能指标是memory和stats。info memory内存使用率used_memory上图中used_memory 字段数据表示的是:由Redis分配器分配的内存总量,以字节(byte)为单位。 其中used_memory_h...

android文章总结- 收藏集 - 掘金_weixin_34021089的博客-程序员秘密

35 个 Java 代码性能优化总结 - 后端 - 掘金前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,...【工具类】And...

IDEA中静态资源引入失败问题_idea 静态类引用报错_lover.Alice的博客-程序员秘密

项目场景:在IDEA中建立的Web项目问题描述:在html页面中,引入CSS,JS,图片失败,但是在IDEA中按住ctrl+鼠标左键点击引入连接能跳转到对应的静态资源文件。错误配置如下:<link rel="stylesheet" href="/static/layui/css/layui.css" /> <script src="/static/layui/layui.js"></script>原因分析:我的html中所有引入的静态资源都是以这种方

sumo的简单应用_sumo简单安装及运行实例_郭小郭起名的博客-程序员秘密

下载解压并添加环境变量记录一下今天SUMO的安装及使用经验,写的可能比较潦草,没看懂的小伙伴在下方评论,我看到一定会解答。各个版本的都有,我下载的是最新版1.8.0,下载完后是一个压缩包,找个英文路径解压出来,最终我的路径是这个样子D:\Sumo\sumo-1.8.0\bin第二步,添加环境变量,解压完后,添加环境变量的方法我就不细说了,大家不会添加的自行百度一下,然后是在系统变量里,添加一个SU...

java基础16 捕获、抛出以、自定义异常和 finally 块(以及关键字:throw 、throws)..._weixin_30480651的博客-程序员秘密

1、异常的体系/*------|Throwable:所有异常和错误的超类----------|Error(错误):错误一般用于jvm或者硬件引发的问题,所以我们一般不会通过代码去处理错误的----------|Exception(异常):是需要通过代码去处理--------------|运行时异常:如果一个方法内部抛出一个运行时异常,那么在方法上面可以声明也可以不声明,调用...

mysql 5.0.23_下载:优秀磁盘管理工具FolderSizes 5.0.23特别版_大禹昆仑的博客-程序员秘密

日常应用中,任何软件、工具、文档、影音都是我们最常接触的,它们进驻我们的硬盘后,占用的空间我们很少能够直观的感觉到,查找每一个文件夹消耗了多少磁盘空间这些都是琐碎的杂事。FolderSizes是一款优秀的磁盘管理工具,它可以有效地帮助我们快速的查看并统计硬盘中的各个分区所占用的空间大小以及文件夹和文件的大小,并给出详细的统计列表。可以让我们对磁盘中文件的分布情况一目了然。软件的欢迎界面主界面Fol...

推荐文章

热门文章

相关标签