STM32F103+VL53L0X寄存器操作

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Liqipeng1/article/details/87711186

这个程序能够实现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("\r\n readey \r\n");
		 }
		 else
		 {
			 printf("\r\n not readey \r\n");
		 }
 
		 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("\r\n 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库函数来操作这个传感器,会持续更新。。。

本人不知道在哪上传程序,如果有需要的可以私信给我,我把程序发给你。

展开阅读全文

没有更多推荐了,返回首页