TOF开发VL53L4CD:第四讲,一键开启高效模式

2024-06-21

概要:本文介绍了基于VL53L4CD飞行时间(ToF)传感器实现连续测距的方法,并详细说明了如何初始化传感器、配置测量参数和检测阈值,以及如何实现中断配置实现实时响应。包含视频教学、样品申请、完整代码下载链接和应用示例。同时,还讲解了硬件准备、技术规格、系统框图和应用示意图,并通过STM32CubeMX配置MCU、串口、IIC和XSHUT等硬件接口。此外,还提供了app_tof.c中VL53L4CD传感器测距功能的详细代码解释和主程序轮询检测GPIO引脚状态的方法。最终演示了配置成功后的测距结果。

概述

深入探索,启迪未来!我们热诚地邀请您一同踏上ST与瑞萨RA的课程之旅。如果您渴望拥有这两大科技巨头的样片,别犹豫,立即加入我们的专属交流群:615061293。在这里,我们汇聚了众多志同道合的科技爱好者,共同探讨、学习,共同迈向科技前沿。这是一个分享与收获的平台,期待与您一同开启这段充满智慧与激情的旅程!

在日新月异的科技时代,嵌入式系统已成为众多创新应用的心脏。在这些前沿领域中,准确无误的距离测量与即时响应的能力,宛如锐利的双眼和敏捷的反应,至关重要。而VL53L4CD传感器,就是这片科技海洋中一颗璀璨的明珠。

VL53L4CD,它不仅仅是一个传感器,更是一个革命性的技术突破。它采用了先进的飞行时间(Time-of-Flight, ToF)技术,能够为你带来前所未有的高精度距离测量体验。想象一下,在无数需要精确距离测量的场景中,VL53L4CD都能为你提供准确无误的数据,助力你的系统更加智能、高效。

本文深入探讨了如何利用VL53L4CD传感器实现连续测距,并通过精心配置检测阈值,让你的系统响应能力达到极致。在这里,我们不仅仅是介绍技术,更是为你揭示一种全新的可能性。让我们一起,用VL53L4CD传感器,开启嵌入式系统的新纪元!

**探索VL53L4CD传感器:启动、设定与智能响应的魔法之旅**

踏上一段探索之旅,我们将带您领略VL53L4CD传感器的神奇魅力。首先,我们将深入剖析如何优雅地初始化它,精心设置其测量参数与检测阈值,确保每一次测量都精准无误。

但,这仅仅是开始。接下来,我们将揭示如何巧妙地配置中断,让它在特定的测量条件下瞬间觉醒。想象一下,当距离测量触及您预设的阈值范围时,系统能如魔法般触发中断,实现实时响应,高效处理每一份数据。

这不仅仅是一个技术过程,更是一场与VL53L4CD传感器亲密互动的魔法之旅。让我们一起,揭开它神秘的面纱,感受它带来的无限可能!

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第1张

视频教学

