基于STM32与MPU6050的计步器设计:从传感器数据到步态识别算法
1. 项目概述一个开源的步数测量方案最近在捣鼓一些健康监测的小玩意儿发现市面上的智能手环、运动手表核心功能之一就是计步。但你知道它们是怎么做到的吗其实原理并不复杂核心就是一个加速度传感器。我琢磨着与其花几百块买一个成品不如自己动手用最经典的STM32单片机配合一个常见的加速度计模块从头到尾搭建一个属于自己的步数测量系统。最关键的是我把整个项目的硬件连接、软件代码、算法思路全部开源了你完全可以跟着做一遍成本可能还不到一杯奶茶钱。这个项目非常适合电子爱好者、嵌入式初学者或者任何对“智能硬件”黑匣子感到好奇的朋友。它不仅能让你直观理解“步数”这个数据是如何从物理世界的晃动变成屏幕上的数字更能让你掌握STM32开发、传感器数据采集、滤波算法以及基础运动识别算法的全流程。做完之后你得到的不仅是一个能用的计步器更是一套可以移植到其他类似应用比如姿态识别、跌倒检测的代码框架。下面我就把这个项目的设计思路、硬件选型、核心算法和所有踩过的坑毫无保留地分享给你。2. 系统整体设计与核心思路拆解2.1 为什么选择STM32和加速度计做步数测量核心是检测人体行走时产生的周期性加速度变化。因此我们需要一个能感知三维加速度的传感器。MPU6050这款芯片几乎是电子DIY领域的“明星产品”它集成了三轴加速度计和三轴陀螺仪价格低廉资料丰富通过I2C接口与单片机通信是入门级惯性测量单元的不二之选。主控选择STM32F103C8T6也就是常说的“蓝桥杯”或“最小系统板”。理由很简单它性能足够72MHz主频的Cortex-M3内核外设丰富我们主要用到I2C和定时器社区支持强大价格极其亲民。整个系统的成本可以控制在30元人民币以内真正实现了“免费开源”的初衷。系统的核心工作流程是这样的MPU6050以固定频率例如50Hz采集人体运动时三个方向X, Y, Z的加速度原始数据通过I2C总线发送给STM32。STM32收到原始数据后并不能直接用来计步因为这里面包含了很多无用的噪声比如手的轻微抖动。所以我们需要先对数据进行“滤波”清洗然后计算合加速度再通过一个巧妙的“峰值检测”算法来识别出一步的起始点。每识别到一个有效步伐计数值就加一最后通过串口发送到电脑或者驱动一个OLED屏幕显示出来。2.2 方案选型背后的考量与权衡你可能会问为什么不用更简单的计步器模块市面上确实有直接输出步数的模块。但那样的话你就成了一个“组装工”无法触及算法的核心。我们这个项目的价值恰恰在于“透明化”从最原始的电压信号开始处理让你对整个信号链有完整的掌控。在算法选择上我放弃了复杂的机器学习模型对于单片机来说负担太重采用了经典的“阈值峰谷检测”算法。这是一种在资源受限的嵌入式设备上经过充分验证的轻量级方法。它的核心思想是人行走时合加速度会呈现规律的波浪形。我们通过设定合理的阈值来捕捉波峰并确保两个波峰之间有足够的时间间隔防止连续抖动误判以此作为一步的标志。在滤波算法上我对比了简单移动平均和卡尔曼滤波。简单移动平均实现容易但滞后明显卡尔曼滤波效果最优但参数调校复杂。作为折中我选择了互补滤波的一种变体并结合了一个滑动窗口均值滤波器在保证实时性的同时有效平滑了数据。具体选择需要在实际调试中根据运动剧烈程度做微调。3. 硬件连接与核心驱动解析3.1 硬件清单与接线图你需要准备以下硬件所有元件均可在常见电子商城以极低成本购得STM32F103C8T6最小系统板 x1MPU6050模块 x1USB转TTL串口模块用于调试 x1OLED显示屏可选用于脱机显示 x1杜邦线 若干接线是第一步务必仔细。MPU6050模块通常有VCC, GND, SCL, SDA, INT等引脚。我们主要使用前四个。STM32F103C8T6引脚MPU6050模块引脚功能说明3.3VVCC电源正极务必接3.3V接5V可能损坏传感器GNDGND电源地PB6 (或其它I2C1_SCL引脚)SCLI2C时钟线PB7 (或其它I2C1_SDA引脚)SDAI2C数据线3.3VAD0 (如果模块有)接3.3V设置I2C地址为0x69接GND则为0x68。注意不同厂家的MPU6050模块引脚排列可能略有不同请以模块上的丝印为准。INT引脚在本基础项目中暂未使用它是用于中断唤醒的。对于调试将串口模块的TX接STM32的PA10 (USART1_RX) RX接PA9 (USART1_TX) GND共地。这样我们就可以在电脑端的串口助手软件上看到打印的步数信息了。3.2 MPU6050驱动与数据读取要点STM32需要通过I2C协议与MPU6050“对话”。首先必须完成MPU6050的初始化这个过程就像给新设备上电并设置工作模式。核心初始化步骤包括复位设备向特定寄存器写入值让传感器恢复出厂设置。设置电源管理唤醒传感器使其退出睡眠模式。配置量程加速度计的量程通常设置为±2g或±4g。对于步态检测±2g的灵敏度已经足够它能提供更精细的数据变化。设置是通过写ACCEL_CONFIG寄存器完成的。设置采样率通过SMPLRT_DIV寄存器设置。我们的示例代码设置为50Hz即每秒采样50次。这个频率足够捕捉人行走的频率一般不超过5Hz。初始化成功后就可以循环读取加速度数据了。MPU6050的加速度原始数据存储在ACCEL_XOUT_H,ACCEL_XOUT_L等六个寄存器中每个轴两个寄存器共16位。读取后需要将两个8位数据组合成一个16位有符号整数。这里有一个极易出错的细节这个16位的原始值并不是标准重力加速度g。你需要根据之前设置的量程进行转换。例如当量程为±2g时对应的灵敏度为16384 LSB/g。那么实际的加速度值单位g为accel_g raw_data / 16384.0在代码中为了节省浮点运算的开销STM32F1没有硬件FPU浮点计算慢我们通常先使用整型数据进行处理在最后一步才进行标定。我的做法是在滤波和算法阶段全程使用“原始数据单位”即LSB只在进行阈值判断时将其视为一个“相对值”。4. 核心算法从原始数据到精准步数这是整个项目的灵魂所在。原始的三轴加速度数据就像一团乱麻我们的算法就是梳理这团乱麻找出规律的那把梳子。4.1 数据预处理滤波与向量合成MPU6050输出的数据噪声很大直接看波形毛刺非常多。第一步是滤波。我采用了一个长度为5的滑动窗口均值滤波器。具体实现是维护一个数组每次存入新数据并剔除最旧的数据然后计算窗口内数据的平均值作为本次的有效输出。这种方法简单有效能平滑掉高频噪声。// 简化的滑动平均滤波示例以X轴为例 #define FILTER_WIN_SIZE 5 int16_t accel_x_buf[FILTER_WIN_SIZE] {0}; uint8_t buf_index 0; int16_t low_pass_filter(int16_t new_sample) { accel_x_buf[buf_index] new_sample; buf_index (buf_index 1) % FILTER_WIN_SIZE; int32_t sum 0; for(uint8_t i0; iFILTER_WIN_SIZE; i) { sum accel_x_buf[i]; } return (int16_t)(sum / FILTER_WIN_SIZE); }滤波之后我们将三轴数据合成为合加速度。人体运动时传感器姿态可能变化单看任何一个轴的加速度都不稳定。但无论怎么动合加速度的大小即向量模长是相对稳定的并且能更好地反映整体运动的剧烈程度。计算公式为accel_magnitude sqrt(ax^2 ay^2 az^2)同样为了效率我们在代码中通常计算平方和而不进行开方运算因为后续的阈值比较在平方域同样可以进行。4.2 步态识别算法动态阈值与峰谷检测得到平滑的合加速度序列后它呈现出一个近似正弦波的形状。步态识别的经典算法就是检测波峰。但这里不能用一个固定的阈值。因为不同的人走路力度不同同一个人走路和跑步的幅度也不同。因此我实现了一个动态阈值算法。它的原理是持续跟踪合加速度信号在一定时间窗口内的最大值和最小值然后根据这个范围来计算一个自适应的阈值。动态阈值 最小值 (最大值 - 最小值) * 比例系数这个比例系数比如0.6需要根据实测调整。当合加速度值超过这个动态阈值并且之前处于上升趋势时我们标记一个“潜在波峰”。仅仅超过阈值还不够我们还需要防止在同一个波峰上重复计数。因此我引入了**“峰谷检测”状态机和“不应期”** 概念。状态机定义“寻找上升”、“等待下降”等状态。只有完整地经历“低于阈值 - 超过阈值并达到峰值 - 回落到阈值以下”这个过程才被认为是一个有效的步伐候选。不应期在检测到一个有效步伐后设置一个短暂的时间间隔例如300-400毫秒在这个间隔内即使信号再次超过阈值也不予理会。因为人正常行走的步频不可能那么快这能有效滤除高频抖动。实操心得动态阈值的更新速度很关键。更新太快阈值会跟着噪声漂移更新太慢无法适应运动强度的变化。我采用的方法是每检测到一步就根据这一步前后一段时间窗口的数据来更新一次最大值和最小值这样既能跟随变化又不会过于敏感。5. 软件实现与系统集成5.1 工程架构与代码模块化一个好的项目离不开清晰的代码结构。我将工程分为以下几个模块方便管理和移植main.c主循环调度任务。mpu6050.c/.hMPU6050的底层I2C驱动、初始化、数据读取函数。filter.c/.h存放各种滤波函数如滑动平均。step_counter.c/.h步数检测算法的核心包含动态阈值计算、状态机实现。uart.c/.h串口打印调试信息。oled.c/.h可选OLED屏幕显示驱动。在main.c中主循环以固定的时间间隔由定时器中断触发如20ms一次执行以下流程while(1) { if (data_ready_flag) { // 定时器标志表示到采样时间了 data_ready_flag 0; MPU6050_Read_Accel(ax, ay, az); // 读取原始数据 ax_f low_pass_filter(ax); // 滤波 ay_f low_pass_filter(ay); az_f low_pass_filter(az); magnitude_sq ax_f*ax_f ay_f*ay_f az_f*az; // 计算平方和 // 步数检测算法 if (step_detect(magnitude_sq, step_count)) { // 如果检测到一步更新显示或串口输出 printf(Steps: %d\r\n, step_count); OLED_ShowNum(0, 0, step_count, 5, 16); // OLED显示 } } }5.2 参数调试与校准实战算法中有几个关键参数直接影响计步的准确率采样频率在MPU6050_Init中设置。50Hz是常用起点。滤波窗口大小FILTER_WIN_SIZE。太大导致响应迟钝太小滤波效果差。建议从5开始尝试。动态阈值比例系数在step_detect函数中。通常在0.4到0.7之间。走路轻柔则调低跑步或用力摆手则调高。不应期时间对应步态周期的最小间隔。建议设置为300ms约对应每分钟200步这已经是非常快的步行了。调试方法最好的调试工具是串口绘图器。将合加速度的波形和动态阈值的波形通过串口发送到电脑用Serial Plotter等工具绘制出来。你可以清晰地看到每一个波峰是否被正确识别阈值线是否处于合理位置。通过观察波形反复调整上述参数直到在行走和跑步测试中都能达到95%以上的准确率。注意首次使用MPU6050时需要静态校准。将模块水平静止放置连续读取几百个样本计算每个轴的平均值。这个平均值就是该轴的“零偏”。在后续读取数据时应减去这个零偏值以消除传感器本身的误差。很多计步不准的问题根源就在于没有校准零偏。6. 常见问题、优化方向与扩展思路6.1 问题排查速查表在实际制作过程中你大概率会遇到以下问题这里给出排查思路现象可能原因排查步骤I2C读取失败MPU6050无响应1. 接线错误或接触不良2. 电源接错接了5V3. I2C引脚配置错误4. 上拉电阻缺失1. 用万用表检查VCC是否为3.3VSCL/SDA线是否连通。2. 检查代码中I2C初始化GPIO模式应为开漏输出并使能内部/外部上拉。3. 尝试降低I2C通信速率。串口无输出1. USB转TTL模块驱动问题2. 串口线接反TX-RX应对调3. 代码中串口配置波特率与电脑端不一致1. 先发送一个固定的字符串如“Hello”测试串口通路是否正常。2. 确认波特率如115200、停止位等配置双方一致。计步数严重不准多计或漏计1. 传感器未校准零偏大2. 滤波参数或动态阈值参数不合理3. 算法“不应期”设置太短或太长4. 佩戴位置不理想如放在口袋剧烈晃动1. 执行静态校准程序。2. 使用串口绘图器观察波形调整滤波窗口和阈值系数。3. 模拟正常步行和跑步分别调试“不应期”。4. 尝试将模块固定在腰部或脚踝信号更规律。计步有延迟1. 滤波窗口过大2. 主循环处理任务过多采样间隔不稳定1. 减小滤波窗口大小。2. 确保采样由定时器中断严格触发主循环只做必要处理。6.2 性能优化与功能扩展基础功能实现后你可以尝试以下优化和扩展让项目更具挑战性和实用性低功耗优化目前单片机一直全速运行。可以改为由MPU6050的INT中断引脚触发STM32外部中断当有运动时STM32才唤醒并工作静止时进入停机模式极大延长电池续航。融合陀螺仪数据本项目只用了加速度计。实际上MPU6050的陀螺仪数据可以用来进行姿态解算通过互补滤波或卡尔曼滤波融合加速度计和陀螺仪数据得到模块的俯仰角、滚转角。这样无论设备如何佩戴我们都可以通过坐标变换将加速度数据统一到一个固定的参考系比如地理坐标系从而大幅提升不同佩戴方式下的计步准确性。增加无线传输添加一个蓝牙模块如HC-05或Wi-Fi模块如ESP-01S将步数数据实时发送到手机App实现一个简易的“智能手环”原型。实现简单算法在步数基础上结合步频和预先标定的步长可以估算距离和速度。更进一步通过分析加速度波形的特征幅度、频率可以尝试区分走路、跑步、上下楼梯等不同运动模式。这个基于STM32的步数测量系统就像一把钥匙为你打开了嵌入式传感器应用的大门。从看懂数据手册、驱动传感器到设计算法、调试优化每一步都是实实在在的积累。开源的全部代码和更详细的说明你可以在常见的代码托管平台找到。希望你在复现的过程中不仅能做出一个能用的计步器更能享受到从无到有解决一个实际问题的乐趣。遇到问题别怕那正是学习真正开始的时候。

相关新闻

如何快速解决Windows苹果驱动问题:一键安装USB网络共享驱动指南

如何快速解决Windows苹果驱动问题:一键安装USB网络共享驱动指南

如何快速解决Windows苹果驱动问题:一键安装USB网络共享驱动指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.c…

2026/7/29 10:59:37阅读更多 →
C++模板链接错误解析:从编译模型到工程实践解决方案

C++模板链接错误解析:从编译模型到工程实践解决方案

1. 项目概述&#xff1a;从“能用”到“精通”的C模板之路 如果你写过一些C代码&#xff0c;尤其是涉及STL容器或者通用算法&#xff0c;那你肯定已经和模板打过交道了。 std::vector<int> 、 std::sort &#xff0c;这些看似简单的用法背后&#xff0c;是C模板元编程…

2026/7/29 10:59:37阅读更多 →
计算机毕业设计之基于SpringBoot的宠物用品销售系统

计算机毕业设计之基于SpringBoot的宠物用品销售系统

基于SpringBoot的宠物用品销售系统是一个集现代技术于一体的电子商务平台&#xff0c;旨在为广大宠物主人提供便捷、高效的在线购物体验。该系统采用SpringBoot框架作为后端开发的核心&#xff0c;充分利用其“约定优于配置”的理念&#xff0c;以及强大的依赖注入和AOP功能&am…

