采用IAR环境,实现普通模块测距,串口输出数据。
代码如下:
- #include "VL53L0.h"
- #include "myiic.h"
- uint16_t bswap(u8 b[])
- {
- uint16_t val = ((b[0]<< 8) & b[1]);
- return val;
- }
- uint16_t VL53L0X_decode_vcsel_period(short vcsel_period_reg)
- {
- uint16_t vcsel_period_pclks = (vcsel_period_reg + 1) <<1;
- return vcsel_period_pclks;
- }
- uint16_t makeuint16(int lsb, int msb)
- {
- return ((msb & 0xFF) << 8) | (lsb & 0xFF);
- }
- //IIC连续写
- //addr:器件地址
- //reg:寄存器地址
- //len:写入长度
- //buf:数据区
- //返回值:0,正常
- // 其他,错误代码
- u8 VL53L0X_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf)
- {
- u8 i;
- IIC_Start();
- IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令
- if(IIC_Wait_Ack()) //等待应答
- {
- IIC_Stop();
- return 1;
- }
- IIC_Send_Byte(reg); //写寄存器地址
- IIC_Wait_Ack(); //等待应答
- for(i=0;i<len;i++)
- {
- IIC_Send_Byte(buf[i]); //发送数据
- if(IIC_Wait_Ack()) //等待ACK
- {
- IIC_Stop();
- return 1;
- }
- }
- IIC_Stop();
- return 0;
- }
- //IIC连续读
- //addr:器件地址
- //reg:要读取的寄存器地址
- //len:要读取的长度
- //buf:读取到的数据存储区
- //返回值:0,正常
- // 其他,错误代码
- u8 VL53L0X_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf)
- {
- IIC_Start();
- IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令
- if(IIC_Wait_Ack()) //等待应答
- {
- IIC_Stop();
- return 1;
- }
- IIC_Send_Byte(reg); //写寄存器地址
- IIC_Wait_Ack(); //等待应答
- IIC_Start();
- IIC_Send_Byte((addr<<1)|1);//发送器件地址+读命令
- IIC_Wait_Ack(); //等待应答
- while(len)
- {
- if(len==1)*buf=IIC_Read_Byte(0);//读数据,发送nACK
- else *buf=IIC_Read_Byte(1); //读数据,发送ACK
- len--;
- buf++;
- }
- IIC_Stop(); //产生一个停止条件
- return 0;
- }
- //IIC写一个字节
- //reg:寄存器地址
- //data:数据
- //返回值:0,正常
- // 其他,错误代码
- u8 VL53L0X_Write_Byte(u8 reg,u8 data)
- {
- IIC_Start();
- IIC_Send_Byte((VL53L0X_Add<<1)|0);//发送器件地址+写命令
- if(IIC_Wait_Ack()) //等待应答
- {
- IIC_Stop();
- return 1;
- }
- IIC_Send_Byte(reg); //写寄存器地址
- IIC_Wait_Ack(); //等待应答
- IIC_Send_Byte(data);//发送数据
- if(IIC_Wait_Ack()) //等待ACK
- {
- IIC_Stop();
- return 1;
- }
- IIC_Stop();
- return 0;
- }
- //IIC读一个字节
- //reg:寄存器地址
- //返回值:读到的数据
- u8 VL53L0X_Read_Byte(u8 reg)
- {
- u8 res;
- IIC_Start();
- //IIC_Send_Byte((VL53L0X_Add<<1)|0);//发送器件地址+写命令
- IIC_Send_Byte(0x52);//发送器件地址+写命令
- IIC_Wait_Ack(); //等待应答
- IIC_Send_Byte(reg); //写寄存器地址
- IIC_Wait_Ack(); //等待应答
- IIC_Start();
- IIC_Send_Byte(0x53 );//发送器件地址+读命令
- IIC_Wait_Ack(); //等待应答
- res=IIC_Read_Byte(0);//读取数据,发送nACK
- IIC_Stop(); //产生一个停止条件
- return res;
- }
复制代码
附带芯片原理图、接线及ARDUINO原码。
全部资料51hei下载地址:
裸机程序(new).zip
(1.04 MB, 下载次数: 126)
|