ESP32-S2应用开发——USB通信(CDC类)

19 篇文章 32 订阅
订阅专栏
14 篇文章 22 订阅
订阅专栏

ESP32S2应用开发——USB通信(CDC类)

目录

  • ESP32S2应用开发——USB通信(CDC类)
    • 前言
    • 1 硬件介绍
      • 1.1 硬件连接
    • 2 软件开发
      • 2.1 安装开发板
      • 2.2 安装库
      • 2.3 运行示例代码
      • 2.4 USB传输速度测试
    • 结束语

前言

ESP32-S2是继ESP32之后新出的一款的MCU,而USB接口是ESP32-S2的一大特色,虽然使用的只是USB1.1协议,但是相比于串口而言传输速度还是要快很多的。对于音频或者视频等数据的传输,使用usb明显是比串口有优势的。
因为前段时间项目需求,需要用到ESP32-S2的USB,于是就花了些时间研究了一下,发现网上关于ESP32-S2 USB的介绍很少而且大多资料都过时了,于是就有了这篇博客。
好了,废话不多说了,马上开始讲解。

1 硬件介绍

本文的硬件配置如下:

模块型号说明
ESP32-S2ESP32-S2-WROVER这是乐鑫的一款模组,内部主要是用乐鑫的ESP32-S2再加上一个4M FLASH和2M PSRAM组成,开发板用的是乐鑫的ESP32-S2-SAOLA

ESP32-S2的引脚很多我就不一一介绍了,这一讲主要用到的UART0和USB(GPIO19,GPIO20)。

1.1 硬件连接

我这里用的是开发板,硬件连接比较简单。
UART0通过USB转TTL芯片连接到PC端。
USB通过GPIO19和GPIO20直连PC端的USB接口。

引脚描述说明
GPIO19USB D-USB信号线,直连PC端即可,不需要接转换芯片
GPIO20USB D+USB信号线,直连PC端即可,不需要接转换芯片
U0TXD串口TX方便调试使用,需要接USB转换TTL才能连接到PC端
U0RXD串口RX方便调试使用,需要接USB转换TTL才能连接到PC端

2 软件开发

2.1 安装开发板

关于ESP32-S2 Arduino的环境搭建我之前出过教程了,这里就不多说了,不懂的同学可以先看下我之前的博客。

2.2 安装库

打开Arduino IDE,依次打开 工具 -> 管理库…
在搜索框输入需要安装的库名称,找到对应的库,点击安装即可。

本文需要使用的Arduino库如下:

Arduino库版本说明
ESP32TinyUSB1.3.4USB相关库,使用该库要确保ESP32库版本在2.0.0以上
esp322.0.1建议使用该版本,v2.0.2有个usb相关的结构体定义改了,跟ESP32TinyUSB库不兼容。
如果非要用2.0.2以上版本就需要在ESP32TinyUSB和esp32两者之前选择一个把client_event_callback的定义改掉
在这里插入图片描述

2.3 运行示例代码

ESP32TinyUSB库自带很多examples,我们打开一个cdc的示例代码先测试一下USB通讯。
示例代码如下:

/**
 * Simple CDC device connect with putty to use it
 * author: chegewara
 * Serial - used only for logging
 * Serial1 - can be used to control GPS or any other device, may be replaced with Serial
 */
#include "cdcusb.h"
#if CFG_TUD_CDC
CDCusb USBSerial;

class MyUSBCallbacks : public CDCCallbacks {
    void onCodingChange(cdc_line_coding_t const* p_line_coding)
    {
        int bitrate = USBSerial.getBitrate();
        Serial.printf("new bitrate: %d\n", bitrate);
    }

    bool onConnect(bool dtr, bool rts)
    {
        Serial.printf("connection state changed, dtr: %d, rts: %d\n", dtr, rts);
        return true;  // allow to persist reset, when Arduino IDE is trying to enter bootloader mode
    }

