按照文档里的说明,写的代码无法达到预期效果,但又不知道是哪里的问题。
官方文档说明如下:
之后代码中涉及到的元器件均经过单独测试,单独使用情况下与stm32G4通信成功,但在“传感器集合”模式下无法通过该imu访问到外挂的磁力计。
个人编写代码逻辑如下:
/*初始化部分*/
//使能对嵌入功能寄存器的访问
bsp_spi_write(LSM6DS3TR_FUNC_CFG_ACCESS, 0x80, 2);
//第一外部I2C从接口的地址,写0x58,读0x59
bsp_spi_write(LSM6DS3TR_SLV0_ADD, 0x58, 2);
//即将写入_读取的寄存器
bsp_spi_write(LSM6DS3TR_SLV0_SUBADD,0x0A,2);
//要写入其中的值
bsp_spi_write(DATAWRITE_SRC_MODE_SUB_SLV0,0x0D,2);
//禁用对嵌入功能寄存器的访问
bsp_spi_write(LSM6DS3TR_FUNC_CFG_ACCESS, 0x00, 2);
//禁用I2C直通,启用内部上拉,启用I2C
bsp_spi_write(LSM6DS3TR_MASTER_CONFIG, 0x09, 2);
//配置加速度计 833Hz ODR, 16G scale, use LPF1 output
bsp_spi_write(LSM6DS3TR_CTRL1_XL, (LSM6DS3_CTRL1_XL_ODR833|LSM6DS3_CTRL1_XL_16G|LSM6DS3_CTRL1_XL_LPF1), 2);
//配置角速度计 6.66kHz ODR, 2000dps scale
bsp_spi_write(LSM6DS3TR_CTRL2_G, (LSM6DS3_CTRL2_G_ODR6666|LSM6DS3_CTRL2_G_2000DPS), 2);
/*读取外挂磁力计代码*/
//禁用I2C直通,禁用内部上拉,禁用I2C
bsp_spi_write(LSM6DS3TR_MASTER_CONFIG, 0x00, 2);
//关闭加速度计
bsp_spi_write(LSM6DS3TR_CTRL1_XL, 0x00, 2);
//关闭角速度计
bsp_spi_write(LSM6DS3TR_CTRL2_G, 0x00, 2);
//使能对嵌入功能寄存器的访问
bsp_spi_write(LSM6DS3TR_FUNC_CFG_ACCESS, 0x80, 2);
//第一外部I2C从接口的地址,写0x58,读0x59
bsp_spi_write(LSM6DS3TR_SLV0_ADD, 0x59, 2);
//即将写入_读取的寄存器
bsp_spi_write(LSM6DS3TR_SLV0_SUBADD, 0x01, 2);
//无抽取,1个外部传感器,读取连续6个寄存器
bsp_spi_write(LSM6DS3TR_SLAVE0_CONFIG, 0x06, 2);
->数据处理代码
//禁用对嵌入功能寄存器的访问
bsp_spi_write(LSM6DS3TR_FUNC_CFG_ACCESS, 0x00, 2);
//禁用I2C直通,启用内部上拉,启用I2C
bsp_spi_write(LSM6DS3TR_MASTER_CONFIG, 0x09, 2);
//配置加速度计 833Hz ODR, 16G scale, use LPF1 output
bsp_spi_write(LSM6DS3TR_CTRL1_XL, (LSM6DS3_CTRL1_XL_ODR833|LSM6DS3_CTRL1_XL_16G|LSM6DS3_CTRL1_XL_LPF1), 2);
//配置角速度计 6.66kHz ODR, 2000dps scale
bsp_spi_write(LSM6DS3TR_CTRL2_G, (LSM6DS3_CTRL2_G_ODR6666|LSM6DS3_CTRL2_G_2000DPS), 2);
->数据处理代码
...
其中数据处理代码在如代码所示的两个位置,尝试从0x2E(SENSORHUB1_REG)位置和0x66(OUT_MAG_RAW_X_L)位置均无法获取到任何有效信息(读出来的值为0)
求各位大佬看看哪里有问题,或者给个用了传感器集合模式的例程也行
|
|