Stm32 BNO055系统状态读取0x01,而系统错误读取0

Stm32 BNO055系统状态读取0x01,而系统错误读取0,stm32,imu,Stm32,Imu,试图从BNO055传感器读取数据,但不断得到零。我正在使用博世提供的驱动程序,该驱动程序适合与STM32L476一起使用。我使用的是Adafruit开发的定制板,不是现成的BNO055板。我能够获得加速度计和陀螺仪的读数,但在电路板上循环通电并加载新代码后,我的读数又回到了零。获取数据然后不获取数据(读取0)会发生几次,因此我试图了解是哪种设置使BNO055吐出0 现在我正在检查SYS_状态寄存器(0x39),如果它读取0x01(系统错误),我将读取寄存器SYS_ERR(0x3A)以查看失败的内

试图从BNO055传感器读取数据,但不断得到零。我正在使用博世提供的驱动程序,该驱动程序适合与STM32L476一起使用。我使用的是Adafruit开发的定制板,不是现成的BNO055板。我能够获得加速度计和陀螺仪的读数,但在电路板上循环通电并加载新代码后,我的读数又回到了零。获取数据然后不获取数据(读取0)会发生几次,因此我试图了解是哪种设置使BNO055吐出0

现在我正在检查SYS_状态寄存器(0x39),如果它读取0x01(系统错误),我将读取寄存器SYS_ERR(0x3A)以查看失败的内容。我从SYS_ERR(寄存器映射超出范围)读取5,然后通过SYS_触发器寄存器(0x3F)将第二位设置为1进行重置。复位后,SYS_ERR寄存器读取0,这不是错误,但SYS_STATUS仍读取0x01,无论我复位多少次,我都会得到SYS_STATUS=0x01。有人知道如何完全重置系统,使系统状态返回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得到零?我很幸运地得到了加速度计和陀螺仪的值,但没有得到磁强计的值