    void onData()
    {
        int len = USBSerial.available();
        Serial.printf("\nnew data, len %d\n", len);
        uint8_t buf[len] = {};
        USBSerial.read(buf, len);
        Serial.write(buf, len);
    }

    void onWantedChar(char c)
    {
        Serial.printf("wanted char: %c\n", c);
    }
};


void setup()
{
    Serial.begin(115200);
    USBSerial.setCallbacks(new MyUSBCallbacks());
    USBSerial.setWantedChar('x');

    if (!USBSerial.begin())
        Serial.println("Failed to start CDC USB stack");

}

void loop()
{
    while (Serial.available())
    {
        int len = Serial.available();
        char buf1[len];
        Serial.read(buf1, len);
        int a = USBSerial.write((uint8_t*)buf1, len);
    }
}

#endif

在这里插入图片描述
运行结果如下:
设备管理器能看到两个com口(一个是串口转换芯片,一个是ESP32-S2的USB)。
在这里插入图片描述
用串口助手先打开UART对应的端口,波特率115200。再打开一个串口助手,连接USB虚拟串口对应的com口,此时能看到UART会出现一些log。
在这里插入图片描述
USB连接上之后,两个串口助手之间可以互发数据,说明USB通讯是没问题的。
在这里插入图片描述
提示:如果烧录程序之后出现一直重启的现象,可能是因为MCU原本出厂的固件有一部分没有被擦除导致的,可以使用乐鑫的flash烧录工具对整个MCU进行擦除之后再烧录Arduino的程序。

2.4 USB传输速度测试

简单写一个测试代码用来测试USB数据传输的速度。
示例代码如下:

#include "cdcusb.h"
#include "Arduino.h"
#include <esp_heap_caps.h>

#define FILE_SIZE 971240   // 测试文件的大小
uint8_t *rx_buf;
uint32_t rx_num = 0;
uint8_t first_time_flag = 1;
long lTime;

CDCusb CDCUSBSerial;

class MyCDCCallbacks : public CDCCallbacks {
    void onCodingChange(cdc_line_coding_t const* p_line_coding)
    {
        int bitrate = CDCUSBSerial.getBitrate();
        Serial.printf("new bitrate: %d\n", bitrate);
    }

    bool onConnect(bool dtr, bool rts)
    {
        Serial.printf("connection state changed, dtr: %d, rts: %d\n", dtr, rts);
        return true;  // allow to persist reset, when Arduino IDE is trying to enter bootloader mode
    }

    void onData()
    {
        if(first_time_flag)
        {
            first_time_flag = 0;
            lTime = micros();
        }

        int len = CDCUSBSerial.available();
        CDCUSBSerial.read(&rx_buf[rx_num], len);
        rx_num += len;

        if(rx_num >= FILE_SIZE)
        {
            lTime = micros() - lTime;
            Serial.printf("time: %f s \n", lTime / 1000000.0);
            Serial.printf("speed:%f kb/s", ((float)FILE_SIZE / 1024.0) / (lTime / 1000000.0));
            first_time_flag = 1;
            rx_num = 0;
        }
    }
};

void setup()
{
    Serial.begin(115200);

    if (!CDCUSBSerial.begin())
        Serial.println("Failed to start CDC USB stack");

    CDCUSBSerial.setCallbacks(new MyCDCCallbacks());

    rx_buf = (uint8_t*)ps_malloc(FILE_SIZE);
}

void loop()
{

}

通过串口助手往USB发送一个大文件(971240字节,约948.5kb)。
提示:这里串口助手打开文件时显示的时间是按当前波特率估算出来的,但是实际上我们用的是虚拟串口,USB传输是没有波特率这个参数的,这里波特率不管设置为多少,实际的速度都一样,都是以USB传输速度为准。
在这里插入图片描述

