MPU6050经常读全是0, 复位又可以, 过会又不行, 会是什么问题

2020-01-01 17:50发布

本帖最后由 SkyGz 于 2016-7-25 21:47 编辑

I2C库用的是正点原子里的,  用IO模拟的

void MPU6050_Read_Buffer(u8 reg_addr, unsigned char *Read, u8 num)
{
    unsigned char i;

    IIC_Start();
    IIC_Send_Byte(MPU6050_Addr);
    IIC_Wait_Ack();
    IIC_Send_Byte(reg_addr);
    IIC_Wait_Ack();

    IIC_Start();
    IIC_Send_Byte(MPU6050_Addr + 1);
    IIC_Wait_Ack();

    for(i = 0; i < (num - 1); i++)
    {
        *Read = IIC_Read_Byte(1);
        Read++;
    }
    *Read = IIC_Read_Byte(0);
    IIC_Stop();
}

====================================================================

    u8 BUF_6050_buff[14];//6050所有测量参数

    MPU6050_Read_Buffer(ACCEL_XOUT_H, BUF_6050_buff, 14);
   
   //如果我不加入下面这些复位, 否则 经常读取的是0, 即时重新上电 也是0......  连  ST_LINK仿真器时, KEIL LOAD程序后, 正常,  这时 断开仿真器供电线给板子重上电,  又全是0了...晕.  
   //今天之前一直用的是 硬件I2C正常的, 结果今天硬件I2C卡在I2C_CheckEvent里, 不行了, 一搜说硬件I2C有BUG, 也不知怎么回事, 之前好好的,   晕死,   不行我 就改成IO模拟,   却又出这样的问题了.........
   //换MPU模块,  也是一样...  

    u8 cnt = 0;
    for(u8 i = 0; i < 14; i++)
        if (BUF_6050_buff == 0) cnt++;
    if (cnt == 14)
    {
        MPU6050_WriteReg( PWR_MGMT_1, 0x01);        //休眠状态
        delay_ms(10);
        MPU6050_WriteReg( PWR_MGMT_1, 0x00);        //解除休眠状态
        MPU6050_Read_Buffer(ACCEL_XOUT_H, BUF_6050_buff, 14);
    };
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。