序言
VL53L1X是一个很小又很优秀的测距传感器,它相比于上一代VL53L0X有着不小的提升,这次毕业设计打算将这个传感器用起来,就来移植了一下,遇到的坑怎么说还是有一些,故在此分享给大家。
开发环境
IDE:Keil V5 STM32CubeMX ,使用HAL库
具体操作
获取官方库并进行移植
这一步是移植的基础,首先从官方把API库下下来,并添加到IDE中:

适配硬件
这里由于不同的硬件平台,他们对io的操作也是各异的,因此具体平台的c文件也是需要自己去修改的。由于VL53L1支持IIC通信,而硬件IIC通信速度也就那样,我更趋向于使用软件的模拟IIC,使用软件模拟IIC可以在进行硬件设计的时候可以使用任意的IO口,而不限制于具体的硬件IIC接口,而且移植起来也很简单(毕竟模拟IIC的硬件需求只有最普通的GPIO)。因此再导入模拟IIC的库文件,可以将两个io口模拟为IIC_SCL和IIC_SDA,同时模拟IIC提供了以下读写操作

IIC的接口也准备好了,那么我们就可以看vl53l1_platform.c这个平台适配文件了。
这个文件如果是从官方库拿下来的话,它的正文基本上全部都是一些空名函数,所有的函数列表如下:
这些就是VL53的硬件操作函数了,如VL53L1_RdByte()这个函数就是VL53读取一个字节的函数。VL53的API库中的所有功能最终操作具体硬件的时候用的都是这个文件下的函数,因此我们必须把这些操作函数给移植到我们的硬件平台上,这样API函数才能调用我们实际的IIC硬件,最终完成操作硬件的目的。
以VL53L1_RdByte函数的移植为例
VL53L1_Error VL53L1_RdByte(VL53L1_DEV Dev, uint16_t index, uint8_t *data) {
if(IIC_ReadOneByte(Dev->I2cDevAddr,index,data))
{
return VL53L1_ERROR_NONE;
}else return VL53L1_ERROR_CONTROL_INTERFACE;
}
其中 Dev代表的API手册中的VL53结构体,它的其他元素我们并不关心,但传感器的器件地址就保存在Dev->I2cDevAddr里,器件地址是IIC操作的必须参数,另外两个必须参数则是读取的器件内的存储地址index和读取的长度了。因为在这里是只读一个字节,因此长度为1,使用了IIC_ReadOneByte这个函数。可以看到,移植API的硬件操作函数,其实就是在这个函数里面套用实际硬件的操作函数,套个壳而已罢了。但是在这种简单的套壳下,还有很多需要注意的坑,如读取一个半字的函数的实现如下:
VL53L1_Error VL53L1_RdWord(VL53L1_DEV Dev, uint16_t index, uint16_t *data) {
uint8_t ret[2];
IICreadBytes(Dev->I2cD

本文详细介绍了VL53L1X测距传感器的移植过程及应用,包括开发环境搭建、硬件适配、软件初始化、传感器校准及数据读取等关键步骤,为开发者提供全面的技术指导。

1994

被折叠的 条评论
为什么被折叠?



