基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(3)----修改设备地址

发布者:HappyHearted最新更新时间:2024-06-07 来源: elecfans关键字:STM32CUBEMX  VL6180X  设备地址 手机看文章 扫描二维码
随时随地手机看文章

概述

本章主要介绍如何修改VL6180X传感器的I2C地址,并成功驱动设备以使用新的地址。VL6180X是一种多功能、高性能的接近和环境光传感器,常用于测量物体与传感器之间的距离、检测物体的接近程度以及测量环境光强度等应用。


在某些情况下,可能需要在同一I2C总线上使用多个VL6180X传感器,或与其他I2C设备共享总线资源。由于每个VL6180X传感器具有默认的固定I2C地址,这可能导致地址冲突,从而阻碍多个传感器的同时使用。为了解决这个问题,可以通过修改传感器的I2C地址来避免冲突,并使其能够在同一总线上与其他设备共存。



修改VL6180X传感器的I2C地址,通过配置传感器内部寄存器来修改I2C地址。将提供具体的寄存器配置值和步骤,确保能够成功更改传感器的地址。然后驱动新地址的VL6180X传感器,使用新的I2C地址与VL6180X传感器进行通信。

在这里插入图片描述

样品申请

https://www.wjx.top/vm/OhcKxJk.aspx#


视频教程

https://www.bilibili.com/video/BV1xP411k7H2//


完整代码下载

https://download.csdn.net/download/qq_24312945/88051584


修改设备地址

VL6180X使用I²C总线进行通信。默认情况下,VL6180X的7位地址为0x29。然而,为了避免地址冲突并允许多个传感器共享相同的I2C总线,用户可以通过向寄存器I2C_SLAVE__DEVICE_ADDRESS(寄存器地址为0x212)写入自定义的7位地址来修改传感器的地址。

在使用I2C总线和修改传感器地址时注意以下事项:确保正确连接上拉电阻、避免短路或接线错误、提供稳定的电源供应等。

在这里插入图片描述

查看寄存器I2C_SLAVE__DEVICE_ADDRESS {0x212}可以得知每次上电之后地址会恢复为初始值。

在这里插入图片描述

首先,找到并打开VL6180.h文件,该文件包含了VL6180X传感器的相关定义和配置。

在VL6180.h文件中,可以定义4个设备的地址常量,分别表示不同的传感器。例如,可以使用以下方式定义地址常量:


#define VL6180X_DEFAULT_I2C_ADDR1 0x29  ///< The fixed I2C addres

#define VL6180X_DEFAULT_I2C_ADDR2 0x2A  ///< The fixed I2C addres

#define VL6180X_DEFAULT_I2C_ADDR3 0x2B  ///< The fixed I2C addres

#define VL6180X_DEFAULT_I2C_ADDR4 0x2C  ///< The fixed I2C addres

这里的地址值是根据实际需求和硬件连接情况选择的,确保每个设备具有唯一的地址。

通过使用定义的设备地址常量,可以轻松地管理和操作多个VL6180X传感器。

首先使用VL6180X_Init函数初始化传感器,接下来通过调用VL6180X_SetDeviceAddress函数来修改设备地址。这个函数需要两个参数:旧的设备地址(即初始的设备地址)和新的设备地址(你希望将传感器的地址修改为的值)。


/* USER CODE BEGIN 2 */


HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);


HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);


HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);

//VL6180_4

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);


HAL_Delay(1);

VL6180X_Init(VL6180X_DEFAULT_I2C_ADDR1);

/************修改VL6180_4地址为VL6180X_DEFAULT_I2C_ADDR2(0x2A)*********************/

VL6180X_WriteByte(VL6180X_DEFAULT_I2C_ADDR1,0x0212,VL6180X_DEFAULT_I2C_ADDR4);

// HAL_Delay(100);

uint8_t ii=VL6180X_ReadByte(VL6180X_DEFAULT_I2C_ADDR4,0x0212);

printf('地址为=0x%Xn',ii);

VL6180x_UpscaleSetScaling(VL6180X_DEFAULT_I2C_ADDR4,3);//缩放x3

uint8_t id=VL6180X_Read_ID(VL6180X_DEFAULT_I2C_ADDR4);

printf('id=%dn',id);



  /* USER CODE END 2 */

主程序

在主程序的while循环中,使用VL6180X_Read_Range函数从传感器读取距离数据。这个函数需要传入设备的新地址VL6180X_DEFAULT_I2C_ADDR4作为参数。


/* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

VL6180_L1=VL6180X_Read_Range(VL6180X_DEFAULT_I2C_ADDR4);


printf('VL6180_L1=%dmmn',VL6180_L1*3);

HAL_Delay(1000);

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

  }

测试结果

测试距离结果如下所示。

在这里插入图片描述

关键字:STM32CUBEMX  VL6180X  设备地址 引用地址:基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(3)----修改设备地址

上一篇:基于STM32CUBEMX驱动TMOS模块STHS34PF80(1)----获取ID
下一篇:结构体对齐在STM32中的具体体现和如何进行不同对齐方式的设置

推荐阅读最新更新时间:2024-11-02 11:51

STM32CubeMX帮你写代码,移植代码工程。
下载template,实验1:https://github.com/qqfoxmail/helloworld.git 在SYSTEM文件下,新建头文件夹led,添加头文件led.h 或 注意路径!!!!! 打开keil5添加头文件路径 keil5中SYSTEM下新建led.c文件 之后移植CubeMX中的所需代码 注意!!! 把CubeMX中函数前static去掉!!!!!不然编译会报错!!! ..SYSTEMledled.h(6): error: #114: function MX_GPIO_Init was referenced but not defined
[单片机]
让<font color='red'>STM32CubeMX</font>帮你写代码,移植代码工程。
STM32cubeMX使用心得
使用STM32cubeMX创建工程 首先你需要下载STM32cubeMX软件版本,我使用的是——5.0.1.软件版本可以去官网下载。 其次你需要一个合适你工程的《STMcube_FW_F1_Vxx》库链接如下:提取码:uqbw https://pan.baidu.com/s/1x-tMOqPwUC0R9O2xAx2QfQ 当我们使用STM32cubeMX创建一个工程时选择MCU selector - core,series。 最后在选择具体什么型号的芯片。 工程配置说明: 系统核心- systeam core 数模转换- analog 定时器功能- timers 通讯功能- connectivity 音频- multi
[单片机]
<font color='red'>STM32cubeMX</font>使用心得
STM32CubeMX系列 | DHT11温湿度传感器
1. DHT11简介 DHT11是一款温湿度一体化的数字传感器,该传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机连接。通过单片机微处理器简单的电路连接就能够实时的采集湿度和温度。DHT11与STM32之间能采用简单的单总线进行通讯,仅需一个IO口。传感器内部温度和湿度数据40个bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。 DHT11采用单总线数据格式,即单个数据引脚端口完成输入输出双向传输。其数据包由5个字节(40Bit)组成。数据分小数和整数部分,一次完整的数据传输为40bit,高位先出。数据格式如下图示 根据以上数据,即可算出温度和湿度的值,计算方法如下
[单片机]
STM32CubeMX:基本定时器
芯片:STM32F103C8T6 应用管脚: 输出:PA0、PA1 TIM3 实现1ms定时功能,系统TIMx_CNT=8MHZ=8000 000HZ,设置TIMx_PSC=800-1,那么TIMx_ARR=(TIMx_CNT/TIMx_PSC)*定时器时间=(8000000/800)*0.001=10,TIMx_ARR=10-1。 配置界面 TIM3配置 开启NVIC中断配置 程序中增加回调函数 /* USER CODE BEGIN 4 */ /** * @brief Period elapsed callback in non blocking mode * @par
[单片机]
<font color='red'>STM32CubeMX</font>:基本定时器
使用STM32CubeMX开发:按键中断实验
硬件平台:stm32F407Zet6 软件平台:stm32cubeMX 4.7+MDK5.14 电路连接:PE8-LED0、PE9-LED1、PE10-LED2、PE11-LED3、PE12-KEY0、PE13-KEY1、PE14-KEY2、PE15-KEY3 第一步、使用stm32cubeMX创建工程,选择相应的芯片,配置RCC、SYS、引脚和时钟如下图所示: 注意,由于按键上有上拉电阻,这里选择中断模式的时候,我们选择下降沿触发中断。 第二步,配置输出Keil工程 第三步、编写程序下载验证 STM32CubeMx把代码都生成了,查找函数,分析调用的过程,添加应用层代码就行 首先在stm32f4x
[单片机]
使用<font color='red'>STM32CubeMX</font>开发:按键中断实验
STM32CubeMx下LWIP教程(一)-PHY硬件层搭建
关于LWIP的PHY搭建,采用的PHY芯片为LAN8720A,RMII模式。 关于硬件连接部分采用的是原子的板子F407,硬件连接如下: 注意:LAN8720A 可以通过 PHYAD0 引脚来配置,该引脚与 RXER 引脚复用,芯片内部自带下拉电阻,当硬复位结束后, LAN8720A 会读取该引脚电平,作为器件的 SMI 地址,接下拉电阻时(浮空也可以,因为芯片内部自带了下拉电阻),设置 SMI 地址为 0,当外接上拉电阻后,可以设置为 1。本硬件RXER引脚浮空,其PHY芯片地址为0 关于SMT32CubeMx引脚时钟等配置根据实际情况配置即可,不在此进行赘述; 点开ETH配置中的Parameter Setting选项卡,配
[单片机]
STM32CUBEMX开发GD32F303(8)----USART收发配置
概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证。需要GD样片的可以加Q_QUN申请:6_15061293。 硬件准备 这里准备了GD32303C_START开发板进行验证。 STM32CUBEMX配置 勾选中断。 keil配置 microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,如果要使用printf(),必须开启。 串口接收发送函数 一般情况下,串口接收发送函数有如下所示。 ● HAL_UART_Transmit();
[单片机]
<font color='red'>STM32CUBEMX</font>开发GD32F303(8)----USART收发配置
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved