STM32F103使用MPU6050代码遇到的一些bug(正点原子代码)

1.mpu_dmp_init()

始终通过不了,运行debug之后发现卡在mpu_init(),不得不说正点这部分代码写的很瞎,我不太理解。自己找了很多资料都是返回8,然而我的却不是这种情况。只能把这部分替换掉下面的代码

u8 mpu_dmp_init(void)
{
	int result; 
//	u8 res=0;
	MPU_IIC_Init(); 	//初始化IIC总线
	 result = mpu_init();

	 if(!result)
  {	 		 

	  printf("mpu initialization complete......\n ");	 	  //mpu_set_sensor
	  if(!mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL))
	  	 printf("mpu_set_sensor complete ......\n");

	  else
	  	 printf("mpu_set_sensor come across error ......\n");
	  if(!mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL))	   	  //mpu_configure_fifo
	  	 printf("mpu_configure_fifo complete ......\n");
	  else
	  	 printf("mpu_configure_fifo come across error ......\n");
	  if(!mpu_set_sample_rate(DEFAULT_MPU_HZ))	   	  //mpu_set_sample_rate
	  	 printf("mpu_set_sample_rate complete ......\n");
	  else
	  	 printf("mpu_set_sample_rate error ......\n");
	  if(!dmp_load_motion_driver_firmware())   	  //dmp_load_motion_driver_firmvare
	  	printf("dmp_load_motion_driver_firmware complete ......\n");
	  else
	  	printf("dmp_load_motion_driver_firmware come across error ......\n");
	  if(!dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation))) 	  //dmp_set_orientation
	  	 printf("dmp_set_orientation complete ......\n");
	  else
	  	 printf("dmp_set_orientation come across error ......\n");
	  if(!dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT | DMP_FEATURE_TAP |
	        DMP_FEATURE_ANDROID_ORIENT | DMP_FEATURE_SEND_RAW_ACCEL | DMP_FEATURE_SEND_CAL_GYRO |
	        DMP_FEATURE_GYRO_CAL))		   	  //dmp_enable_feature
	  	 printf("dmp_enable_feature complete ......\n");
	  else
	  	 printf("dmp_enable_feature come across error ......\n");
	  if(!dmp_set_fifo_rate(DEFAULT_MPU_HZ))   	  //dmp_set_fifo_rate
	  	 printf("dmp_set_fifo_rate complete ......\n");
	  else
	  	 printf("dmp_set_fifo_rate come across error ......\n");
	  run_self_test();
	  if(!mpu_set_dmp_state(1))
	  	 printf("mpu_set_dmp_state complete ......\n");
	  else
	  	 printf("mpu_set_dmp_state come across error ......\n");
  }
  return 0;
}

2.MPU_Init()               

一开始运行时候只出现上面的问题,但是上面问题解决又出现这种问题。网上搜了很多说是硬件的问题,我开始查看是不是焊接出现了问题。

然而都没有什么用,最后发现是引脚的问题。我自己的板子F103RCT6看原理图是PB10和PB11是I2C的引脚,就觉得需要修改。其实这里 PB10和PB11是硬件的,我们这里使用到的是软件上的 所以不能用。我修改成了PB6和PB7问题解决。

3.mpu_dmp_get_data(&pitch, &roll, &yaw) 

出现上面那么多问题都解决以为,成功了没想到读取角度还有错误心态崩溃。

用debug进去发现是if(dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more))return 1;    这一句的问题,再进去看dmp_read_fifo这个函数发现是这个mpu_read_fifo_stream函数的问题。再进去看是

    if (fifo_count < length) {
        more[0] = 0;
        return -1;

这个的问题,网上有直接注释掉这一步的,但是我一开始注释掉有用,后来又没用具体不知道。我再后来再移植一下就又可以了,就很离谱。

 最后再补充一下这个容易出错的地方,推荐使用以下代码读取数据,用if的话可能出现FIFO堆栈满了的情况。

while (mpu_dmp_get_data(&pitch, &roll, &yaw) != 0)

此一次写要是有不对的地方请大家批评指正!

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值