沸腾的冰块 发表于 2024-2-28 09:31:05

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

按照文档里的说明,写的代码无法达到预期效果,但又不知道是哪里的问题。

官方文档说明如下:

!(data/attachment/forum/202402/28/084704lds8jc7yagozagpw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image-20240227162654453.png")

!(data/attachment/forum/202402/28/084712rnipai8zh5yk27db.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image-20240227162725321.png")

!(data/attachment/forum/202402/28/084721t4xej4w7gzgxu3gw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image-20240227162742273.png")

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

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

Yude 发表于 2024-2-28 17:59:51

建议下载官方链接的代码进行参考:

(https://github.com/STMicroelectronics/STMems_Standard_C_drivers/tree/master/lsm6dsm_STdC/examples "https://github.com/stmicroelectronics/stmems_standard_c_drivers/tree/master/lsm6dsm_stdc/examples")

STMems_Standard_C_drivers/lsm6dsm_STdC/examples at master · STMicroelectronics/STMems_Standard_C_drivers

Platform-independent drivers for STMicroelectronics MEMS motion and environmental sensors, based on standard C programming language. - STMicroelectronics/STMems_Standard_C_drivers

st_yujie2510 发表于 2024-2-29 13:48:11

你参考百度云盘上LSM6DS3 Sensor Hub功能更具体的说明

链接: https://pan.baidu.com/s/1SQdXgHKW0BC6H1YQXoG05w?pwd=xb3k 提取码: xb3k 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v9的分享
页: [1]
查看完整版本: lsm6ds3tr-c传感器集合模式无法使用