2026/7/29 10:59:37阅读更多 →
企业数字化转型:被低估的线下会话智能抓手

企业数字化转型:被低估的线下会话智能抓手

2026年企业在查询"智能工牌排行榜"时&#xff0c;关注的已不再是单一录音硬件的参数比拼&#xff0c;而是前端采集硬件、ASR/NLP/LLM分析、管理看板与运营交付的组合方案成熟度。普通录音设备仅解决声音捕获&#xff0c;单纯CRM插件只关注数据录入&#xff0c;两者都…

2026/7/29 12:07:52阅读更多 →
DeepSeek 热潮下的 AI 应用选型:当大模型 API 遇到复杂知识库问答

DeepSeek 热潮下的 AI 应用选型:当大模型 API 遇到复杂知识库问答

我一直是直接调用大模型 API 的忠实用户。对开发者来说&#xff0c;这种方式确实足够优雅&#xff1a;申请 key&#xff0c;写几行请求代码&#xff0c;把 prompt 拼好&#xff0c;马上就能得到结果。早期做 Demo、做内部小工具、做一个简单的文案生成器或者问答机器人时&#…

2026/7/29 12:07:52阅读更多 →
从戒烟帽项目看创客教育:Arduino与传感器在可穿戴设备中的实践

从戒烟帽项目看创客教育:Arduino与传感器在可穿戴设备中的实践