通过ESP32-S2的串口0打印实际的传输的时间和速度。
在这里插入图片描述
经过sscom这个串口助手传输文件测试,ESP32-S2 USB的最大传输速度在190kb/s左右,实际上加上一些应用代码之后,速度会有所下降,约160kb/s左右(这个速度跟具体的应用有关)。
因为USB接收是中断处理的,MCU如果一直处于闲置状态,那USB的数据传输速度可以达到最大。反之,MCU如果一直在运行其他应用代码,那么在接收USB数据时只能通过频繁的中断来完成数据的读取,此时接收的效率明显是要下降一些的。另外,传输速度跟MCU的接收方式也有关系,USB1.1最大支持一次接收64字节,所以MCU在进入回调函数时,应该根据把当前收到的所有数据一次性读取完,而不是每次回调只读一个字节。

后期测试补充:
在使用sscom这个串口助手时,文件的传输速度跟设置的波特率无关,但是后来用另外一个串口助手(UartAssist)时发现用这个工具设置的波特率跟实际传输速度有关联,这就很奇怪了,因为这个只是虚拟串口,实际上是按照USB1.1协议来传输数据的,理论上不应该出现这种情况的。然后我测试了多种不同的波特率,发现波特率较小时,实际传输速度与波特率基本一致,波特率越大速度越快,当波特率增大到2M时,速度与之前sscom串口助手测试的速度接近。继续增大波特率到某个值之后,不管波特率设置多少,速度都不再增大了。最大传输速度在270kb/s左右。
从目前的现象来看,USB的传输速度跟串口工具本身也有关系,具体的原因还没搞清楚,有懂的老哥解答一下吗?

结束语

好了,关于ESP32-S2 USB的使用就介绍到这里。如果这篇文章对你有帮助,可以点赞收藏,如果还有什么问题,欢迎在评论区留言或者私信给我。

补充说明:
最近我经常收到一些私信,这是不是真的USB?这是串口转USB吧?
所以我这里统一补充说明一下,如何区分USB CDC和串口。
CDC类USB和HID不同,它枚举出来的设备确实是一个串行设备,看着是很像串口,但实际上是不一样的。
主要有以下几个区别:

区别USB串口
1两个USB之间是直连的,不需要转换电平串口是TTL电平的,如果没有转换芯片,是没法直接连接PC端的USB接口的。常用的转换IC如:CH340、CP2102、PL2303、FT232、MAX232等
2传输速度快传输速度慢
3遵循USB协议(可通过逻辑分析仪抓取和解析)遵循串口协议(可通过逻辑分析仪抓取和解析)
4USB有枚举过程(可通过BusHound抓取通讯过程)串口不存在枚举过程

Arduino开发教程汇总:
https://blog.csdn.net/ShenZhen_zixian/article/details/121659482

