多个相同的I2C传感器与vl53L0x API(ST Microelectronics)

时间:2016-06-20 09:17:52

标签: c gcc sensor stm32 i2c

在专业环境中,我必须使用vl53L0x。这个传感器最近发布了它的API,这意味着互联网上没有任何帮助:

http://www.st.com/content/st_com/en/products/embedded-software/proximity-sensors-software/stsw-img005.html

这个API包含一些我用gcc编译的源文件和头文件。它工作得很好,尽管显然缺乏评论。我闪存了stm32(NUCLEO-F401RE)的内存,它通过I2C总线控制vl53L0x传感器。我现在想在同一个I2C总线上添加更多vl53L0x传感器,并参考本文档(如果你想阅读它,直接进入第5页的下半部分,接线已经完成):

http://www.st.com/content/ccc/resource/technical/document/application_note/group0/0e/0a/96/1b/82/19/4f/c2/DM00280486/files/DM00280486.pdf/jcr:content/translations/en.DM00280486.pdf

我已经应用于其他传感器的原则是它们都以相同的地址开始。然后你必须激活一个,更改它的地址,然后激活下一个地址,更改它的地址等。

不幸的是,ST Microelectronics没有公布I2C寄存器列表,所以我必须使用他们的API来控制多个传感器。上面链接的文档解释了如何执行此操作。除其他外,它指定:

In vl53L0x_platform.h API file
• Set VL53L0x_SINGLE_DEVICE_DRIVER macro to 0 so that API implementation will
be automatically adapted to a multi-device context.

我查看了API文件夹中的任何地方,我无法找到对VL53L0x_SINGLE_DEVICE_DRIVER宏的任何引用。将其设置为0将不会更改任何内容,因为此字符串不存在于API文件中的任何位置。有没有人遇到过类似的问题?

1 个答案:

答案 0 :(得分:1)

我正在做同样的事情。你似乎比我更进一步。但是,将它放在我的while(1)循环中似乎可以使两个传感器都工作。

ResetAndDetectSensor(0);
TimeStamp_Reset();

指南说,为了同时使用所有传感器,你需要将所有传感器的XSHUT引脚拉高,重置时间戳,然后拿起实际检测到的传感器。