基于stm32+VL53LXX测距功能的实现

在学习完正点原子mini开发板的iic通信部分之后,发现mini板并没有对应iic硬件连接线的外部设备。但是好奇心严重(无所事事)的我也想尝试iic通信的硬件实现,于是利用了前几天买二手f7开发板顺便要来的测距模块,借此来满足了自己的求知欲。

1,模块的引脚图:

基于stm32+VL53LXX测距功能的实现_第1张图片

 

2,模块中的引脚与mcu接线的状况:

VIN:接5v电源线

GND:接地线

SCL:接iic时钟线

SDA:接iic数据线

GPIO1:不知道具体的功能

XSHUT:使能引脚

测距模块连接stm32f103的引脚连接图如下:

3,模块的特性

因为该模块没有实际引用到一个具体的项目中,所以对它的精度以及测量模式只是粗略的了解一下。

VL53L0X 工作模式:

(1)Single ranging(单次测量),在该模式下只触发执行一次测距测量,测量结束后,

VL53L0X 传感器会返回待机状态,等待下一次触发。

(2)Continuous ranging(连续测量),在该模式下会以连续的方式执行测距测量。一

旦测量结束,下一次测量就会立即启动,用户必须停止测距才能返回到待机状态,最后的一

次测量在停止前完成。

(3)Timed ranging(定时测量),在该模式下会以连续的方式执行测距测量。测量结束

后,在用户定义的延迟时间之后,才会启动下一次测量。用户必须停止测距才能返回到待机

状态,最后的一次测量在停机前完成。

VL53L0X 测量精度适用范围:

基于stm32+VL53LXX测距功能的实现_第2张图片

4,IIC通信测距模块的代码实现

功能测试部分:

基于stm32+VL53LXX测距功能的实现_第3张图片

 

 在vl53l0x_test()函数中,判断模块是否完成初始化,在模块完成初始化之后,按键选择不同的测试模式,实现对应的测试功能。

逻辑分析框图如下:

基于stm32+VL53LXX测距功能的实现_第4张图片

 

模块初始部分代码:

基于stm32+VL53LXX测距功能的实现_第5张图片

设备的初始函数中,初始iic接口配置,初始vl53lxx的设备结构体。在模块复位之后重新设置模块设备的地址,设置地址成功之后,调用api函数 VL53L0X_DataInit()初始模块设备。读取id信息,读取校准信息,判断在完成初始化之后,iic与模块的通信是否正常。最后打印代码执行的状态信息。

逻辑分析框图如下:基于stm32+VL53LXX测距功能的实现_第6张图片

 

校准模式代码:

基于stm32+VL53LXX测距功能的实现_第7张图片

基于stm32+VL53LXX测距功能的实现_第8张图片

代码中初始状态,打印调试信息之后进入任务循环,在循环中根据按键的状态执行不同的任务;

如果按键1按下,调用校准函数vl53l0x_adjust(),进入校准处理。判断校准的状态,打印结果信息。

如果按键0按下,led1点亮,同时返回上层界面。

vl53l0x普通测量模式测试代码:

基于stm32+VL53LXX测距功能的实现_第9张图片

在普通测试模式的代码中,初始各种参数(mode,key等),显示普通测试模式对应的界面后进入任务循环,在循环中根据按键的状态执行不同的任务;

WK_UP按键按下:返回主界面。

按键1按下:mode++(局部变量mode值用来决定,循环选择不同的测试模式),显示当前模式的选择。

按键0按下:调用vl53l0x_general_start()函数,开始执行测距功能。

模块中断模式的测试代码的处理和普通模式下的处理的架构是相同的,但是调用的功能函数是vl53l0x_interrupt_start();

 

在原驱动模块的程序中,将原代码中软件模拟iic的通信方式更改为硬件iic通信。

由于是菜鸡程序员,所以这其实也是我第一次独立配置模块,所以如果文章存在问题也欢迎各位大佬进行指正。

 

网盘下载地址:

链接:https://pan.baidu.com/s/1Zsp-d5gn8GMMt82Db7Fw1Q 
提取码:bz55

你可能感兴趣的:(嵌入式)