在这个璀璨的数字世界中,隐藏着一个令人心动的角落,那里充满了创意与激情的碰撞,每一帧都仿佛是一幅精心绘制的画卷。现在,就让我们一起踏入这个神秘的世界,探索那令人难以忘怀的视听盛宴——[点击这里,解锁你的视觉新体验!](https://www.bilibili.com/video/BV19n4y1X7ba/)

无需多言,只需一键点击,你将被带入一个五彩斑斓、充满活力的视频世界。那里的每一个画面都充满了生命的张力,每一帧都仿佛诉说着一个动人的故事。无论是激昂的旋律、动人的情感,还是震撼的视觉效果,都将让你沉醉其中,无法自拔。

在这里,我们用心打造每一个细节,只为给你带来最纯粹的视听享受。我们相信,通过我们的努力,你一定能够感受到那份来自内心深处的震撼与感动。所以,请不要犹豫,快来加入我们,一起感受这个充满魅力的数字世界吧!

样品申请

**【震撼来袭!】不容错过的精彩活动!**

你是否曾渴望一场与众不同的体验?是否期待与志同道合的朋友们一同探索未知的领域?现在,机会就在眼前!

**立即点击**👉 [活动链接](https://www.wjx.top/vm/OhcKxJk.aspx#) 👈,开启你的精彩之旅!

无需等待,无需犹豫,这里有你想要的刺激、惊喜和收获。每一次的参与,都是一次心灵的洗礼,每一次的尝试,都是一次人生的跨越。

**别错过!**这不仅是一个简单的活动,更是一个让你展现自我、挑战自我的舞台。在这里,你可以遇见志同道合的朋友,可以感受到前所未有的激情与活力。

所以,还等什么呢?**赶快行动吧!**点击链接,加入我们,一起创造属于你们的精彩回忆!🎉🎊

完整代码下载

在这片无尽的数字海洋中,我们为您精心挑选了一份独特的宝藏。无需费力探索,只需轻轻一点,便能触及这份珍贵的资源。它静静地躺在[这里](https://download.csdn.net/download/qq_24312945/89445253),等待着您的发现与探索。

每一份文件,都蕴含着无尽的知识与智慧。它们像是隐藏的星辰,在黑暗中闪烁着独特的光芒。而此刻,您只需跟随这束光芒,便能踏上一段充满惊奇的旅程。

别再犹豫,让我们一同揭开这神秘的面纱,探寻那未知的奥秘。点击链接,开启您的智慧之旅吧!

实现demo

  1. 传感器初始化:介绍如何正确初始化 VL53L4CD 传感器,包括系统时钟配置和外设初始化。
  2. 传感器配置:讲解如何配置传感器的测量参数,包括测距模式、时间预算和环境光测量设置。
  3. 单次测量实现:演示如何启动传感器进行单次测量,获取测量结果,并在每次测量后停止传感器以准备下一次测量。
  4. 应用示例:提供一个实际的应用示例代码,展示如何在嵌入式系统中实现单次测量模式,并处理测量结果以适应具体应用需求。

硬件准备

在踏上创新之旅的起点,一款精心设计的开发板是不可或缺的伙伴。此刻,我手中持有的正是一块我亲自绘制、独具特色的开发板。它的每一处细节都凝聚了我对技术的热爱与追求。如果你也对这片充满无限可能的领域怀有热情,那么不妨加入我们的行列,一同探索这神奇的开发板所能带来的无限惊喜。让我们一起,用智慧和热情,书写属于我们的科技传奇!

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第2张
TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第3张

技术规格

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第4张

系统框图

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第5张
TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第6张

应用示意图

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第7张

生成STM32CUBEMX

选择MCU

在探索创新的科技领域中,我们欣然向大家介绍这款搭载着尖端技术的产品。其核心所在,是一颗强大而高效的MCU——STM32G431CB。它不仅仅是一颗普通的微控制器,更是我们追求卓越性能与稳定性的象征。

STM32G431CB,作为我们产品的心脏,凭借其卓越的性能和可靠的表现,将为您带来前所未有的体验。它集成了众多先进技术,确保了产品的高效运行和稳定性能,让您在使用过程中能够尽享流畅与便捷。

在科技的道路上,我们始终秉持着精益求精的精神,不断探索和突破。STM32G431CB的选用,正是我们这一追求的最好体现。我们深信,它将为您带来更加出色的产品性能和使用体验,让您的生活因科技而更加美好。

请与我们一同期待,这款搭载STM32G431CB的产品将为您带来的精彩表现!

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第8张

串口配置

探索原理图奥秘:为您揭示PA9与PA10的神秘力量——它们正是开发板上串口的守护者!

在深入探索这片电子世界的神秘领域时,我们不禁被一张原理图所吸引。在这张图中,PA9与PA10宛如两位勇敢的骑士,默默守护着开发板的核心部位——串口。它们肩负着数据的传递与沟通的重任,确保着信息的畅通无阻。

想象一下,当您通过串口发送指令时,PA9与PA10就像两位忠诚的信使,迅速而准确地传递着您的意愿。它们无声无息地工作着,却为整个开发板的运行提供了坚实的保障。

因此,让我们向这两位英勇的守护者致敬!在电子世界的每一个角落,都有像PA9与PA10这样的存在,它们默默奉献、辛勤工作,为我们创造了一个更加智能、便捷的世界。

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第9张

**引领未来,轻松配置串口**

在数字化浪潮的推动下,串口通信作为连接设备间通信的桥梁,愈发显得不可或缺。为了助力您更好地驾驭这一技术,我们精心梳理了串口配置的详细步骤,让您能够轻松驾驭,畅享高效通信的便捷与乐趣。

**一、开启串口之旅**

无需复杂的操作,只需按照以下步骤,您便能轻松完成串口配置,让设备间的通信畅通无阻。

**二、配置步骤详解**

1. **选择串口端口**:根据您的设备需求,选择合适的串口端口,确保通信的稳定性和可靠性。
2. **设置波特率**:波特率是串口通信中重要的参数之一,它决定了数据传输的速度。根据您的需求,选择合适的波特率,确保数据的快速传输。
3. **配置数据位、停止位和校验位**:这些参数决定了数据传输的格式,确保数据的准确性和完整性。根据您的设备要求,进行相应的配置。

**三、畅享高效通信**

完成以上配置后,您的设备便能通过串口进行高效、稳定的通信。无论是数据传输、设备控制还是其他通信需求,都能轻松满足。

让我们一起开启串口之旅,领略数字化时代的高效与便捷吧!🚀🌐

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第10张

IIC配置

在这个前沿的技术世界里,VL53L4CD模块以其卓越的性能和精准度,巧妙地融入了我们这款应用中。它通过与主控器之间建立的I2C(IIC)通信桥梁,实现了数据的无缝对接与高效传输。值得一提的是,VL53L4CD模块的I2C引脚巧妙地与主控器的PA8和PB5两个IO口相连,仿佛两条神经脉络,将感知与控制的智慧紧密相连。

这一技术的融入,不仅提升了应用的智能化水平,更在细节之处彰显了我们对产品品质的极致追求。让我们共同期待,这款融合了VL53L4CD模块的创新应用,将为我们带来更多前所未有的体验与惊喜。

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第11张

在追求极致性能与效率的道路上,我们精心配置了IIC接口为快速模式,犹如赛道上的跑车,其速度已飙升至惊人的400k!这不仅是对技术的挑战,更是对完美的不懈追求。在瞬息万变的数字世界中,我们始终站在技术的前沿,为您提供更快、更稳定的数据传输体验。无需等待,即刻感受这如闪电般的速度吧!

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第12张

XSHUT

**改写后内容**:

XSHUT引脚,这一独特设计,巧妙地将设备与主机紧密相连,实现了精准控制。这样的连接方式不仅优化了整体功耗,更让设备在不需要时能够进入深度休眠状态,宛如进入了一个宁静的梦乡。而当主机需要唤醒它时,只需通过XSHUT引脚轻轻一触,设备便能迅速苏醒,重新投入到工作中。

想象一下,当AVDD电源稳定存在,而XSHUT引脚处于低电平状态时,设备便会悄然进入硬件待机模式(HW Standby mode)。这是一种极其节能的状态,让设备在无声无息中等待着下一次的唤醒。

然而,如果XSHUT引脚不是由主机来控制,而是通过一个上拉电阻与AVDD相连,那么设备在固件启动(FW BOOT)之后,便会自动选择另一种待机模式——软件待机(SW STANDBY)。这种待机模式虽然不同于硬件待机,但同样具备出色的节能效果,确保设备在不需要时不会消耗过多能量。

总之,XSHUT引脚的设计让设备在功耗控制和待机模式选择上拥有了更多的灵活性和高效性。无论是硬件待机还是软件待机,都为我们带来了更加便捷和节能的使用体验。

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第11张
TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第14张

GPIO1

在每一次精密的测距之旅中,传感器宛如一位精准的探险家,一旦完成了它的使命,GPIO1引脚便化身为信使,迅速而准确地传递出中断信号,如同烽火台上的狼烟,向微控制器宣告着测量结果的到来。

这种高效的通信方式,摒弃了持续轮询的繁琐与低效,特别是在那些追求极致节能的领域中,它更是发挥着无可替代的作用。让我们共同见证这场技术与智慧的完美交融,感受它所带来的便利与震撼吧!

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第15张
TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第16张
TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第17张

X-CUBE-TOF1

当您不再需要样例应用作为参考时,探索STM32CubeMX的强大功能,将X-CUBE-TOF1软件包巧妙地融入您的项目中,将为您的项目带来无尽的潜力。在这一节,我们将引导您如何轻松地将X-CUBE-TOF1软件包添加到您的STM32项目中,让您只需专注于驱动层的配置,而无需为繁琐的集成过程烦恼。准备好踏上这段智能、高效的开发之旅了吗?让STM32CubeMX成为您的得力助手,助您打造卓越的项目!

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第16张

app_tof.c

在深度探索传感器技术的世界中,`app_tof.c` 文件扮演了一个至关重要的角色。它内部定义了一个精心设计的静态函数——`MX_VL53L4CD_SimpleRanging_Process`,这个函数不仅仅是一段代码,更是连接现实与数字世界的桥梁。

`MX_VL53L4CD_SimpleRanging_Process` 函数的诞生,旨在让VL53L4CX传感器发挥出其独特的测距能力。它犹如一位技艺高超的舞者,在复杂的电子舞台上,优雅地配置和执行着简单测距的每一个步骤。

每一次的调用,都是对精准度与效率的不懈追求。无论是机器人导航、自动驾驶,还是智能安防、三维扫描,VL53L4CX传感器都在这个函数的精心指导下,为现代生活带来革命性的便利与安全。

让我们一起走进`MX_VL53L4CD_SimpleRanging_Process`函数的世界,感受科技带来的无限可能!

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第19张

详细解释

  1. CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L4CD, &Id);:

    ○ 读取传感器的ID,并将其存储在变量 Id 中。
  2. CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L4CD, ⋒);:

    ○ 获取传感器的能力,并将其存储在 Cap 结构中。
  3. 配置 Profile 结构的参数:

    ○ Profile.RangingProfile 设置测距模式。

    ○ Profile.TimingBudget 设置测量时间预算。

    ○ Profile.Frequency 设置为0,不用于正常测距。

    ○ Profile.EnableAmbient 启用环境光测量。

    ○ Profile.EnableSignal 启用信号测量。
  4. CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L4CD, &Profile);:

    ○ 如果配置文件与默认配置不同,则应用新的配置文件。
  5. CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, RS_MODE_BLOCKING_CONTINUOUS);:

    ○ 启动传感器,设置为阻塞连续测量模式。
  6. while (1) 循环:

    ○ 在无限循环中,定期读取传感器的距离数据。

    ○ 如果成功读取距离数据,则调用 print_result(&Result) 打印结果。

    ○ 使用 HAL_Delay(POLLING_PERIOD) 延迟一段时间,以控制轮询频率。

