我不得不说你这个问题问得有点大啊,移植不是一件简单的事,不过我喜欢。
1. 先移植库文件,路径是STM32CubeExpansion_VL6180X_V1.2.0\Drivers\BSP\Components\vl6180x将这个路径下的文件全部复制到你的工程下面就好。
2. 了解IIC接口位置,你需要明白所有的API操作都是在操作IIC,因此只要IIC接口弄好了,基本就没问题了,在vl6180x_i2c.c文件中,你需可以看到VL6180x_I2CWrite和VL6180x_I2CRead是外部调用的,也就是IIC接口处。
3. 重写接口,这两个接口函数可以写在任何地方,例程中写在了main.c中,全部如下:
- #define i2c_bus (&hi2c1)
- #define def_i2c_time_out 100
- int VL6180x_I2CWrite(VL6180xDev_t dev, uint8_t *buff, uint8_t len) {
- int status;
- status = HAL_I2C_Master_Transmit(i2c_bus, dev->I2cAddr, buff, len, def_i2c_time_out);
- if (status) {
- XNUCLEO6180XA1_I2C1_Init(&hi2c1);
- }
- return status? -1 : 0;
- }
- int VL6180x_I2CRead(VL6180xDev_t dev, uint8_t *buff, uint8_t len) {
- int status;
- status = HAL_I2C_Master_Receive(i2c_bus, dev->I2cAddr, buff, len, def_i2c_time_out);
- if (status) {
- XNUCLEO6180XA1_I2C1_Init(&hi2c1);
- }
- return status? -1 : 0;
- }
这个函数里面的内容,不同的控制器会有不同的IIC接口函数,不过大体差不多,替换为使用的控制器的库函数即可。
4. 简单的API,这个你可以参考例程,或者参考使用API使用说明书,说明书位置STM32CubeExpansion_VL6180X_V1.2.0\Documentation\VL6180X_API_Documentation.chm
这里将里面的简单使用贴出来,详细的请参考文档或例程。
- void Sample_SimpleRanging(void)
- { VL6180xDev_t myDev;
- VL6180x_RangeData_t Range;
- MyDev_Init(myDev); // your code init device variable
- MyDev_SetChipEnable(myDev); // your code assert chip enable
- MyDev_uSleep(1000); // your code sleep at least 1 msec
- VL6180x_InitData(myDev);
- VL6180x_Prepare(myDev);
- do { VL6180x_RangePollMeasurement(myDev, &Range);
- if (Range.errorStatus == 0 )
- MyDev_ShowRange(myDev, Range.range_mm,0); // your code display range in mm
- else
- MyDev_ShowErr(myDev, Range.errorStatus); // your code display error code
- } while (!MyDev_UserSayStop(myDev)); // your code to stop looping
- }