EspTinyUSB:ESP32S2本机USB库。 实现了一些常见的,例如MIDI,CDC,HID或DFU(更新)
05-07
描述 库允许构建USB设备并以最小的努力使其可用: CDC,通讯设备, MSC,大容量存储, HID,人机界面设备别:键盘,鼠标,游戏手柄,通用IN / OUT, MIDI,乐器数字接口, DFU,设备固件更新等级, WebUSB,它使用供应商来显示webusb的用法。 硬件 要使用本机USB,我们需要将针脚19和20连接到usb电缆或具有似连接器的连接器: 如何 库允许在标准USB设备中设置所有值,例如: 制造商 产品名称 序列号 修订 VID和PID ANYusb device; // any USB class like HID, MSC, CDC device.manufacturer(char*); device.product(char*); // product name device.serial(char*); // serial num
esp32s2-usb-uart:ESP32-S2USB至UART
03-30
ESP32S2-USB-UART ESP32-S2USB转UART板 特征 USB转UART 流量控制 自动下载ESP系列芯片 无线自动下载 四个LED指示UART信号 可选5V / 3.3V输出 预览图片
Arduino ESP32 USB CDC功能使用介绍
perseverance51博客
01-22 1671
Arduino ESP32 USB CDC功能使用介绍
基于arduinoESP32上蓝牙midi音乐设备开发教程
最新发布
andylauren的专栏
04-16 851
首先看几个视频,大佬们做的东西,都是基于esp32。自制卡林巴电子琴,可通过蓝牙连接手机库乐队 MIDI Boy【理科生的第一件乐器】_哔哩哔哩_bilibili【Totoro】模仿“埙”的电子吹奏乐器_哔哩哔哩_bilibili相关的文章如下Python挺酷的 | 识别蓝牙MIDI(基于ESP32开发板)_python解析midi-CSDN博客【MIDI_Boy】使用ESP32做一个炫酷的【卡林巴】【电子琴】, 可通过蓝牙MIDI连接手机库乐队_esp32 midi-CSDN博客。
ESP32调试USB_CDC模式
hxm2011的博客
03-01 820
ESP32 TinyUSB
ESP32-S2 USB & UART 下载总结
ESP 技术分享,推动万物互联
08-31 6182
ESP32-S2 支持两种下载方式:UART0 下载和 USB 下载。 1. UART0 下载 参见 ESP32S2 固件烧录需满足的硬件环境 参见 《ESP32-S2 Datasheet》Strapping 管脚说明 串口驱动参见 与 ESP32-S2 创建串口连接 2. USB 下载 ESP32-S2 系列集成了全速 USB OnThe-Go (OTG) 接口,符合 USB 1.1 规范,可以支持使用 USB 下载固件和 USB 通信 ESP32-S2 USB 下载说明参见 USB.
ESP32S2esp32s2开发板做为usb网卡使用
热门推荐
rentong123的博客
12-02 1万+
概述 使用 esp-iot-solution 中的 usb_dongle 例程(esp-iot-solution/examples/usb/device/usb_dongle),实现USB网卡功能。操作前先详细阅读README.md,按照说明连接好设备的管脚。 硬件 esp32s2开发板 USB连接线的D+/D-分别接esp32s2的pin_20/pin_19 编译烧写 编译环境搭好之后,直接编译usb_dongle cd usb_dongle_demo idf.py set-target esp3
ESP32 micro-usb 多数据量并简单加密的串口通信
qq_62096941的博客
04-05 2352
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、ESP32和上位机的环境二、上位机部分1.串口通信的准备2.数据的准备与发送三、下位机部分1.ESP32串口通信准备2.数据的接收四、同时测试总结 前言 最近在研究单片机与上位机的串口通信,刚好手头有一块ESP32-wroom-32,所以尝试通过micro-usb来与电脑进行一个通信的测试。 一、ESP32和上位机的环境 ESP32的编写是在Arduino IDE的平台上 上位机的测试编写是在python中 二、上位机.
2.ESP32-S2 USB 挂载内部Flash,当作U盘使用,无线U盘
weixin_43808708的博客
01-17 3792
使用的 IDF_4.4 C语言开发。
USB转串口,专门为ESP32调试烧录程序,看打印信息,包括原理图和PCB,研究ESP32的自动烧录工具
07-18
USB转串口工具,专门为ESP32调试烧录程序使用,看打印信息,包括原理图和PCB,研究ESP32的自动烧录工具,方便同学们调试使用
树莓派外挂ESP32-USB
GKoSon的博客
10-18 690
重来一次 干干净净的PI 开始操作 ls -l /dev/tty* sudo btattach -N -B /dev/ttyUSB0 -S 115200 此时需要在启动一个SSH 接线是蓝牙TTL线 卢瑟--P18 白色 P5 /* * app_main.c * * Created on: 2020-02-01 23:25 * Author: Jack Chen <redchenjs@live.com> */ #in..
ESP32软件的USB主机通过通用IO引脚连接。 我们最多可以同时连接4个USB-LS HID(键盘鼠标操纵杆)设备。-C/C++开发
05-27
esp32_usb_soft_host esp32 USB-LS纯软件主机,通过通用IO引脚连接。 同时最多4个HID设备。 板〜$ 3:https://www.aliexpress.com/pr esp32_usb_soft_host esp32 USB-LS纯软件主机通过通用IO引脚。 同时最多4个HID设备。 板〜$ 3:https://www.aliexpress.com/premium/LOLIN32.html或任何https://www.aliexpress.com/premium/ESP32.html usb连接器(例如):https:// www。 aliexpress.com/item/1005002027124387.html //为我设置正确的esp32 env:export IDF_PATH = $ HOME / esp / esp-idf source $ HOME / esp / esp-idf / export.sh //连接开发板,构建和Flash git clone https://github.com/sdima1357/esp32_usb_
esp32s3 u盘 usb_device_msc
08-16
esp32s3 u盘 usb_device_msc 可以吧内部flash或者SD卡做成u盘。
ESP32-USB-Soft-Host:@ sdima1357的usb_soft_host esp-idf示例的Arduino包装
03-12
适用于Arduino IDE的ESP32 USB Soft Host库 这主要是对出色工作的 代码的某些部分(例如,定时器组isr调用)已进行回归以满足esp-idf 3.3的需求。 esp32 USB-LS是通过通用IO引脚对USB主机的纯软件实现。 它最多同时支持4个HID设备。 可在ESP32上使用-Wroom a Wrover,尚未在S2上进行测试,无法在C3上编译。
DIY使用ESP32的手持游戏手柄并通过BLE进行通信-电路方案
04-19
DIY使用ESP32的手持游戏手柄并通过BLE进行通信 硬件部件: esp32× 1个 ws2812b× 6 游戏杆× 2 角度按钮× 2 按钮× 8 18560电池和电池座× 2 三向拨动开关× 1个 TP4056带保护的电池充电电路× 1个 MT3608升压转换器× 1个 软件应用程序和在线服务: Arduino IDE 手动工具和制造机: 烙铁(通用) 这是一个使用ESP32微控制器制作的DIY手持游戏手柄。您可能之前已经看过这样的游戏控制器。但大多数使用Arduino。或更具体地说,是Arduino pro micro或Leonardo开发板。因为这些板支持HID或通过USB的人机接口设备。但是esp32没有这种功能。那么我们该怎么做呢?嗯,esp32确实具有BLE或低功耗蓝牙,我们可以使用它通过蓝牙进行无线通信。 因此,我们有ESP32模块作为中央控制器,然后有USB C型端口和一个3.3v稳压器,可将5v转换为3.3v。然后我们有了编程电路,使用具有自动编程模式的ch340c usb到串行转换器和使用双工晶体管的自动复位电路。我们还具有电池充电电路,以及过充电和过放电保护功能。然后使用升压转换器ic将其升压至5v。接下来,我们有操纵杆,D-Pad按钮,触发按钮,Neopixel LED和i2c端口。最后是3向开关,可在USB电源和电池电源之间切换。 游戏手柄有 2个模拟游戏杆 2个触发按钮 2个D-Pads 6个可寻址RGB LED 和一个i2c端口 它可以使用2个18650锂离子电池运行,可以使用USB C型端口对其进行更改。它也可以用来对微控制器进行编程。该设计的灵感来自新的ps5控制器,以使其外观更好。GPIO4使用分压器连接到电池。这样我们就可以测量电池电压了。NeoPixel LED将指示控制器是否连接到设备或电池电压是否低。 该代码基于lemmingDev的BLE Gamepad库。在代码中,我为不同的输入定义了所有GPIO引脚。然后在设置中有一些初始的led动画。板子一旦连接到设备,所有的LED就会变成绿色。并且它将按先前定义的时间间隔检查电池电压。然后我们获得按钮状态,并相应地设置游戏手柄按钮。然后,我们采用模拟输入,并将其映射到合适的值。最后根据我们收到的值设置轴。上载代码后,在智能手机或PC上打开蓝牙菜单,您会看到一个新设备弹出。单击该按钮将其连接,就可以开始游戏了。
ESP32-S2 原理图pcb全套可以直接打样
04-08
ESP32-S2 原理图pcb全套可以直接打样
ESP32-S2设计原理图
05-27
ESP32-S2设计原理图
ESP32-S2运用Eclipse JTAG调试.docx
06-17
ESP32-S2在Eclipse下用JTAG调试的搭建过程以及遇到的问题汇总
arduino esp32-s2
06-07
Arduino ESP32-S2是一款基于ESP32-S2芯片设计的开源开发板,可以用于构建各种联网应用程序。ESP32-S2芯片集成了Wi-Fi和低功耗BLE连接,同时还拥有更快的CPU和更大的存储空间,可以支持更复杂的应用程序。该开发板与Arduino IDE兼容,使得程序员可以轻松地使用Arduino库和语法进行编程,也支持MicroPython编程语言。除了可靠的无线性能,Arduino ESP32-S2还提供了丰富的接口和功能,如USB、DAC、I2S、SPI、UART、I2C和PWM等。这些功能使得开发人员可以快速构建各种不同型的物联网设备,包括智能家居设备、传感器、嵌入式机器人、无人机和其他物联网设备。总之,Arduino ESP32-S2是一款功能强大、易用性高的开发板,为开发人员提供了一个优秀的平台来实现自己的物联网创意。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • BH1750光照传感器超详细攻略(从原理到代码讲解,看完你就懂了) 154085
  • TMF8801激光测距芯片驱动程序 55580
  • GD32和STM32的区别 51467
  • AS608光学指纹模组编程和应用详解 45106
  • Python应用开发——爬取网页图片 38604