在深入编程的奥秘世界时,每一步都至关重要。在编写C语言程序时,一个常被忽视但极其重要的步骤就是在`main.c`中巧妙地添加头文件。这些头文件如同魔法般的钥匙,解锁了程序运行所需的函数、宏定义和数据类型。它们不仅仅是一行行代码,更是智慧的结晶,为程序赋予了生命和活力。

想象一下,当你为`main.c`添加了正确的头文件,你的程序就像得到了神奇的加持,每一个功能、每一个细节都仿佛被精心雕琢,焕发出璀璨的光芒。因此,在编写C语言程序时,不要忘记为你的`main.c`添加那些必要的头文件,让你的程序在编译和运行时都能如鱼得水,畅游在编程的海洋之中。

/* USER CODE BEGIN Includes */
#include "app_tof.h"
#include "custom_ranging_sensor.h"

/* USER CODE END Includes */

在浩渺的网络海洋中,每一篇文章都承载着无数人的期待与热情。这里,我们为您呈现一篇经过精心雕琢的佳作,它不仅仅是文字的堆砌,更是心灵的触摸和情感的流淌。

当您轻轻滑动屏幕,跃入眼帘的是一幅幅精美的图片,它们如诗如画,将您带入一个个动人的瞬间。而在这图片的间隙,是那些经过深思熟虑、精心打磨的文字,它们像一道道清泉,洗涤着您的心灵,唤醒着您内心深处的共鸣。

我们深知,每一篇文章的诞生都离不开无数次的修改和打磨。但在这里,我们更愿意将这份努力和汗水化作对您的敬意和感激。因为,正是您的支持与关注,让我们有了不断前行的动力。

所以,请允许我们向您献上这篇佳作,希望它能够成为您生活中的一道亮丽风景,为您带来无尽的启迪和感动。让我们一同沉浸在这篇文字的世界里,感受其中的美好与温暖,共同创造更加美好的未来。

/* USER CODE BEGIN 0 */
#define TIMING_BUDGET (200U) /* 8 ms < TimingBudget < 200 ms */
#define POLLING_PERIOD (250U) /* refresh rate for polling mode (ms, shall be consistent with TimingBudget value) */


static RANGING_SENSOR_Capabilities_t Cap;
static RANGING_SENSOR_ProfileConfig_t Profile;
static RANGING_SENSOR_Result_t Result;
static int32_t status = 0;

static void print_result(RANGING_SENSOR_Result_t *Result);
static int32_t decimal_part(float_t x);
/* USER CODE END 0 */

**全新升级,让测量变得更自主、更高效!**

🌟 亲爱的用户,我们为您带来了一个令人振奋的更新!现在,您可以轻松将 `Profile.RangingProfile` 切换至全新的自主测量模式,并同时启动单次测量功能。

🚀 **自主测量,掌控在您手中**

不再需要繁琐的手动操作,我们的自主测量模式将为您自动完成测量任务,让您能够专注于更重要的工作。无需担心测量误差,系统将自动优化并给出最准确的结果。

🎯 **单次测量,快速又精准**

