采用软件iic读取的数据,软件iic就暂时不讲了,开搞mpu9250

在网上了解了一些,mpu9250实际上就是mpu6050+磁力计,即有两个器件地址,可以通过设置读取模式来分别读到mpu6050和磁力计的数据。

在网上看到这一片帖子,可以借鉴一点:https://blog.csdn.net/black_yu/article/details/51815049

还有一些前辈的指点

但是,最终还是没有调好,用的是工作时间,所以准备回去调试

莫名奇妙的成功了几次,即mpu9250+ak8963 数据成功读出来了,害得我高兴地上厕所去了,结果一回来又不行了。中间断了一次电。

现在棘手的问题是mpu9250,我没办法写寄存器

以下是这个问题的具体描述

1、mpu9250能读到ID,能读数据。

比如我现在加速度默认的量程是正负2G的,我想换成正负16G的量程时,读出来的数据还是2G的量程范围的值(我通过成功的那几次中才发现的问题)。我去读加速度量程的寄存器,读出来的值就是0x00。因此这个问题也导致我mpu9250没办法设置成passby模式,因此没办法读取磁力计!!!

2、这个iic的时序我是沿用的icm20609的时序这是设置完i6G后,读的加速度config寄存器(仍是2G的配置)

感觉波形是正确的呀,icm20609读的66的,也能修改配置。

下面我也贴一下我的iic代码,初始化代码。