1. 从“戒烟帽”看创客教育的落地实践 最近在整理学生创客作品集时&#xff0c;一个名为“戒烟帽”的项目让我眼前一亮。这不仅仅是一个简单的电子小制作&#xff0c;它背后折射出的&#xff0c;是当下创客教育从“炫技”走向“解决真实问题”的深刻转变。这个由学生团队完成的…

2026/7/29 12:07:52阅读更多 →
Python原型链污染漏洞剖析:从Flask应用到全局命名空间劫持

Python原型链污染漏洞剖析:从Flask应用到全局命名空间劫持

1. 项目概述&#xff1a;一次从Web到Python后端的深度渗透最近在复盘一个内部CTF靶场时&#xff0c;遇到了一道非常有意思的题目。它表面上是一个标准的Flask Web应用&#xff0c;有用户登录、信息查询这些常规功能。但在深入测试时&#xff0c;我发现了一个不寻常的JSON参数处…

2026/7/29 12:07:52阅读更多 →
JWT高并发性能瓶颈解析与优化实战:从200ms到5ms的突破

JWT高并发性能瓶颈解析与优化实战:从200ms到5ms的突破

1. 项目概述&#xff1a;当JWT遇上高并发如果你是一名Java后端工程师&#xff0c;正在处理一个用户量级在百万甚至千万的系统&#xff0c;并且已经采用了JWT&#xff08;JSON Web Token&#xff09;作为无状态认证方案&#xff0c;那么你很可能已经或即将遇到一个棘手的场景&am…

