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”,并拷贝整个文件夹到新工程的“Libraries”文件夹下,改名为“Motion_Driver”
请添加图片描述

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

接下来,我们需要替换“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" 头文件声明
### 回答1: 要配置Linux的默认网关,可以使用以下步骤: 1. 打开终端并以root用户身份登录。 2. 使用以下命令打开网络配置文件: vi /etc/sysconfig/network-scripts/ifcfg-eth (如果您使用的是不同的网络接口,请相应地更改eth) 3. 在文件中添加以下行: GATEWAY=192.168.1.1 (请将IP地址更改为您的默认网关IP地址) 4. 保存并关闭文件。 5. 重新启动网络服务: service network restart 或 systemctl restart network 6. 检查默认网关是否已正确配置: route -n (应显示正确的默认网关IP地址) 希望这可以帮助您配置Linux的默认网关。 ### 回答2: 在Linux操作系统中,网络配置是非常重要的一项配置,其中设置默认网关是网络配置的一部分。默认网关是一个路由器或网关设备,用于传输数据包到另一个网络。如果没有正确设置默认网关,可能会导致网络无法正常工作。 要配置默认网关,可以使用以下步骤: 1.首先需要确认网络接口名称。可以使用ifconfig命令查看。例如,网络接口名称为eth0。 2.使用route命令设置默认网关。命令格式如下: route add default gw [IP 地址] [网络接口名称] 其中,“[IP地址]”是默认网关的IP地址,“[网络接口名称]”是网络接口的名称。例如,要将默认网关设置为192.168.1.1,可以使用以下命令: route add default gw 192.168.1.1 eth0 3.测试是否设置成功。可以使用ping命令测试默认网关是否能够正常响应。例如,使用以下命令测试默认网关: ping 192.168.1.1 如果返回正常的ping响应,则说明默认网关设置成功;如果无法响应,则说明默认网关设置有误。 在Linux操作系统中,还可以通过修改配置文件来设置默认网关。例如,在Ubuntu系统中,可以编辑/etc/network/interfaces文件,添加以下行来设置默认网关: gateway 192.168.1.1 在CentOS系统中,可以编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,添加以下行来设置默认网关: GATEWAY=192.168.1.1 需要注意的是,在设置默认网关时,应该根据网络的实际情况来设置。例如,如果要连接到Internet,应该设置ISP提供的网关IP地址作为默认网关。同时,也要确保设置的网关IP地址和网络接口名称都是正确的。 ### 回答3: Linux是一种开源的操作系统,为了能够正常访问网络资源,需要对其进行网络配置。其中一个重要的配置就是默认网关,本文将以CentOS 7为例,讲如何配置Linux的默认网关。 首先,我们需要确定网关的IP地址。通常来说,网关IP地址是路由器的IP地址,也就是说,在同一网络中,所有设备的IP地址都是类似的,只有最后一组数字不同,而网关的IP地址通常是最后一组数字全为1的那个设备的IP地址。 接下来,我们可以通过命令行或者图形界面(如Gnome)方式进行配置。 命令行方式: 1. 首先,登录Linux系统,并打开终端窗口。输入如下命令,查看当前系统的网络配置: ``` $ ip addr ``` 2. 查找需要修改的网卡,通常是eth0。输入如下命令,查看eth0网卡的详细信息: ``` $ ip addr show eth0 ``` 3. 在该网卡对应的配置文件中添加默认网关的IP地址。首先进入网卡配置文件,输入如下命令: ``` $ vi /etc/sysconfig/network-scripts/ifcfg-eth0 ``` 在该文件中添加以下内容: ``` GATEWAY=网关IP地址 ``` 保存并退出文件。 4. 重新启动网络服务,输入如下命令: ``` $ systemctl restart network ``` 5. 验证配置是否成功,输入如下命令,查看默认网关是否已经设置成功: ``` $ ip route ``` 图形界面方式: 1. 打开图形界面(如Gnome),进入“系统设置”,点击“网络”。 2. 在“网络设置”中,找到需要修改的网卡(通常是eth0),点击“选项”按钮,在弹出的菜单中选择“IPv4设置”。 3. 在“IPv4设置”中选择“手动”,输入默认网关的IP地址。 4. 点击“保存”,然后重新启动网络服务,验证配置是否成功。 以上就是Linux配置默认网关的步骤。配置完成后,我们就可以通过Linux系统访问互联网,同时也可以在内网中与其他设备进行通信。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值