#include "bsp_gpio.h"
#include "app_mpu9250.h"
#include "app\iam20609\app_iam20609.h"
#include "app\iam20609\imu.h"
#include "bsp_simiic.h"
#include "elog.h"
#include "app\connectDT\sendmessage.h"u8 mpu9250_init_State = mpu9250_init_pre_state;
u8 mpu9250_init_delay = 0x00;
u8 mpu9250_device = 2;Mpu9250_t mpu9250regdata;accel_t mpu9250acceldata;
gyro_t mpu9250gyrodata;
magn_t mpu9250magndata;uint16_T temp;accel_t mpu9250acceldatashow[5];
gyro_t mpu9250gyrodatashow[5];accel_t mpu9250accel_adjust[200];
gyro_t mpu9250gyro_adjust[200];
/*** \brief MPU6050 write single byte** \param address,value** \return 1:write success or 0:write fail*/
u8 MPU9250_WriteReg(u8 device, u8 address, u8 Value)
{i2c_Start();i2c_SendByte(device | I2C_WR);if (i2c_WaitAck() != 1){goto writesingle_fail;}i2c_SendByte(address);if (i2c_WaitAck() != 1){goto writesingle_fail;}i2c_SendByte(Value);if (i2c_WaitAck() != 1){goto writesingle_fail;}i2c_Stop();return 1;writesingle_fail:i2c_Stop();return 0;
}/*** \brief iam20609 read single byte** \param address,value** \return 1:read success or 0:read fail*/
u8 MPU9250_ReadReg(u8 device, u8 address, u8 * value)
{i2c_Start();i2c_SendByte(device | I2C_WR);if (i2c_WaitAck() != 0){goto readsingle_fail;}i2c_SendByte(address);if (i2c_WaitAck() != 0){goto readsingle_fail;}i2c_Start();i2c_SendByte(device | I2C_RD);if (i2c_WaitAck() != 0){goto readsingle_fail;}*value = i2c_ReadByte();i2c_NAck();i2c_Stop();return 1;readsingle_fail:i2c_Stop();return 0;
}/*** \brief iam20609 read  bytes** \param address,rxbuff,num** \return 1:read success or 0:read fail*/
u8 MPU9250_ReadData(u8 device, u8 address, u8 * rxBuff, u8 num)
{u8 i = 0;i2c_Start();i2c_SendByte(device | I2C_WR);if (i2c_WaitAck() != 0){goto readdata_fail;}i2c_SendByte(address);if (i2c_WaitAck() != 0){goto readdata_fail;}i2c_Start();i2c_SendByte(device | I2C_RD);if (i2c_WaitAck() != 0){goto readdata_fail;}for(i=0; i<(num); i++){*rxBuff = i2c_ReadByte();if (i != (num - 1)){i2c_Ack();}else{i2c_NAck();}rxBuff++;}i2c_Stop();return 1;readdata_fail:i2c_Stop();return 0;
}/*** \brief iam20609_readid** \param none** \return none*/
void MPU9250_ReadID(void)
{mpu9250regdata.WHO_AM_I_REG = 0x00;MPU9250_ReadReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_WHO_AM_I, &mpu9250regdata.WHO_AM_I_REG);if(0x71 != mpu9250regdata.WHO_AM_I_REG){mpu9250_device = 0;
//       log_e("not found device");}else{mpu9250_device = 1;log_i(" device  ok");}
}void mpu9250_InitState(void)
{mpu9250_init_State = mpu9250_init_pre_state;mpu9250_device = DEVICE_INIT;mpu9250_init_delay = 0;IMU_init();
}int8_t MPU9250_Init(void)
{int8_t mpu9250_init_returnvalue = 0xff;u8 rest = 0;switch (mpu9250_init_State){case mpu9250_init_pre_state:MPU9250_ReadID();mpu9250_init_State = mpu9250_init_step1_state;break;case mpu9250_init_step1_state:if (mpu9250_init_delay == 0x00){mpu9250_init_delay++;mpu9250regdata.PWR_MGMT_1_REG = 0x00;MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, 0x81);}else{mpu9250_init_delay++;if (mpu9250_init_delay > 8) //瀵よ埖妞?160ms{mpu9250_init_delay = 0;mpu9250_init_State = mpu9250_init_step2_state;}}break;case mpu9250_init_step2_state:mpu9250_init_delay++;switch (mpu9250_init_delay){case 0x01:MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, MPU6050_CLOCK_PLL_XGYRO);break;case 0x02:MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_SMPLRT_DIV, 0x04);  //200 Hz//             MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_2, 0);break;case 0x03://             MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_CONFIG, 0x06);break;case 0x04:MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_CONFIG, (MPU6050_ACCEL_FS_16 << 3));//+-2g//            MPU9250_WriteReg(MPU6050_RA_FF_THR, IAM20609_ACCEL_BW_21HZ);/*accel LPF 20HZ*/break;case 0x05:MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_GYRO_CONFIG, (MPU6050_GYRO_FS_1000 << 3));  //+-2000dps//          IAM20609_WriteReg(IAM20609_CONFIG_REG,IAM20609_GYRO_BW_20HZ); //gtro and temp LPFbreak;case 0x06://            MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_FF_THR, 0x00);break;case 0x07://             MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_USER_CTRL, 0x00);MPU9250_ReadReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_GYRO_CONFIG, (u8 *)&rest);//+-2gbreak;case 0x08:MPU9250_WriteReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_INT_PIN_CFG, 0x02);//set i2c bypass enable pin to true to access magnetometerbreak;case 0x09:MPU9250_ReadReg(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_INT_PIN_CFG, (u8 *)&rest);//+-2gif((rest&0x02) != 0x02){mpu9250_init_delay = 0x07;}MPU9250_WriteReg(MPU9150_RA_MAG_ADDRESS, AK8963_CNTL2,0x01);//复位器件MPU9250_WriteReg(MPU9150_RA_MAG_ADDRESS, AK8963_CNTL1,0x11);//设置为16bit模式mpu9250_init_State = mpu9250_init_step3_state;break;default:break;}break;case mpu9250_init_step3_state:if(0x48 == InitAK8963()){mpu9250_init_State = mpu9250_init_finish_state;}break;case mpu9250_init_finish_state:mpu9250_init_returnvalue = 0x01;break;default:break;}return mpu9250_init_returnvalue;
}u8 InitAK8963(void)
{u8 wia = 0;MPU9250_ReadReg(MPU9150_RA_MAG_ADDRESS, 0x00, (u8 *)&wia);log_i("ak8963 id = %d ",wia);return wia;
}//获取数据
//void GetAK8963Mag(void)
//{
//      MPU9250_WriteReg(AK8963_CNTL2,0x01);//复位芯片
//      MPU9250_WriteReg(AK8963_CNTL1,0x16);//设置为16bit模式 采样率为100HZ  //  while(!AK8963_ReadByte(AK8963_ST1));//等等数据转换完成
//      AK8963_ReadData();//连续读取三轴的数据,保存在结构体中
//}//自我测试模式
//u8 ak8963_Self_test(void)
//{
//      AK8963_WriteByte(AK8963_CNTL2,0x01);
//      AK8963_WriteByte(AK8963_CNTL1,0x00);//power down
//      AK8963_WriteByte(AK8963_ASTC,0x40);//Set self test
//      AK8963_WriteByte(AK8963_CNTL1,0x18);//SET Self Mode
//      while(!AK8963_ReadByte(AK8963_ST1));
//      AK8963_ReadData();
//      //usart4.printf("X_Mag=%d,Y_Mag=%d,Z_Mag=%d\r\n",g_tMag.X,g_tMag.Y,g_tMag.Z);
//      AK8963_WriteByte(AK8963_ASTC,0x00);//Clear self test
//      AK8963_WriteByte(AK8963_CNTL1,0x00);//power down
//      AK8963_WriteByte(AK8963_CNTL2,0x01);
//      if(((g_tMag.X>=-200)&&(g_tMag.X<=200))&&((g_tMag.Y>=-200)&&(g_tMag.Y<=200))&&((g_tMag.Z>=-3200)&&(g_tMag.Z<=-800)))
//          return 0;
//      else return 1;
//}/** Get raw 9-axis motion sensor readings (accel/gyro/compass).* FUNCTION NOT FULLY IMPLEMENTED YET.* @param ax 16-bit signed integer container for accelerometer X-axis value* @param ay 16-bit signed integer container for accelerometer Y-axis value* @param az 16-bit signed integer container for accelerometer Z-axis value* @param gx 16-bit signed integer container for gyroscope X-axis value* @param gy 16-bit signed integer container for gyroscope Y-axis value* @param gz 16-bit signed integer container for gyroscope Z-axis value* @param mx 16-bit signed integer container for magnetometer X-axis value* @param my 16-bit signed integer container for magnetometer Y-axis value* @param mz 16-bit signed integer container for magnetometer Z-axis value* @see getMotion6()* @see getAcceleration()* @see getRotation()* @see MPU6050_RA_ACCEL_XOUT_H*/
void MPU9250_getMotion9(accel_t* acc, gyro_t* gyro, magn_t* magn)
{u8 reg_data[6];//get accel and gyroMPU9250_getMotion6(acc, gyro);//read mag//  I2Cdev::writeByte(devAddr, MPU6050_RA_INT_PIN_CFG, 0x02); MPU9250_ReadData(MPU9150_RA_MAG_ADDRESS, MPU9150_RA_MAG_XOUT_L, reg_data, 6);magn->x = (((int16_t)reg_data[0]) << 8) | reg_data[1];magn->y = (((int16_t)reg_data[2]) << 8) | reg_data[3];magn->z = (((int16_t)reg_data[4]) << 8) | reg_data[5]; MPU9250_WriteReg(MPU9150_RA_MAG_ADDRESS, 0x0A, 0x11); //enable the magnetometer
}
/** Get raw 6-axis motion sensor readings (accel/gyro).* Retrieves all currently available motion sensor values.* @param ax 16-bit signed integer container for accelerometer X-axis value* @param ay 16-bit signed integer container for accelerometer Y-axis value* @param az 16-bit signed integer container for accelerometer Z-axis value* @param gx 16-bit signed integer container for gyroscope X-axis value* @param gy 16-bit signed integer container for gyroscope Y-axis value* @param gz 16-bit signed integer container for gyroscope Z-axis value* @see getAcceleration()* @see getRotation()* @see MPU6050_RA_ACCEL_XOUT_H*/
void MPU9250_getMotion6(accel_t* acc, gyro_t* gyro)
{
#if 0u8 reg_data[14];MPU9250_ReadData(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, reg_data, 14);acc->x = (((int16_t)reg_data[0]) << 8) | reg_data[1];acc->y = (((int16_t)reg_data[2]) << 8) | reg_data[3];acc->z = (((int16_t)reg_data[4]) << 8) | reg_data[5];gyro->x = (((int16_t)reg_data[8]) << 8) | reg_data[9];gyro->y = (((int16_t)reg_data[10]) << 8) | reg_data[11];gyro->z = (((int16_t)reg_data[12]) << 8) | reg_data[13];
#elseu8 reg_data[6];MPU9250_ReadData(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, reg_data, 6);acc->x = (((int16_t)reg_data[0]) << 8) | reg_data[1];acc->y = (((int16_t)reg_data[2]) << 8) | reg_data[3];acc->z = (((int16_t)reg_data[4]) << 8) | reg_data[5];MPU9250_ReadData(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_GYRO_XOUT_H, reg_data, 6);gyro->x = (((int16_t)reg_data[0]) << 8) | reg_data[1];gyro->y = (((int16_t)reg_data[2]) << 8) | reg_data[3];gyro->z = (((int16_t)reg_data[4]) << 8) | reg_data[5];
#endif
}void MPU9250_testMotion6(void)
{u8 reg_data[6];accel_t acc;gyro_t gyro;MPU9250_ReadData(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, reg_data, 6);mpu9250acceldata.x = (((int16_t)reg_data[0]) << 8) | reg_data[1];mpu9250acceldata.y = (((int16_t)reg_data[2]) << 8) | reg_data[3];mpu9250acceldata.z = (((int16_t)reg_data[4]) << 8) | reg_data[5];MPU9250_ReadData(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_GYRO_XOUT_H, reg_data, 6);mpu9250gyrodata.x = (((int16_t)reg_data[0]) << 8) | reg_data[1];mpu9250gyrodata.y = (((int16_t)reg_data[2]) << 8) | reg_data[3];mpu9250gyrodata.z = (((int16_t)reg_data[4]) << 8) | reg_data[5];
//    log_i("%6d %6d %6d %6d %6d %6d ",acc.x,acc.y,acc.z,gyro.x,gyro.y,gyro.z);
}void MPU9250_testMotion9(void)
{u8 reg_data[6];u8 st1 = 0;MPU9250_testMotion6();//  MPU9250_ReadReg(MPU9150_RA_MAG_ADDRESS,AK8963_ST1, &st1);//   if(st1){MPU9250_ReadData(MPU9150_RA_MAG_ADDRESS, MPU9150_RA_MAG_XOUT_L, reg_data, 6);mpu9250magndata.x = (((int16_t)reg_data[0]) << 8) | reg_data[1];mpu9250magndata.y = (((int16_t)reg_data[2]) << 8) | reg_data[3];mpu9250magndata.z = (((int16_t)reg_data[4]) << 8) | reg_data[5];}
//    MPU9250_WriteReg(MPU9150_RA_MAG_ADDRESS, AK8963_CNTL2,0x01);MPU9250_WriteReg(MPU9150_RA_MAG_ADDRESS,AK8963_CNTL1,0x11);//设置为16bit模式 采样率为100HZ //    log_i("%6d %6d %6d %6d %6d %6d ",acc.x,acc.y,acc.z,gyro.x,gyro.y,gyro.z);
//    MPU9250_WriteReg(MPU9150_RA_MAG_ADDRESS, 0x0A, 0x01); //enable the magnetometer// delay(10);//    MPU9250_WriteReg(MPU9150_RA_MAG_ADDRESS,AK8963_CNTL1,0x11);//每读一次,ak8963自动进入powerdown模式,这里需要重新设定单测量模式}void MPU9250_shelldata(void)
{//   log_i("%6d %6d %6d ",mpu9250acceldata.x,mpu9250acceldata.y,mpu9250acceldata.z);//   ANO_DT_Send_Senser(mpu9250acceldata.x,mpu9250acceldata.y,mpu9250acceldata.z,mpu9250gyrodata.x,mpu9250gyrodata.y,mpu9250gyrodata.z,0,0,0,0);log_i("%6d %6d %6d %6d %6d %6d %6d %6d %6d ",mpu9250acceldata.x,mpu9250acceldata.y,mpu9250acceldata.z,mpu9250gyrodata.x,mpu9250gyrodata.y,mpu9250gyrodata.z,mpu9250magndata.x,mpu9250magndata.y,mpu9250magndata.z);
}
//*****************************************************************************
//
//! \addtogroup linux-t
//! @{
//
//*****************************************************************************/*---------------------------------------------------------------------------*/
/* include files                                                             */
/*---------------------------------------------------------------------------*/
#include "bsp.h"
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include "bsp_adc0.h"
#include "bsp_gpio.h"
#include "bsp_iic.h"
#include "bsp_lptmr0.h"#include "bsp/bsp_simiic.h"/*
*********************************************************************************************************
*   函 数 名: bsp_InitI2C
*   功能说明: 配置I2C总线的GPIO,采用模拟IO的方式实现
*   形    参:  无
*   返 回 值: 无
*********************************************************************************************************
*//*
*********************************************************************************************************
*   函 数 名: i2c_Delay
*   功能说明: I2C总线位延迟,最快400KHz
*   形    参:  无
*   返 回 值: 无
*********************************************************************************************************
*/
static void i2c_Delay(void)
{//   u8 i;/*CPU主频 48MHZ实际应用选择400KHz左右的速率即可*/
//    for (i = 0; i < 20; i++);return;
}/*
*********************************************************************************************************
*   函 数 名: i2c_Start
*   功能说明: CPU发起I2C总线启动信号
*   形    参:  无
*   返 回 值: 无
*********************************************************************************************************
*/
void i2c_Start(void)
{I2C_SCL_SetOutput();I2C_SDA_SetOutput();i2c_Delay();I2C_SDA_1();I2C_SCL_1();i2c_Delay();I2C_SDA_0();i2c_Delay();I2C_SCL_0();i2c_Delay();
}/*
*********************************************************************************************************
*   函 数 名: i2c_Start
*   功能说明: CPU发起I2C总线停止信号
*   形    参:  无
*   返 回 值: 无
*********************************************************************************************************
*/
void i2c_Stop(void)
{I2C_SCL_0();I2C_SDA_0();i2c_Delay();I2C_SCL_1();i2c_Delay();I2C_SDA_1();i2c_Delay();I2C_SCL_SetInput();I2C_SDA_SetInput();
}/*
*********************************************************************************************************
*   函 数 名: bsp_InitI2C
*   功能说明: 配置I2C总线的GPIO,采用模拟IO的方式实现
*   形    参:  无
*   返 回 值: 无
*********************************************************************************************************
*/
void bsp_InitI2C(void)
{I2C_SCL_SetOutput();I2C_SDA_SetOutput();i2c_Stop();
}/*
*********************************************************************************************************
*   函 数 名: i2c_WaitAck
*   功能说明: CPU产生一个时钟,并读取器件的ACK应答信号
*   形    参:  无
*   返 回 值: 返回0表示正确应答,1表示无器件响应
*********************************************************************************************************
*/
#if 1uint8 i2c_WaitAck(void)
{uint8 re;I2C_SCL_0();I2C_SDA_SetInput(); /*在SCL低态,先SDA置输出,再SCL高态,否则会产生总线停止,引脚输入/输出状态不锁存*/i2c_Delay();I2C_SCL_1();if (I2C_SDA_READ()) /* CPU读取SDA口线状态 */{I2C_SDA_1();re = 1;}else{I2C_SDA_0();re = 0;}i2c_Delay();I2C_SDA_SetOutput(); /*在SCL高态,先同步SDA状态再置输出,再SCL低态,否则会产生总线停止或SDA多余状态*/I2C_SCL_0();return re;
}
#endif
#if 0
uint8 i2c_WaitAck(void)
{uint8 re;uint8 tempTime = 0;I2C_SCL_0();I2C_SDA_SetInput(); /*在SCL低态,先SDA置输出,再SCL高态,否则会产生总线停止,引脚输入/输出状态不锁存*/i2c_Delay();I2C_SCL_1();while(I2C_SDA_READ()){tempTime++;if(tempTime>250){I2C_SDA_1();i2c_Delay();I2C_SDA_SetOutput(); /*在SCL高态,先同步SDA状态再置输出,再SCL低态,否则会产生总线停止或SDA多余状态*/I2C_SCL_0();return 1;}    }I2C_SDA_0();i2c_Delay();I2C_SDA_SetOutput(); /*在SCL高态,先同步SDA状态再置输出,再SCL低态,否则会产生总线停止或SDA多余状态*/I2C_SCL_0();return 0;
}#endif
/*
*********************************************************************************************************
*   函 数 名: i2c_Ack
*   功能说明: CPU产生一个ACK信号
*   形    参:  无
*   返 回 值: 无
*********************************************************************************************************
*/
void i2c_Ack(void)
{I2C_SDA_SetOutput();I2C_SCL_0();i2c_Delay();I2C_SDA_0();i2c_Delay();I2C_SCL_1();i2c_Delay();I2C_SCL_0();i2c_Delay();
}/*
*********************************************************************************************************
*   函 数 名: i2c_NAck
*   功能说明: CPU产生1个NACK信号
*   形    参:  无
*   返 回 值: 无
*********************************************************************************************************
*/
void i2c_NAck(void)
{I2C_SDA_SetOutput();I2C_SCL_0();i2c_Delay();I2C_SDA_1();i2c_Delay();I2C_SCL_1();i2c_Delay();I2C_SCL_0();i2c_Delay();
}/*
*********************************************************************************************************
*   函 数 名: i2c_SendByte
*   功能说明: CPU向I2C总线设备发送8bit数据
*   形    参:  _ucByte : 等待发送的字节
*   返 回 值: 无
*********************************************************************************************************
*/
void i2c_SendByte(uint8 _ucByte)
{uint8 i;/* 先发送字节的高位bit7 */for (i = 0; i < 8; i++){I2C_SCL_0();i2c_Delay();       if (_ucByte & 0x80){I2C_SDA_1();}else{I2C_SDA_0();}i2c_Delay();I2C_SCL_1();i2c_Delay();     _ucByte <<= 1;  /* 左移一个bit */}
}/*
*********************************************************************************************************
*   函 数 名: i2c_ReadByte
*   功能说明: CPU从I2C总线设备读取8bit数据
*   形    参:  无
*   返 回 值: 读到的数据
*********************************************************************************************************
*/
uint8 i2c_ReadByte(void)
{uint8 i;uint8 value;I2C_SDA_SetInput();for (i = 0; i < 8; i++){i2c_Delay();I2C_SCL_1();value <<= 1;if (I2C_SDA_READ()){I2C_SDA_1();value |= 0x01;}else{I2C_SDA_0();value &= 0xfe;}i2c_Delay();if(i == 7)I2C_SDA_SetOutput();/*置SDA输出,这样SDA不会产生多余状态*/I2C_SCL_0();}return value;
}/*
*********************************************************************************************************
*   函 数 名: i2c_CheckDevice
*   功能说明: 检测I2C总线设备,CPU向发送设备地址,然后读取设备应答来判断该设备是否存在
*   形    参:  _Address:设备的I2C总线地址
*   返 回 值: 返回值 0 表示正确, 返回1表示未探测到
*********************************************************************************************************
*/
uint8 i2c_CheckDevice(uint8 _Address)
{uint8 ucAck;I2C_SDA_SetInput();I2C_SCL_SetInput();if (I2C_SDA_READ() && I2C_SCL_READ()){I2C_SDA_SetOutput();I2C_SCL_SetOutput();i2c_Start();        /* 发送启动信号 *//* 发送设备地址+读写控制bit(0 = w, 1 = r) bit7 先传 */i2c_SendByte(_Address | I2C_WR);ucAck = i2c_WaitAck();  /* 检测设备的ACK应答 */i2c_Stop();         /* 发送停止信号 */return ucAck;}I2C_SDA_SetOutput();I2C_SCL_SetOutput();return 1;   /* I2C总线异常 */
}//*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
//*****************************************************************************

[问题]mpu9250+bmp280数据读取相关推荐

  1. 『TensorFlow』数据读取类_data.Dataset

    一.资料 参考原文: TensorFlow全新的数据读取方式:Dataset API入门教程 API接口简介: TensorFlow的数据集 二.背景 注意,在TensorFlow 1.3中,Data ...

  2. linux 读取大量图片 内存,10 张图帮你搞定 TensorFlow 数据读取机制

    导读 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解 ...

  3. 数据读取与数据扩增方法

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:樊亮.黄星源.Datawhale优秀学习者 本文对图像数据读取及图 ...

  4. 图像数据读取及数据扩增方法

    Datawhale干货 作者:王程伟,Datawhale成员 本文为干货知识+竞赛实践系列分享,旨在理论与实践结合,从学习到项目实践.(零基础入门系列:数据挖掘/cv/nlp/金融风控/推荐系统等,持 ...

  5. Task02——零基础入门NLP - 新闻文本分类之数据读取与分析

    本期目标 学习使用Pandas读取赛题数据 分析赛题数据的分布规律 数据读取 import pandas as pd train_df=pd.read_csv('./train_set.csv/tra ...

  6. 单细胞数据读取(二)之Read10X读不出来dgCMatrix报错

    前面我们也遇到过10x的数据读取不进去,如果大家遇到下面的报错,可以通过修改10x的原始重新读取,详细可以见链接https://blog.csdn.net/weixin_43949246/articl ...

  7. livechart 只显示 y 值_基于Python语言的SEGY格式地震数据读取与显示编程

    敬请关注<地学新视野> 摘要:本文简单介绍了SEG-Y地震数据文件格式,以及如何用Python语言编写读写SEG-Y格式的地震数据并绘制地震剖面,其中用到了Segyio和matplotli ...

  8. TensorFlow数据读取方式:Dataset API,以及如何查看dataset:DatasetV1Adapter的方法

    TensorFlow数据读取方式:Dataset API Datasets:一种为TensorFlow 模型创建输入管道的新方式.把数组.元组.张量等转换成DatasetV1Adapter格式 Dat ...

  9. python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)

    我们常见的数据存储格式无非就是csv.excel.txt以及数据库等形式. 数据读取 在pandas中可以使用一些函数完成数据的读取.比如read_csv.read_excel.read_table. ...

最新文章

  1. Codeforces Round #665 (Div. 2) Maximum Distributed Tree(树上贪心)
  2. 图解|什么是缺页错误Page Fault
  3. Hystrix概述(二)
  4. ubuntu下eclipse打开window下的java文件,注释内容为乱码,解决方法
  5. 自适应数字墙星系网站404页面源码
  6. 你想过同时为两家以上的企业工作吗?
  7. sql azure 语法_使用Azure门户监视安装了SQL Server的Azure计算机
  8. “迭代期内无变更”与敏捷开发产品版本规划
  9. 弹出ifame页面(jquery.reveal.js)
  10. [原创]BizTalk 开发系列
  11. 最短路大大大跟着合集
  12. 在Win10上安装VC6
  13. AI的螺旋式上升?今日头条AI掌门人马维英离职,“重返”清华从事培育科研工作
  14. 15款替代微软产品的开源软件
  15. 【debug】EACCES: permission denied, unlink
  16. 英语口语收集(三十七)
  17. 2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!(转载)
  18. excel表格打印每页都有表头_excel怎样打印每页都有表头
  19. Windows10下设置电脑屏幕仅显示黑白
  20. PDF转TXT免费脚本

热门文章

  1. 液态金属驱动机器人研究取得进展
  2. 关于strncpy这个函数
  3. python中的 split()函数
  4. dell服务器装独立显卡无显示输出,dell服务器设置独立显卡(dell服务器加显卡)...
  5. 阿里云服务器Ubuntu16.04配置图形界面并远程桌面连接
  6. php获取证书编号没有serialNumberHex只有serialNumber处理方法
  7. java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar
  8. nginx是什么、怎么用、以及用nginx解决实际问题
  9. laravel api 429 问题解决
  10. 大数据深度学习学习路线