2026/7/29 12:07:51阅读更多 →
深入解析TI CC13x2/CC26x2 AON_RTC:低功耗物联网设备的精准时钟与唤醒引擎

深入解析TI CC13x2/CC26x2 AON_RTC:低功耗物联网设备的精准时钟与唤醒引擎

1. AON_RTC&#xff1a;低功耗无线MCU的时间基石 在嵌入式系统&#xff0c;尤其是电池供电的物联网设备里&#xff0c;时间是一个既基础又奢侈的概念。说它基础&#xff0c;是因为几乎所有的应用逻辑都离不开时间戳、定时任务和周期性唤醒&#xff1b;说它奢侈&#xff0c;是因…

2026/7/29 12:05:51阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

&#x1f539; 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具&#xff0c;凭借本地离线运行、可视化图形操作和任务自动化三大核心特性&#xff0c;赢得了众多用户的青睐。与普通在线对话AI工具不同&#xff0c;它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接&#xff0c;是用激光束对阀座壳体&#xff08;通常为不锈钢或铝合金&#xff09;进行密封焊接&#xff0c;使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX&#xff1a;三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停&#xff1f;用 interrupt 给它设个“关卡“&#xff01; 在构建复杂的 Agent 系统时&#xff0c;我们经常会遇到这样的场景&#xff1a;Agent 正在执行一个多步骤的任务&#xff0c;比如“下单购买商品”&#xff0c;但执行到一半时&#xff0c;我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日&#xff0c;国际专注开放式技术研发的声学品牌Nank南卡&#xff0c;正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手&#xff1f;而且是选择曾舜晞&#xff1f;让我们一起来探索一下&#xff01;比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →