STM32平台下官方DMP库6.12超详细移植教程
前记
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超详细移植教程相关推荐
- 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植
2015年的电赛已经结束了.赛前接到器件清单的时候,看到带防护圈的多旋翼飞行器赫然在列,又给了一个瑞萨RL78/G13的MCU,于是自然联想到13年的电赛,觉得多半是拿RL78/G13做四旋翼的主控, ...
- boost linux 测试程序,Linux平台下安装 boost 库
Linux平台下安装boost库 今天在给师弟们设计新一代软件框架的时候,需要实现一种功能:存在一种容器,里面存放着不同的数据类型,例如int, double, char,以及一些自己定义的类等等.后 ...
- 在VS平台下使用JAI_SDK库1———— 配置工程包含路径
** 在VS平台下使用JAI_SDK库1---- 配置工程包含路径 ** Using Jai SDK together with VS station 1. JAI SDK由两个API组成 a) Ja ...
- Swig超详细入门教程(Java调用C/C++, CMake)——更新于2021.12
目录 相关教程 环境配置 0基础上手例子(C/C++) 使用CMake的例子(C语言) 使用CMake的例子(C++) 本文主要是手把手教萌新们如何用官方用例构建(有许多本人亲身踩坑血泪史) 相关教程 ...
- stm32正常运行流程图_STM32单片机学习笔记(超详细整理143个问题,学习必看)...
原标题:STM32单片机学习笔记(超详细整理143个问题,学习必看) 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f ...
- CentOS7下安装Python3,超详细完整教程
1.如果CentOS自带有python3需要更新指定版本的话,先把自带的删除,输入 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸 ...
- MIUI13欧洲ROM开发版安卓12超详细教你刷入MIUI欧洲版ROM
MIUI13欧洲ROM开发版安卓12简洁版教程 通过 Fastboot 安装 A12 设备: 下载我们的 ROM zip 文件 解压下载的 zip 文件在 PC 中 将您的设备重新启动到快速启动模式( ...
- python学习笔记之numpy库的使用——超详细
文章目录 NumPy介绍 一.如何创建 1.导入Numpy库,并命名为np: 2.查看版本 3.通过列表创建一维数组: 4.通过列表创建二维数组: 5.创建全为0的二维数组 6.创建全为1的三维数组 ...
- linux平台下使用boost库
1. 下载boost编译后,boost头文件最好拷到/usr/include下,或者在/usr/include下有链接. stage/lib/libboost_*中的库文件最好拷到/usr/lib中. ...
最新文章
- Retrofit2.0
- Buffer和Cache的区别
- python爬虫(二)_HTTP的请求和响应
- 计算机语言中display翻译,display的意思在线翻译,解释display中文英文含义,短语词组,音标读音,例句,词源,同义词,反义词【澳典网ODict.Net】...
- thinkphp5部署nginx服务上多站点解决方案!
- 海康开放平台音视频方案对比(rtsp、http-flv、hls、rtmp)
- sql int 转string_由String引发的思考
- MySQL 数据库图形化管理界面应用种草之 Navicat Premium 如何使用
- Social Emotional Computing -价值观的运算
- 切换python执行版本
- torchtext处理文本数据——构造dataset读取文本(学习一)
- 【MySQL】5.7新特性之四
- e: 无法定位软件包 python-pip_关于Sony镜头不同系列定位的最全面分析
- 366万常用的中 txt 网盘_人间值得 – 中村恒子 pdf+azw3+epub+mobi+txt+docx|百度网盘资源分享...
- 谷歌chromeos_如何安装Chrome OS系统
- 11种免费获取SSL证书的方式
- 隔直电容选取及大小选择
- 遇到The import org.apache.commons cannot be resolved 的报错
- nvarchar 和varchar区别
- 浏览器f12监听element的值和变量的变化