分类专栏

  • 芯片驱动 13篇
  • 经验分享 29篇
  • 单片机相关 48篇
  • 大学生专栏 6篇
  • esp32 14篇
  • arduino 19篇
  • esp8266 18篇
  • OTA 7篇
  • RT-thread 19篇
  • Python 3篇
  • 爬虫 1篇
  • 算法 1篇
  • 鸿蒙 1篇
  • 树莓派 17篇
  • VS上位机 3篇

最新评论

  • STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

    柒壹漆: 不知道,为什么这么执着于用dfu呢,我觉得这个不太好用,转来转去,不如直接bin文件传输

  • STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

    Li_Jie_LJ: 其他芯片的USB dfu有什么工具能用吗

  • STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

    柒壹漆: 看接口和协议,像串口或者USB cdc,那很多工具都能用

  • STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

    Li_Jie_LJ: 是这样的,那有和DfuSe Demo类似的软件来下载固件吗

  • STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

    柒壹漆: 那前提是这个芯片也支持DFU功能,或者你自己移植一个DFU进去咯

大家在看

  • 【C语言】扫雷小游戏

最新文章

  • STM32应用开发——BH1750光照传感器详解
  • STM32应用开发——使用PWM+DMA驱动WS2812
  • Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行
2024年5篇
2023年21篇
2022年23篇
2021年36篇
2020年12篇
2019年13篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源互联网公司起名参考成长的快乐作文600字cctv12直播在线观看高清直播小孩测试起名打分起名轩工商银行支行查询论语名句起名字女孩按字辈生辰八字起名免费网天字起公司名字绿色环保公司起名字大全免费童装店起名大全免费美国卡通电影2018年龙宝宝起名ccb网上银行玄学小说免费在线名字大全起名孙坚怎么死的一起来看流星雨学校名字创业公司起名原则栩起名男孩名字吗眼镜蛇的崛起下载时尚中黑简体四平青年1阮苏薄行止小说全文免费阅读在线起名网起名种子文件后缀2014属马女生起名我的眼泪压缩包格式开始菜单淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化