TM4C123G--移植MPU6050DMP库和函数使用说明

本文提到的代码下载地址:

http://download.csdn.net/detail/qq_29757283/9579616

MPU6050DMP库源文件来自正点原子(饮水思源)

移植过程参考了网上的一个帖子,过去好几天了我就不在翻出来了,有需要的搜索一下。

当然,重点大概是改了几个头文件,改了一个printf函数,几个delay相关的函数。等等

 

上传的文件如果是tm4c123G评估套件的话理论上烧录进去就能用。在本人的板上是亲测通过的。

 

主程序是发送姿态信息给“匿名四轴上位机”。可以观察到姿态变化。

 

匿名四轴上位机需要做一点简单的配置,这一点也请参考正点原子的MPU6050部分 讲解(如果没有买过他们的开发板,可以直接百度云搜索他们的资料,或者上他们的那个论坛下载)。

 

用传感器最重要的是要采集到对应的信息数据,然后进行处理。对于这一点,正式我开贴的目的。目前我也是入门,所以采集到一些数据但是还没有头绪怎么用。但是项目会用到,所以我尽量做到一步步更新,把学习过程发上来。

 

程序中个人认为最关键的有两个:一是会用函数。二是数据的传递和使用方式

MPU6050的数据我到写这个帖子的时候也是不太懂怎么用,.c文件的相关函数以及有所了解。下面简单介绍一下几个主要函数的使用

 

第一步先在工程文件(main.c)中定义几个关键变量用来存放数据,因为数据要到处传递,所以不要放在main函数内部。

uint16_t tmp;			//温度
short aacx,aacy,aacz;		//加速度传感器原始数据
short gyrox,gyroy,gyroz;	//陀螺仪原始数据

float pitch,roll,yaw; 		//欧拉角

 

 

 

下面是获取六轴原始数据的函数调用

 

//得到加速度传感器数据
MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	
//得到陀螺仪数据
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);	

 

可以看到,数据是以指针的形式传递的。在函数内部已经把传感器的原始数据赋值给了前面我们在工程文件中定义的(全局)变量了。

 

所以该函数有返回值,但是放回值不是我们要的数据,而是用于判断是否获取数据成功的0\1。数据在函数内部已经写入到了变量对应的地址中去了。

 

 

//下面是获取欧拉角数据,经过DMP和函数四元运算过的可用数据。
mpu_dmp_get_data(&pitch,&roll,&yaw)

 

 

函数使用方式与上面一模一样。

 

需要注意的是,如果不做修改的话,这些函数的返回值都是0表示获取数据成功,1表示获取数据在某个环节出了问题。

 

结束语:看上去我并没有对具体的MPU6050相关.c 文件进行讲解。但是基于快速开发的角度,实际上我们并不需要了解MPU6050内部地址,和数据传送协议等。(这是指基于已经有人写好了完善的可用的 .c文件可供简单修改就能使用的情况下)。所以我们需要做的就是直接把MPU6050这整个文件夹“复制”到自己的工程中,做一下简单的修改就可以直接调用函数获取数据了。

 

多说一句:如果是其它MCU,那么要做的事情,第一想到的当然是修改IO口。IO口已经用宏定义写好了,不论是c51(应该扛不住),还是msp430,或者是STM32(这个不如直接下载上面提到的原版),或者AVR、arduino等,再IO口函数初始化的地方修改一下,宏定义修改一下理论上就OK了(因为本工程是用软件I2C通信的)

当然,详细点写,上面写的是第一点想到的,还有一个重要的是,首先你要先摸清自己MCU的时钟系统(能够配置成功一个固定频率的就好)。然后据此写一个us级的delay函数。这一点非常重要。当然这个只需要在比如delay.c文件中实现就好,(我是放在sys.h)文件中。写好函数后,记得要把函数名改成与mpu6050.c中调用的delay_us();函数一致。

这里再多说一个技巧,虽然你看这篇博客的时候可能已经知道了。就是精准延时建议使用官方自带的函数,比如msp430的__delay_cycles();(可能写错了,有点忘了),或者是TM4C的SysCtlDelay();-->3个时钟周期。至于STM32的我是直接用写好的,所以没有认真看过自带的。

关于移植到其它MCU上需要注意的暂时就想到这么多。

第一实现精准延时,

第二复制过去修改IO口。

第三再复制DMP库相关的文件按开头说的搜索帖子按步骤修改。

这样理论上MPU6050就ok了

第四如果要用到上位机看数据的话,你需要有一个好用的UART函数。

第五如果要用“匿名四轴上位机”的话,我不说的很复杂,就是uart要适当改成一次一字节发送,我的程序就是适当修改了uart函数。

第六你需要简单按要求配置一下上位机的几个选项

 

本文的目的主要还是希望能做到拿到.c文件复制粘贴,了解下函数就能直接使用。

 

最后,如果上面内容有错误的地方欢迎支持,我也是刚入门嵌入式相关。有补充的欢迎在评论区中补充。

 

 

本文提到的代码下载地址:

http://download.csdn.net/detail/qq_29757283/9579616

 

 

 

你可能感兴趣的:(嵌入式,物联网:Arduino,STM32,etc)