STM32F103ZET6驱动TOF250激光测距传感器

TOF250介绍

在这里插入图片描述
TOF250是一款基于TOF原理的单点测距雷达,采用940nm红外光源,提供了精确和可重复的远
距离测量用于高速自动对焦(AF).创新的TOF time-of-flight技术使该传感器性能独立于目标物体的反射率. TOF(time-of-flight)测量技术用低成本的CMOS工艺的SPAD (单光子雪崩二极管) 来实现它使测量结果准确,对环境光具有更高的抗干扰性 。支持UART和I2C通讯。

I2C通讯协议

在这里插入图片描述

I2C寄存器地址

在这里插入图片描述
注:主机在发送寄存器地址后要延时至少30uS给模块准备数据,否则I2C会出现异常。

TOF250引脚说明和STM32的接线

在这里插入图片描述
在这里插入图片描述

和STM32的接线

TOF250 STM32
5V 5V
GND GND
SDA PB7
SCL PB6

说明:

此次测试仅使用的是模拟IIC,方便理解
USB打印结果需要用到串口1的TX

程序

main.c

int main(void)
{
    
    
    //unsigned char y;
    __I2C_Status_TypeDef i2CStatus;
//    u16 len;                           //检测每次接收到的长度,方便字符串转整数的时候进行处理
    User_I2C_Init(); //IIC初始化
    delay_init();
    // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

    /**************************************************************
    **TOF250串口通信协议:
    **波特率 : 9600
    **数据位 : 8
    **校验   : 无
    **停止位 : 1
    ****************************************************************/
    uart_init(9600);	 //串口初始化为115200
    while(1)
    {
    
    
        i2CStatus = I2C_RecvBytes(TOF250_ID,TOF250_DIST_H, &RxData[0], 2,100);    //通过IIC读取TOF250距离值信息
        if(i2CStatus == I2C_OK) {
    
    
            Tof250_dist = RxData[1] + RxData[0]*256;
            printf("%u cm\n",Tof250_dist);
        }
        delay_ms(100);                                      //延时100ms,TOF250默认更新速度10HZ
    }
}

myiic.h

#define USER_I2C_SCL_PIN  GPIO_Pin_6
#define USER_I2C_SDA_PIN  GPIO_Pin_7
#define USER_I2C_GPIO     GPIOB

//IO方向设置
 
#define SDA_IN()  {
      
      GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {
      
      GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}

//IO操作函数	 
#define IIC_SCL    PBout(6) //SCL
#define IIC_SDA    PBout(7) //SDA	 
#define READ_SDA   PBin(7)  //输入SDA 

实验结果

在这里插入图片描述
准确率在5%

总结

需要具体例程的可以评论留下邮箱获取,TOF250官方CSDN是:https://blog.csdn.net/HCJ_Application/article/details/124058266
程序是参考官方的例程

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/130262868