同时,我们还为您提供了单次测量功能。只需简单设置,即可在瞬间获取您所需的测量数据。快速、精准,满足您的各种测量需求。

💡 **操作简单,轻松上手**

无论您是测量新手还是资深专家,都能轻松掌握这一全新功能。简单几步操作,即可开启自主测量和单次测量模式,让您的测量工作变得更加轻松、高效。

🔥 **立即体验,感受全新测量之旅**

快来尝试这一全新功能吧!我们相信,它将为您的测量工作带来全新的体验。让我们一起,开启全新的测量之旅!

  /* USER CODE BEGIN 2 */

  uint32_t Id;

  CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L4CD, &Id);// 读取传感器ID并存储在Id变量中
  CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L4CD, ⋒);// 获取传感器的能力并存储在Cap变量中

  Profile.RangingProfile = VL53L4CD_PROFILE_AUTONOMOUS;// 设置测距配置文件为自主测量模式
  Profile.TimingBudget = TIMING_BUDGET;// 设置测距的时间预算(以毫秒为单位)
  Profile.Frequency = 0; // 设置测量频率为0,这意味着使用测量之间的间隔时间,而不是连续测量
  Profile.EnableAmbient = 1; // 启用环境光测量
  Profile.EnableSignal = 1; // 启用信号测量

	// 如果配置文件与默认配置文件不同,则应用新的配置文件
  CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L4CD, &Profile);
	// 启动传感器进行单次测量
  status = CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, RS_MODE_BLOCKING_ONESHOT);
	
  /* USER CODE END 2 */

主程序

在智能设备中,我们采用高效的轮询机制,实时监测 GPIO 引脚的状态,确保一旦满足条件,能够立即捕获 VL53L4CD 传感器的测距数据,并对其进行精确处理。

想象一下,GPIO 引脚如同一位敏锐的哨兵,时刻警惕着外部信号的变化。当 GPIO 引脚检测到低电平信号——这标志着测距测量已经完成,数据已准备妥当——它便会立刻发出指令,启动一系列动作。

首先,通过调用 `CUSTOM_RANGING_SENSOR_GetDistance(CUSTOM_VL53L4CD, &Result);` 这段魔法般的代码,我们轻松获取了精确的测距结果。这一步骤,如同施展了神奇的法术,将无形的距离数据转化为可读的数字。

接下来,如果测量过程一切顺利,我们的系统会立即调用 `print_result(&Result);` 函数,将测距结果清晰地呈现在屏幕上。这一刻,仿佛时间凝固,我们沉醉于这准确无误的测量结果之中。

然而,我们的系统并未因此停下脚步。在完成一次测量后,它会迅速停止当前测量任务,为下一次测量做好充分准备。紧接着,再次启动单次测量,周而复始,确保每一次测量都能达到最佳状态。

这一切,都是为了提供更快、更准、更稳定的测距体验。我们的系统,始终在努力,为您呈现最完美的测距效果。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	if(HAL_GPIO_ReadPin  ( GPIOB, GPIO_PIN_15) ==0)		
	{		
    /* polling mode */
    status = CUSTOM_RANGING_SENSOR_GetDistance(CUSTOM_VL53L4CD, &Result);

    if (status == BSP_ERROR_NONE)
    {
      print_result(&Result);
    }
		// 停止测量
		CUSTOM_RANGING_SENSOR_Stop(CUSTOM_VL53L4CD);
		HAL_Delay(1000);
		// 再次启动传感器进行单次测量
		status = CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, RS_MODE_BLOCKING_ONESHOT);
	}
    /* USER CODE END WHILE */

//  MX_TOF_Process();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

演示结果

在技术的海洋中,我们成功地完成了这一重要步骤——配置已经完美达成,此刻,数据正如同清泉般流畅地跃然纸上,无障碍地打印出每一份关键信息。我们的努力没有白费,每一行代码、每一个设置都凝聚着团队的智慧和汗水。现在,数据打印的旅程已经畅通无阻,让我们共同期待更多美好的成果在未来绽放。

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第20张

当您深入探索并仔细注释部分代码时,会发现一个令人兴奋的奥秘:测距操作仅被执行一次。这一微妙的细节,无疑在告诉我们,系统已经悄然步入了精准的单次模式。在这独特模式下,每一次测距都是精准且高效的,确保您获得最准确的数据,无需重复测量,为您带来前所未有的便捷与信赖。

TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第21张
TOF开发VL53L4CD:第四讲,一键开启高效模式 (https://ic.work/) 技术资料 第22张

审核编辑 黄宇




文章推荐

相关推荐