综合技术
直播中

余英姿

7年用户 216经验值
私信 关注
[问答]

MPU6050程序移植到L151上时就报错是怎么回事?

最近在调试 MPU6050模块,在F4上还能跑起来,但程序移植到L151上时就报错:Unsupported software product rev 6。找了好多资料也没有具体的解决方案,对比了F4上的程序和L151上的程序,确认没有什么重大区别。
另外,用探索者板子板载的MPU6050启动很快,dmp初始化一下就OK, 但用外置MPU6050模块挂在探索者板子上,有时需要初始化5,6下有时几分钟才通过,就是下面这块代码:
while((mpu_dmp_init()))
    {
        LCD_ShowString(30,130,200,16,16,"MPU6050 Error");
        delay_ms(200);
        LCD_Fill(30,130,239,130+16,WHITE);
         delay_ms(200);
    }
    printf("MPU6050 OKrn");
这个模块难道对硬件的要求这么高吗?
“Unsupported software product rev 6“ 这个报警在代码:
/* Check product revision. */
    if (i2c_read(st.hw->addr, st.reg->accel_offs, 6, data))
        return -1;
    rev = ((data[5] & 0x01) << 2) | ((data[3] & 0x01) << 1) |
        (data[1] & 0x01);
   
    printf("data: %02x,%02x,%02x,%02x,%02x,%02xrn", data[0],data[1],data[2],data[3],data[4],data[5]);
    if (rev) {
        /* Congrats, these parts are better. */
        if (rev == 1)
            st.chip_cfg.accel_half = 1;
        else if (rev == 2)
            st.chip_cfg.accel_half = 0;
        else {
            log_e("Unsupported software product rev %d.rn", rev);
            return -1;
        }
    }
I2C读写没有问题,不然前面就报错了。st.reg->accel_offs  在代码中的值为0x06, 在MPU6050的寄存器手册中没有看到这个寄存器?寄存器是从0X0D~0X75啊。
返回的数值为 data: f6,b0,fd,ff,ff,ff, 算出来rev的值就是6.
为什么F4上就行,L151上就不行了?这个Unsupported software product rev 6 是什么鬼?

回帖(3)

贾虎世

2019-7-25 06:40:33
说明不支持你这个芯片
举报

赵军

2019-7-25 06:52:38
原子哥,这说法好像也说不过去啊,同样的代码在F407上就可以啊,在L151上就不行,只是改了几个IIC的引脚而已,库那块都没有改动,不应该不支持这个芯片啊?
举报

江端淳

2019-7-25 07:09:57
遇到的问题最终还是解决了,一直忘了发帖回复。
程序实际没有大的问题。我在移植的时候手痒,把IIC那块的程序稍微改动了一下:
void IIC_Ack(void)
{
        IIC_SCL(0);//=0;        SCL必须在前?否则MPU6050出错:Unsupported software product rev 6.
        SDA_OUT();
        delay_us(2);
        IIC_SDA(0);//=0;
        delay_us(3);
        
        IIC_SCL(1);//=1;
        delay_us(5);
        IIC_SCL(0);//=0;
}
上面的写法是对的。F4板子上是这样写的。移植时我改动了一点:
        SDA_OUT();
        delay_us(2);
IIC_SCL(0);
这样就不行。
想来还是要先钳住总线才能操作?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分