- 在通过I2C驱动多路VL53L1x模块时,设置的I2C的地址不能相差太小(最小得差2)
- 在选定指定模块后要有短暂的延时,等待设备稳定,再通过I2C操作。
- 在FreeRTOS中移植ST的VL53L1x的多模块测距例程后,会存在卡死在I2C函数超时判断的地方:
/* when not customized by application define dummy one */
#ifndef VL53L1_GetI2cBus
/** This macro can be overloaded by user to enforce i2c sharing in RTOS context
*/
# define VL53L1_GetI2cBus(...) taskENTER_CRITICAL()//(void)0
#endif
#ifndef VL53L1_PutI2cBus
/** This macro can be overloaded by user to enforce i2c sharing in RTOS context
*/
# define VL53L1_PutI2cBus(...) taskEXIT_CRITICAL()//(void)0
#endif
这里将具体的I2C操作函数添加在taskENTER_CRITICAL()
和taskEXIT_CRITACAL()
之间,会导致I2C的超时判断函数卡死。因此,FreeRTOS的时基和HAL库的时基最好分开,占用不同的定时器。