打印
[其他ST产品]

lsm6ds3tr-c传感器集合模式无法使用

[复制链接]
461|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
按照文档里的说明,写的代码无法达到预期效果,但又不知道是哪里的问题。

官方文档说明如下:







之后代码中涉及到的元器件均经过单独测试,单独使用情况下与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)

求各位大佬看看哪里有问题,或者给个用了传感器集合模式的例程也行

使用特权

评论回复
沙发
狄克爱老虎油| | 2024-2-29 19:08 | 只看该作者
官方给提供例程了吗

使用特权

评论回复
板凳
结合国际经验| | 2024-8-31 20:21 | 只看该作者
代码逻辑看起来基本正确,但出现了问题。这类问题通常涉及几个可能的方面,包括配置顺序、寄存器设置、I2C与SPI协议的转换等。

使用特权

评论回复
地板
结合国际经验| | 2024-8-31 20:22 | 只看该作者
bsp_spi_write函数的实现也可能是问题的根源。确认这个函数能够正确地通过SPI总线写入数据。

使用特权

评论回复
5
结合国际经验| | 2024-8-31 20:46 | 只看该作者
在读取外部传感器之前,禁用I2C直通是必要的,确保在读取时设备不会干扰:

c
复制代码
bsp_spi_write(LSM6DS3TR_MASTER_CONFIG, 0x00, 2);  // 禁用I2C直通

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

655

主题

2728

帖子

0

粉丝