我参照原子F407原子例程移植到F103上。 DMP文件那些都没有动, 但是发现程序一直卡在MPU-DMP初始化这里。经过我的一步一步排查 ,发现是MPU6050自检失败 。对于DMP这块 我没有研究完全 搬得原子里边的代码,我也没有动过。求大神指点 下边代码中卡在result那里 result返回值为0
代码如下
//MPU6050×?????
//·?????:0,????
// ????,?§°?
u8 run_self_test(void)
{
int result;
//char test_packet[4] = {0};
long gyro[3], accel[3];
result = mpu_run_self_test(gyro, accel);
if (result == 0x3)
{
/* Test passed. We can trust the gyro data here, so let's push it down
* to the DMP.
*/
float sens;
unsigned short accel_sens;
mpu_get_gyro_sens(&sens);
gyro[0] = (long)(gyro[0] * sens);
gyro[1] = (long)(gyro[1] * sens);
gyro[2] = (long)(gyro[2] * sens);
dmp_set_gyro_bias(gyro);
mpu_get_accel_sens(&accel_sens);
accel[0] *= accel_sens;
accel[1] *= accel_sens;
accel[2] *= accel_sens;
dmp_set_accel_bias(accel);
return 0;
}else return 1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
水平放置 是 有器件的那一面朝上,,, 你再试试,,
或者直接把自检屏蔽了, 不自检,, 就行了
---------------------------------
嗯 是的 就是器件有字的那一面找上,
我把自检屏蔽掉了,的确可以读出来欧拉角,读出来的数也是正确的,
但就是每次运行u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)这个函数时间好像挺长的。
我在论坛找了另一个实例“MPU6050空中鼠标工程”这个在自检那里完全可以过去,我也对照了两个程序,没发现没什么不一样的地方,
话说自检他不是相当于将当前位置设置为零点,我就想不通他为什么自检不过去呢,
---------------------------------
我的就能过哎 , 不知道为啥,
几千行程序呢,,, 里面应该有不一样的地方吧
--------------------------------
解决了,我的当时是IIC两根信号线太长了,估计有干扰,做了个转接插座插在板子上就好了。
一周热门 更多>