这个程序能够实现STM32F1系列的单片机简单操作VL53L0x距离传感器,能够通过串口输出测量的距离。距离也是比较准确的。
但是整个程序比较简单,只能实现简单的测量。
//主函数//
while(1)
{
VL53L0X_Write_Byte(VL53L0X_REG_SYSRANGE_START, 0x01);
while(cnt < 100)
{
delay_ms(10);
val = VL53L0X_Read_Byte(VL53L0X_REG_RESULT_RANGE_STATUS);
if( val & 0x01) break;
cnt++;
}
if( val & 0x01)
{
printf("rn readey rn");
}
else
{
printf("rn not readey rn");
}
VL53L0X_Read_Len(VL53L0X_Add, 0x14 , 12, gbuf);
count[0] = makeuint16(gbuf[7], gbuf[6]);
count[1] = makeuint16(gbuf[9], gbuf[8]);
count[2] = makeuint16(gbuf[11], gbuf[10]);
DeviceRangeStatusInternal = ((gbuf[0] & 0x78) >> 3);
printf("rn ambient count = %4d signal count = %4d distance = %4d status = %d ",count[0],count[1],count[2]-20,DeviceRangeStatusInternal);
delay_ms(500);
}
//IO口定义//
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //先使能外设IO PORTA时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//禁止JTAG,从而PA15可以做普通IO使用,否则PA15不能做普通IO!!!
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 输出高
VL53L0X_Xshut=0;//失能VL53L0X
delay_ms(30);
VL53L0X_Xshut=1;//使能VL53L0X,让传感器处于工作
//VL53L0x宏定义//
#define VL53L0X_REG_IDENTIFICATION_MODEL_ID 0xc0
#define VL53L0X_REG_IDENTIFICATION_REVISION_ID 0xc2
#define VL53L0X_REG_PRE_RANGE_CONFIG_VCSEL_PERIOD 0x50
#define VL53L0X_REG_FINAL_RANGE_CONFIG_VCSEL_PERIOD 0x70
#define VL53L0X_REG_SYSRANGE_START 0x00
#define VL53L0X_REG_RESULT_INTERRUPT_STATUS 0x13
#define VL53L0X_REG_RESULT_RANGE_STATUS 0x14
#define VL53L0X_Add 0x29
这是基于http://www.51hei.com/bbs/dpj-76363-1.html和正点原子IIc程序作为参考和修改的。
本人对于VL53L0x寄存器资料也是找了很久,但是都没有找到关于寄存器配置,大多数就是介绍API函数的。
所以对于这个程序VL53L0.h头文件里的宏定义不是很了解,也有很多疑惑,需要其他的大佬们帮忙解答。
接下来本人也会使用API库函数来操作这个传感器,会持续更新。。。
本人不知道在哪上传程序,如果有需要的可以私信给我,我把程序发给你。