0

尝试从 BNO055 传感器读取数据,但一直为零。我正在使用博世提供的驱动程序,我适应了 STM32L476。我正在使用 Adafruit 开发的非现成 BNO055 板的定制板。我能够获得加速度计和陀螺仪的读数,但是在重新启动电路板并加载新代码后,我又回到了零读数。获取数据然后不获取数据(读取 0)发生了几次,所以我试图了解哪个设置使 BNO055 吐出 0。

现在我一直在检查 SYS_STATUS 寄存器 (0x39) 是否显示为 0x01(系统错误),我读取寄存器 SYS_ERR (0x3A) 以查看失败的原因。我从 SYS_ERR 读取 5(寄存器映射超出范围)然后通过 SYS_TRIGGER 寄存器(0x3F)通过将第二位设置为 1 进行复位。复位后 SYS_ERR 寄存器读取 0,这没有错误,但 SYS_STATUS 仍然读取 0x01,无论多少次我确实重置了 SYS_STATUS = 0x01。有谁知道如何完全重置系统以使 SYS_STATUS 返回 0?

    success = bno055_read_register(BNO055_SYS_STAT_ADDR, &err_bmo055_buf[1], BNO055_GEN_READ_WRITE_LENGTH);

if ((err_bmo055_buf[1]==0x01) || (err_bmo055_buf[0]!=0x0)){
    success = bno055_read_register(BNO055_SYS_ERR_ADDR, &err_bmo055_buf[0], BNO055_GEN_READ_WRITE_LENGTH);
    while (err_bmo055_buf[1]==0x01){
        /*Software system reset */
        success = bno055_read_register(BNO055_SYS_TRIGGER_ADDR, &bno055_sys_trig, BNO055_GEN_READ_WRITE_LENGTH);
        write_buf = (bno055_sys_trig | BNO055_SYS_RST_MSK);
        bno055_set_operation_mode(BNO055_OPERATION_MODE_CONFIG);//not sure if I need this but setting it to write to the register
        success = bno055_write_register(BNO055_SYS_TRIGGER_ADDR,
            &write_buf, BNO055_GEN_READ_WRITE_LENGTH);
        /*------------------------------------------------------*/
        HAL_Delay(650); //just in case we need a little time to reset 
        I2C_routine_BNO055(); //assign functions
        comres = bno055_init(&bno055); //checks ID versions

        comres += bno055_set_power_mode(BNO055_POWER_MODE_NORMAL); //set power mode
        bno055_set_operation_mode(BNO055_OPERATION_MODE_AMG);//set operation mode
        success = bno055_read_register(BNO055_SYS_STAT_ADDR, &err_bmo055_buf[1], BNO055_GEN_READ_WRITE_LENGTH);
        success = bno055_read_register(BNO055_SYS_ERR_ADDR, &err_bmo055_buf[0], BNO055_GEN_READ_WRITE_LENGTH);
        count = count + 1;
    }
}

我必须向社区提出的更大问题是为什么我不断从 BNO055 中获得零?我很幸运能从加速度计和陀螺仪而不是磁力计中获得值。

4

0 回答 0