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);
    };
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
skyseeingliqy
1楼-- · 2020-01-01 22:52
前几天不是有一哥儿们干脆读不出来吗?最近怎么都出问题了
MasterPhi
2楼-- · 2020-01-01 23:50
逻辑分析仪
guzhen24
3楼-- · 2020-01-02 03:02
 精彩回答 2  元偷偷看……
wangyu_2011
4楼-- · 2020-01-02 07:48
换一片试试。我遇到过坏的。
SkyGz
5楼-- · 2020-01-02 13:09
wangyu_2011 发表于 2016-7-26 09:21
换一片试试。我遇到过坏的。

贴子说了  换MPU模块,  也是一样...  
SkyGz
6楼-- · 2020-01-02 15:56
guzhen24 发表于 2016-7-26 00:47
iic的地址有没有问题,我记得有个ad0的引脚电平会影响地址

贴子说了,  是有时 不行.........................关地址什么事,   如果地址不对,  永远都读不到.......

一周热门 更多>