STM32驱动TOF250激光测距传感器
- TOF250介绍
- I2C通讯协议
- I2C寄存器地址
- TOF250引脚说明和STM32的接线
- 和STM32的接线
- 程序
- 实验结果
- 总结
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
程序是参考官方的例程