前记

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" 头文件声明

STM32平台下官方DMP库6.12超详细移植教程相关推荐

  1. 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植

    2015年的电赛已经结束了.赛前接到器件清单的时候,看到带防护圈的多旋翼飞行器赫然在列,又给了一个瑞萨RL78/G13的MCU,于是自然联想到13年的电赛,觉得多半是拿RL78/G13做四旋翼的主控, ...

  2. boost linux 测试程序,Linux平台下安装 boost 库

    Linux平台下安装boost库 今天在给师弟们设计新一代软件框架的时候,需要实现一种功能:存在一种容器,里面存放着不同的数据类型,例如int, double, char,以及一些自己定义的类等等.后 ...

  3. 在VS平台下使用JAI_SDK库1———— 配置工程包含路径

    ** 在VS平台下使用JAI_SDK库1---- 配置工程包含路径 ** Using Jai SDK together with VS station 1. JAI SDK由两个API组成 a) Ja ...

  4. Swig超详细入门教程(Java调用C/C++, CMake)——更新于2021.12

    目录 相关教程 环境配置 0基础上手例子(C/C++) 使用CMake的例子(C语言) 使用CMake的例子(C++) 本文主要是手把手教萌新们如何用官方用例构建(有许多本人亲身踩坑血泪史) 相关教程 ...

  5. stm32正常运行流程图_STM32单片机学习笔记(超详细整理143个问题,学习必看)...

    原标题:STM32单片机学习笔记(超详细整理143个问题,学习必看) 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f ...

  6. CentOS7下安装Python3,超详细完整教程

    1.如果CentOS自带有python3需要更新指定版本的话,先把自带的删除,输入 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸 ...

  7. MIUI13欧洲ROM开发版安卓12超详细教你刷入MIUI欧洲版ROM

    MIUI13欧洲ROM开发版安卓12简洁版教程 通过 Fastboot 安装 A12 设备: 下载我们的 ROM zip 文件 解压下载的 zip 文件在 PC 中 将您的设备重新启动到快速启动模式( ...

  8. python学习笔记之numpy库的使用——超详细

    文章目录 NumPy介绍 一.如何创建 1.导入Numpy库,并命名为np: 2.查看版本 3.通过列表创建一维数组: 4.通过列表创建二维数组: 5.创建全为0的二维数组 6.创建全为1的三维数组 ...

  9. linux平台下使用boost库

    1. 下载boost编译后,boost头文件最好拷到/usr/include下,或者在/usr/include下有链接. stage/lib/libboost_*中的库文件最好拷到/usr/lib中. ...

最新文章

  1. Retrofit2.0
  2. Buffer和Cache的区别
  3. python爬虫(二)_HTTP的请求和响应
  4. 计算机语言中display翻译,display的意思在线翻译,解释display中文英文含义,短语词组,音标读音,例句,词源,同义词,反义词【澳典网ODict.Net】...
  5. thinkphp5部署nginx服务上多站点解决方案!
  6. 海康开放平台音视频方案对比(rtsp、http-flv、hls、rtmp)
  7. sql int 转string_由String引发的思考
  8. MySQL 数据库图形化管理界面应用种草之 Navicat Premium 如何使用
  9. Social Emotional Computing -价值观的运算
  10. 切换python执行版本
  11. torchtext处理文本数据——构造dataset读取文本(学习一)
  12. 【MySQL】5.7新特性之四
  13. e: 无法定位软件包 python-pip_关于Sony镜头不同系列定位的最全面分析
  14. 366万常用的中 txt 网盘_人间值得 – 中村恒子 pdf+azw3+epub+mobi+txt+docx|百度网盘资源分享...
  15. 谷歌chromeos_如何安装Chrome OS系统
  16. 11种免费获取SSL证书的方式
  17. 隔直电容选取及大小选择
  18. 遇到The import org.apache.commons cannot be resolved 的报错
  19. nvarchar 和varchar区别
  20. 浏览器f12监听element的值和变量的变化

热门文章

  1. 数字中国与未来世界,听IT领袖如何解读
  2. 计算机普通话测试三分钟自述,普通话考试三分钟
  3. 一图看懂IP地址划分原理(IP的A,B,C,D,E类地址),绝对准确无误!
  4. Python软件编程等级考试三级——20220319
  5. 要辞职了,收集一些如何写辞职信的模板
  6. Android Drawable (可绘制图像)
  7. 通过一个场景实例 了解前端处理大数据的无限可能
  8. 浏览器中的主页图标不见了
  9. 手机如何关闭微信“自动扣费”?
  10. android 获得手机MAC 和 IP