- 博客(165)
- 资源 (36)
- 收藏
- 关注
原创 无线方案不用愁!这颗32位MCU竟白送2.4G无线方案?
众所周知,沁恒在连接技术方向耕耘已久,坚持自研专业接口IP和微处理器内核IP,所以可以做到边际成本很低,这颗芯片可以理解为买MCU,白送USB和2.4G。我之前的项目用到CH573,RAM稍微有些紧张,这次新项目选择了CH583,USB用来连接电脑,蓝牙连接手机做一些参数配置。也难怪之前和一个物联网行业的老板聊天,他说不管他们实际的项目用不用的到无线功能,都统一选用沁恒的无线MCU了,一是为了统一平台,二是价格已经很低了,在成本压力不是那么大的情况下,没有必要再去选择普通MCU。,可轻松应用各种复杂应用。
2025-04-03 16:34:58
326
原创 串口发送函数到底要怎么写?
第一个串口写完字符串,可以马上往第二个串口写,如果等待第一个串口最后一个字符写完,会拉长时间。上一篇文章是关于串口接收Overrun的问题,今天接着说说串口,这次讨论的是串口发送函数写法的问题。这种写法相比上述5写法完成的功能一样,但是减少了字节之间的时间间隔,字节和字节之间不需要去判断TC,只需要判断TXE就可以做到字节间无间隔发送。如果调用完串口发送函数后,紧接着就有关闭串口或进入低功耗的动作,那么需要判断TC标志位,否则就可能会导致最后一字节数据没有正确发出去。写法1:先判断TXE,再写数据。
2024-09-26 10:15:59
347
原创 IO口电压下降那么多是怎么回事??
设置之后阻抗会超过10GΩ,这时测的电压就准确了,测得的电压相比3.3V也有下降,只是不会再下降那么多,这时再来估算一下漏电流,(3.3V-3.10V)/3.6M=56nA,这就符合实际了。真实的原因是万用表自身的内阻导致的,就算上拉电阻不接MCU的IO,直接用万用表测电压下面,测出来也是2.4几V,这也可以验证和IO输入漏电流无关。万用表在测量电压时,内部具有电阻,通常被称为输入阻抗。这个输入阻抗会影响测量结果,特别是在测量高阻值电路时,比如对上述电路就会产生很大影响,因为上拉电阻太大了,
2023-11-22 15:54:56
1285
2
原创 聊聊身边的嵌入式:用了七八年的电动牙刷,突然罢工了!!!
这款牙刷设计非常简洁,只有一个按钮,每按一次后,牙刷的工作状态变化一次,从快速,慢速,到时快时慢,还有一种像波浪一样的方式。最左边是充电线圈,中间红色的是主控板,右边是直流电机,电机通过传动装置,把旋转力量转变为传动杆的左右摆动,再带动刷头的摆动。由于牙刷柄比较长,便于手指操作的按钮,距离电路板上的按键比较远,手指的按压是通过一个金属连杆,传到电路板上的按键的。从结构设计上来说,可以看到机身设计的非常紧凑,装配上几乎没有看到螺丝,都是靠结构之间的咬合,而且拆解也很方便,这是一个非常非常值得学习的地方。
2023-10-11 11:36:24
246
原创 聊聊身边的嵌入式:点菜机用着好好的,突然挂了,这口锅应该甩给谁?
作为后起之秀的2.4G,因其频率高,可以更快的传输数据,适用于复杂的组网协议,如Zigbee等,功耗也相对较低。正好压在这个上面,每按压一次按键,电容就会挤压一次薄膜连线,一两年的时间后,接触不良了。电路比较简单,一个MCU,一个非易失存储器,一个液晶,一个无线模块,LDO,蜂鸣器。这款点菜宝,用的是4.2V锂离子电池。事情是这样底,当时小编正专心致志地做事,老婆扔过来一个点菜宝:”看看你们这些人,设计的什么破玩意儿“。存储器,华邦的25Q32,4MB的容量,看来一个小小的点菜宝,需要存储的内容还真不少。
2023-10-11 10:26:53
278
原创 嵌入式开发中自定义协议的解析与组包
在嵌入式产品开发中,经常会遇到两个设备之间的通信、设备与服务器的通信、设备和上位机的通信等,很多时候通信协议都是自定义的,所以就涉及到自定义协议的解析和组包问题。比如针对下面的这样一个协议:比如针对下面的这样一个协议:帧头1 帧头2 字段1 字段2 校验 固定值:0x55 固定值:0xAA 设备ID 电压值 前面所有数据异或值 char char short float char 1字节 1字节 2字
2021-10-04 07:27:41
3456
原创 聊聊身边的嵌入式,工控大脑PLC
哪里用到PLC? 大家逛商场、坐地铁经常会乘坐自动扶梯。通常情况下,没人乘梯的时候,扶梯会以一个低速节能方式运行。有人乘梯时,会自动平稳过渡到正常速度运行。我有个同学在世界第一大自动扶梯生产商迅达,听他说里面用的控制器就是PLC。 PLC广泛应用于钢铁、石油、化工、电力等工控领域,主要有以下原因: 高可靠性。工控领域环境相对较恶劣,同时还需要稳定可靠的长时间运行,不能出错,毕竟很多时候一旦出错,那可是会造成重大损失的,不像消费电子领域,出了问题大不了重启一下。 容易编程。对工..
2021-01-17 19:58:11
2108
原创 聊聊身边的嵌入式,一把大火如何导致了一个王朝的覆灭
1. 从一把大火说起明朝万历二十四年三月九日夜,北京紫禁城内的坤宁宫着了一把大火,大火蔓延到了乾清宫,皇上和皇后的住处被烧了个干净。很不幸,第二年,皇极殿,建极殿和中极殿也失火烧掉了。为了重修宫殿,万历皇帝不顾众多大臣的反对,开始加重税赋,并安排亲信宦官到全国各地督办。大明终于是经不起这番蹂躏,在万历死后的第二十四个年头土崩瓦解了。不敢相信,一把大火摧毁了一个朝代。沉睡在定陵的这位神宗皇帝如果地下有知,他一定非常想带着一套Fire Alarm System穿越回去吧。历史上的火灾还真是挺多的,不信看
2021-01-17 19:57:30
1426
2
原创 什么是RAC定位?
笔者因为工作原因,接触到一种叫做RAC的定位产品,该定位产品不同于一般的定位模组,它产品外表看起来很像一个GPS定位天线,通过一个4芯线缆(供电+串口通信)直接和其它MCU/CPU 相连接,输出定位信息。以下是该公司的两款终端产品:该产品牛逼的地方在于,它可以不依赖于任何差分站(地基或者星基),就可以实现优于1米的定位精度,带来的好处是:相比一般的普通定位模组,精度大幅度提高;相比RTK高精度定位,成本会大幅度下降(RTK本身模组价格高且需要付差分服务费用)。它是如何做到这一点的呢?它用了一
2020-12-30 17:42:07
2971
原创 单片机外围模块漫谈之五,USB开发,这个错误你犯了吗?
概述我们已经对USB硬件和数据的四种传输类型有了一个基本的了解。控制传输(Control Transfers)批量传输(Bulk Data Transfers)中断传输(Interrupt Data Transfers)同步传输(Isochronous Data Transfers):下面我们通过一个例子看一下USB的具体工作过程。在此我们用一个比较实用的例子,就是把我们的板子用USB连接至PC,然后在PC端出现一个模拟串口,通过串口助手打开这个串口,然后实现数据的双向传输。最后我们聊
2020-12-29 15:40:20
1415
原创 单片机外围模块漫谈之四,USB总线基本概念
USB概述USB设备现在是用的非常普遍的一种接口了,它即插即用的特性给人们带来了很大的方便。在嵌入式的应用中, USB经常被用来作为与上位机通信的接口,还用来通过U盘存储数据等。USB按通讯速度可分为低速,全速和高速设备。在我们的应用中,低速和全速是最为普遍的,在此我们对USB从物理层到协议层做一个简要的介绍。高速USB的原理是一样的,在理解了低速和全速设备的工作原理后再去理解高速设备就比较简单了,在此我们暂不讨论。低速(Low Speed, 1.5Mbps):键盘,鼠标,手写笔全速(Full S
2020-12-29 15:36:52
2381
原创 单片机外围模块漫谈之三,CAN总线
1980年,Bosch的工程师开始研究汽车上高速串行通信的问题,并在1986年发布了CAN(Controller Area Network)总线。CAN以其多主,高速(最高1Mbps),抗干扰的特性被广泛应用汽车及各种工业环境。在此我们主要介绍一下CAN总线的特点,帧类型,以及应用中的注意事项。CAN总线特点1.1 多主控制跟我们常用的RS485只有一个主机,从机只能等待主机的轮询不同,在CAN总线中,当任意一个节点监测到总线空闲时,就可以立即启动信息的发送,也就是每一个节点都可以当主机。当然,这
2020-12-29 15:32:30
2037
原创 单片机外围模块漫谈之二,如何提高ADC转换精度
在此我们简要总结一下ADC的各种指标如何理解,以及从硬件到软件都有哪些可以采用的手段来提高ADC的转换精度。1.ADC指标除了分辨率,速度,输入范围这些基本指标外,衡量一个ADC好坏通常会用到以下这些指标:失调误差,增益误差,微分非线性,积分非线性,信噪比,信纳比,有效位数,总谐波失真。让我们以下图为例来看一下这些指标的意义。LSB参数中经常用LSB作为单位,比如说差分非线性为2 LSB。这究竟是多大一个值呢?为了简单起见,我们以一个3bit分辨率,满量程为5V的ADC为例。1个LSB.
2020-12-29 15:30:36
2478
原创 单片机外围模块漫谈之一,图解说明什么是Flash, SAR, Sigma-Delta型ADC
模数转换模块ADC是连接现实世界模拟量和数字量之间的桥梁,它的转换精度经常可以决定一个产品的品质。现在单片机上一般都会集成ADC,我们如何根据自己的应用选择恰当的产品呢?怎么实现高的性价比,让产品在激烈的市场竞争中立于不败之地呢?下面我们从常用的几种ADC类型的特点,到使用中的注意事项,逐一探讨一下。ADC类型常用的ADC基本上可以分为三种类型: Flash型,SAR型,Sigma-Delta型。下面我们来了解一下它们的工作原理与性能特点。单片机中最常采用的是SAR型,在一些高精度场合会用到Sigm
2020-12-29 15:28:47
2922
原创 STM32F0单片机 PWM + ADC 控制有刷电机
有刷电机驱动电路有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。下面是两种 MOS 的典型用法.
2020-12-29 15:25:05
3142
原创 STM32F0单片机快速入门十: 用 SPI HAL 库读写W25Q128
W25Q128 介绍当我们有比较多的数据需要掉电存储时,上一篇文章所介绍的 24C02 (256个字节EEPROM)就不够了。此时我们会用到另外一种类型的存储器,即 Flash。比如具有 SPI 接口的 W25Q128。这颗小芯片虽然也只有简单的 8 个引脚,但存储容量却达到了128M-bit,也就是 16M 字节,同时它的读写速度可以达到 66MB/S。但是由于 STM32F030 不支持 Quad/Dual SPI,只能以标准 SPI 方式读写,所以速度会低一些。以下是 W25Q128 的主要特点:
2020-12-29 15:22:17
2225
原创 STM32F0单片机快速入门九: 用 I2C HAL 库读写24C02
24C02介绍24C02 现在基本是开发板的标配,对于需要掉电存储的应用来说确是不二选择。现在单片机因为内部集成了Flash存储器,一般也都支持数据的掉电保存,但相对于 24C02 这种 EEPROM 来说,使用单片机内部的 Flash 有一些需要注意的问题:Flash 写入数据之前需要先执行擦除操作,而且擦除以扇区为单位。 Flash读写次数比 EEPROM 少很多。 容易误操作,把 Flash 内部的代码擦除掉。 影响中断的响应时间。24C02 有 256 字节的数据,一般说来...
2020-07-18 21:48:56
2314
原创 STM32F0单片机快速入门八: Coolie DMA
苦力 DMA世上本没有路,走的人多了,便成了路。世上本没有 DMA,需要搬运的数据多了,便有了 DMA。大多数同学应该没有在项目中用过这个东西,因为一般情况下也真不需要这个东西。在早期的单片机中也不存在DMA模块。再加上很多谈 DMA 的文章,一上来就先来一个总线架构图,然后来一大堆让人生畏的词儿:共享总线,仲裁器,指针增量,对齐,中断 ... 好吧,每一个词都能吓跑一批胆小的。真的需要这么复杂吗?就好比我们学开车一样,能不能先别去尝试弄懂发动机的原理,直接挂档踩油门走起来呢?DMA是很简单的
2020-07-14 17:38:15
1381
原创 STM32F0单片机快速入门七: UART中断操作
1.从轮询到中断很多同学都不喜欢用中断,而偏爱用轮询的操作方式。这是不是和我们的天性有关呢?每个人都喜欢一切尽在掌握中,肯定都不喜欢被打断。我们常常都有这样的经验:正在跟别人说一件事,然后突然有个电话打进来,Call打完后突然记不起来刚才讲到哪了!这种糟糕的体验对我们影响是如此深刻,以至于我们认定机器可能也是这样吧,频繁的中断会不会把事情搞乱呢?好在机器虽然大部分时间都比人笨一些,但在处理这种问题上却能做到一丝不苟。机器在中断来的时候总会老老实实地先把当前正在做的记录下来,然后转去处理中断事件,中断
2020-07-14 17:35:33
2437
原创 STM32F0单片机快速入门六 用库操作串口(UART)原来如此简单
1.从 GPIO 到 UART前面几节我们讲了MCU如何启动,如何用翻转IO引脚,以及用按键去触发中断。接下来我们介绍的也是最常用的一个模块,串口(UART)。串口可以说是最古老,而且生命力最强的一种通信接口了。RS485总线更是久经考验。虽然串口早已经从大多数PC的标配中去掉了,但是嵌入式系统跟上位PC机通信用的最多的应该还是通过串口转USB吧。我们用 Keil 打开下面这个工程:STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Exa
2020-06-05 17:37:19
2397
原创 STM32F0单片机快速入门五: GPIO中断
按键如何触发中断我们从一个例程看一下,如何用一个GPIO引脚来触发中断,来控制另一个引脚的翻转去控制LED指示灯。我们用 Keil 打开下面这个工程:STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\GPIO\GPIO_EXTI\MDK-ARM\Project.uvprojx编译下载运行此代码,然后按压 B1 USER 这个按键,每一次按压会触发板上一个LED灯翻转一次。这个功能也很简单,但它牵涉到的东西却不少..
2020-05-25 13:12:03
2392
原创 STM32F0单片机快速入门四 翻转引脚
1.第一个工程 翻转引脚上一篇文章我们详细介绍了 STM32F030 从复位时取得复位向量,系统初始化,然后跳转到 main( ) 函数的过程。下面我们结合一个最简单的例子,对 Cube 库的使用做一个简单的介绍。我们用 Keil 打开下面这个工程:STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\GPIO\GPIO_IOToggle\MDK-ARM\Project.uvprojx编译下载运行此代码,会看到一个 LED灯
2020-05-25 12:37:41
4113
原创 GPS项目实战系列之:再谈一次GPS数据解析
上一篇已经写过GPS解析的话题,今天之所以又写一次,是因为又有了一些的新的内容想和大家分享。第一个要分享的是,来源于一位微信公众号网友的留言,在上一篇文章里,我采用的是用strtok函数进行字段分割,该网友建议试试sscanf,sscanf函数不知道大家平时有没有用过,它用来分割并处理一串数据比较方便。看个小例子,#include <math.h>#include...
2020-03-07 10:23:20
1600
原创 GPS项目实战系列之:解析GPS数据2
接着上一篇,咱们继续说GPS数据解析的问题,GPS数据解析的核心问题可以归结为如何解析以逗号作为分隔符的字符串问题。看似很简单的一个功能,真正实现起来也那不是那么容易,在调试的过程中,我就遇到了很多的小问题,在此做个完整的记录与总结,希望对大家有帮助。首先给大家介绍一下strtok函数,它是标准函数库中的一员,标准函数库是一个工具箱,它能极大地扩展C程序员的能力,我们需要熟悉并且灵活的应用。...
2020-03-03 16:28:54
1623
2
原创 GPS项目实战系列1:GPS数据解析1
前面写了一系列关于Linux的文章,从这一篇开始换个题目,叫做GPS项目实战系列,后面的很多篇内容都会围绕着这个项目展开。这个项目要完成的任务,可以参考之前的文章:https://topsemic.com/2186.html今天这篇文章的主题是GPS数据解析,关于GPS的基础知识,我在很早之前的一篇文章(https://topsemic.com/573.html)里有过介绍过,网上也有大量的内...
2020-02-29 20:35:51
2778
原创 嵌入式Linux系列第21篇:应用程序之开篇闲聊
该系列前面的20篇文章,主要以开发环境的搭建、常见外设模块的简单使用为主,从这篇开始计划写一下关于应用编程的话题,之所以要写这一块内容,是因为只要你做产品,就离不开应用程序,自然就需要应用编程相关的技术。有小伙伴咨询过我做Linux应用开发需要会哪些知识,先给大家看看猎聘网上最近两个关于嵌入式Linux工程师的招聘需求: 从我的实际工作经验来看,如果你掌握上述大部分要求并且...
2020-02-22 16:34:48
1095
1
原创 Linux学习系列二十:Linux驱动编写入门
1.引言很早之前就有网友建议写一篇关于Linux驱动的文章。之所以拖到现在才写,原因之一是我之前没有在工作中遇到需要自己手动去写驱动的需求,主要是现在Linux内核驱动的支持已经比较完善了,另外一个原因是自己水平实在有限,不敢写驱动这个话题,Linux驱动里涉及到的东西太多了,很多年前专门买过驱动相关的书籍,厚厚的,看的云里雾里。借此机会,在这里给大家做个非常非常入门级的介绍,希望对大家有...
2020-02-18 13:19:27
2008
原创 你的芯片,能抵挡住几次攻击?
1.你的芯片安全吗?如果大家看过速度与激情这部电影,一定对下面这一幕有深刻的印象:黑客通过远程控制上千辆的僵尸车辆,去自动拦截抢夺握有核发射密码的人! 然后掌控人类的命运。现实生活中可能没有电影里这么戏剧化,不过危机却在我们身边时刻不停地在上演。大品牌的电子产品被仿冒造成的损失是不可估量的。同时,将来随着物联网,自动驾驶等技术的普及,其核心芯片的安全问题越来越重要,一旦被破解,遭受...
2020-02-15 17:39:33
2395
2
原创 STM32F0单片机快速入门三 MCU启动过程
1.MCU 代码如何启动首先我们需要澄清一个问题,什么是 Startup Code,什么是 Bootloader?因为总看到有同学混用这两个概念。Bootloader 可以译为引导程序。早期的单片机是没有 Bootloader 这种概念的。如大家熟悉的 MCS51,最初芯片内是不能存储代码的,需要外挂EPROM,就是下面这种带个小玻璃窗的存储器。擦除 EPROM 中的代码需要用紫外线照射几...
2020-02-07 17:36:37
4570
1
原创 Linux学习系列十九:如何高效的阅读Linux源码
1.引言如何阅读代码还要单独写一篇文章?难道不是随便用一个IDE就可以了吗?回到上一篇文章里介绍的那个问题,需要修改uboot里board_mmc_init函数里的writel(0x66666666,REG_MFP_GPD_L) ,对于初学者如何在uboot代码里找到这句话呢?当时问我这个问题的网友就有这个困惑。因为Uboot和Kernel里有非常多数量的文件,另外为了支持多种芯片,在...
2020-02-04 16:18:20
2057
1
原创 STM32F0单片机快速入门二: 开发环境的建立
1.最小硬件系统让 STM32F030 运行起来非常简单,在硬件上仅需给数字电源和模拟电源引脚(VDD,VDDA)供电,最好分别加上去耦电容。推荐值: VDD引脚加 1个4.7uF并联几个0.1uF 电容,VDDA 引脚加 1个1uF并联 1个0.01uF电容。电容值大些小些,甚至不加,对调试都不会有太大影响。需要注意的是 VDD 需要在2.4V和3.6V之间,VDDA需要大于等于VDD。...
2020-01-30 17:47:12
2194
原创 嵌入式工程师跨界学习前后端系列5:完整的小例子
功能:1)通过udp给后台不断发送数据2)后端接收后前端实时显示参考:https://stackoverflow.com/questions/31663457/webpy-and-javascript-to-reload-contenthttps://www.zhihu.com/question/268384119/answer/988974518https://ww...
2020-01-29 09:23:54
1113
原创 STM32F0单片机快速入门一: ARM架构与STM32F0
STM32F0单片机快速入门一: ARM架构与STM32F01.ARM架构简单介绍市场上成百上千种的 ARM 芯片,如果我们去看它们的内核,却只有不多的几种。从时间上来看,从1985年设计的 26 位地址总线的 ARMv1, 到 ARMv2, 一直发展到最近支持64位地址总线的 ARMv8。最近这几年,在每一代 ARMvx 核心的基础上,...
2020-01-23 17:57:26
4532
原创 嵌入式工程师跨界学习前后端系列4:web.py 数据库环境搭建
win7(64位)安装Python27的MySQLdb包方法1.安装 Microsoft Visual C++ Compiler Package for Python 2.7http://www.microsoft.com/en-us/download/details.aspx?id=44266VCForPython27.msi2. 下载mysql,直接下载源码包就行https...
2020-01-19 10:02:56
983
原创 嵌入式工程师跨界学习前后端系列3:web.py模板
https://www.jianshu.com/p/7817641efe8d参考这个已经实现了模板,具体有什么用处还不清楚嗯。参考:https://github.com/webpy/webpy-examples/https://webpy.org/cookbook/index.zh-cnhttps://webpy.org/docs/0.3/tutorial.zh-...
2020-01-19 09:43:51
968
原创 嵌入式工程师跨界学习前后端系列2:搭建web.py环境
web.py是一个轻量级的web开发框架,作为初学者我先从这个学起来,目的是先感官的感受下web开发。https://webpy.org/ 这里是webpy的官方网站。web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain; y...
2020-01-19 09:35:56
1136
1
原创 嵌入式工程师跨界学习前后端系列1:访问一个网页
我是做嵌入式的,最近听了很多关于云平台的名词,比如PAAS,SAAS等,整的我一头雾水。于是准备学一下这方面的技术知识,不然出去又没法和人聊天了。计算机相关专业或者本身就是做前后端技术的童鞋可以忽略此文章了,我写的文章适用于前后端零基础的同学。 先简单说说什么是前端和后端,以我们每天使用的百度为例,你在浏览器输入www.baidu.com ,就显示了如下呈现在你眼前的...
2020-01-19 09:20:36
1222
原创 QT 系列博客:为什么要用QT?
在一个群里看到有如下对话,其中一个同学对QT很不以为然,我想这个同学一定是没有用过QT,所以才说出这种话。我2019年在工作中用过了QT,我觉得QT有如下优点:1)开源、免费2)跨平台,相信很多小伙伴知道c#,很多人用它开发windows下的小软件,但是它只能在微软系统用啊。用QT写的程序,只要换个编译工具,就可以直接运行到Linux系统、安卓平台,嵌入式系统中。3)简单,...
2020-01-10 19:50:52
2481
原创 单片机(MCU)如何才能不死机之对齐访问(Aligned Access)
从一个结构体说起。如下,在 STM32F0 的程序中,我们定义了一个结构体My_Struct ,那么这个结构体占用多少内存呢?struct Struct_Def {uint8_t Var_B;uint16_t Var_W0;uint16_t Var_W1;uint32_t Var_DW;};struct Struct_Def My_Struct;int main(...
2020-01-02 07:32:06
1743
TWR-K60D100M_Quick_Start_Demo_Lab_Guide.pdf
2014-12-09
GPSProj-imx8M.zip
2020-03-03
Linux学习系列十九:如何高效的阅读Linux源码.pdf
2020-02-04
Processor Expert生成KE02的MQX-Lite Keil工程
2015-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人