if (mpu_read_fifo_stream(dmp.packet_length, fifo_data, more)) return -1; /* Parse DMP packet. */ if (dmp.feature_mask & (DMP_FEATURE_LP_QUAT | DMP_FEATURE_6X_LP_QUAT)) { #ifdef FIFO_CORRUPTION_CHECK long quat_q14[4], quat_mag_sq; #endif quat[0] = ((long)fifo_data[0]...
网上其他地方的说法是:“ dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more)读取数据的速度要快,如果你读取的速度不够快的话,MPU的FIFO就会溢出,估计会出问题,这也是一直无法读出数据的原因。这样肯定是有问题的,所以使用这一个函数一定要放在一个定时回调函数里面,同时应该加上一些保护措施...
执行 if(mpu_read_fifo_stream(dmp.packet_length,fifo_data,more)) 这个判断的时候,fifo数据已经进入...
result = mpu_run_self_test(gyro, accel);if (result == 0x7) { /* Test passed. We can ...
mpu_read_fifo_stream() --> mpu_reset_fifo() 看到了吧,这里有个50ms的延时,对于实时操作系统来说,50ms的延时就好像是一万年,所以果断把这句代码删掉。我之后也对比过其他stm32厂商的MPU6050初始化代码,都没有这个50ms的延时,可见这是正点原子加进去的。
}//找到inv_mpu.c中的:intmpu_read_fifo_stream(unsignedshortlength, unsignedchar*data, unsignedchar*more) { unsignedchartmp[2]; unsignedshortfifo_count;if(!st.chip_cfg.dmp_on)return-1;if(!st.chip_cfg.sensors)return-1;if(i2c_read(st.hw->addr, st.reg->fifo_count_h,2, tmp))return-...
int mpu_read_fifo_stream(unsigned short length, unsigned char *data, unsigned char *more) { unsigned char tmp[2]; unsigned short fifo_count; if (!st.chip_cfg.dmp_on) return -1; if (!st.chip_cfg.sensors) return -1; if (i2c_read(st.hw->addr, st.reg->fifo_count_h, 2, tmp)...
追踪进去显示在函数mpu_read_fifo_stream(unsigned short length, unsigned char *data, unsigned char *...
int mpu_get_int_status (short *status) Read the MPU interrupt status registers. int mpu_read_fifo (short *gyro, short *accel, unsigned long *timestamp, unsigned char *sensors, unsigned char *more) Get one packet from the FIFO. int mpu_read_fifo_stream (unsigned short length, unsigned...
这里的一块初始化放到mpu_init函数里面去了,这里可以不管,所以初始化为0 struct gyro_reg_s { unsig...