news 2026/10/7 1:30:56

RS232电平标准详解:从底层逻辑到工业调试实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RS232电平标准详解:从底层逻辑到工业调试实战

1. 串口通信的底层逻辑:为什么RS232至今还没被淘汰

1.1 从一次现场调试的尴尬说起

前两年我去一个做工业称重设备的客户现场处理问题,他们的称重仪表通过一根DB9线缆连到工控机,工控机上的采集软件突然收不到数据了。现场工程师换了三根线、重装了两遍驱动、甚至把工控机都换了一台,问题依旧。我到现场之后,拿万用表量了一下TX和GND之间的电压,静态时是-9V左右,发送数据时电压在正负之间摆动——这说明仪表侧发送是正常的。再量工控机侧,发现接收端的电压几乎贴着0V不动。问题最后定位在工控机主板上的串口芯片,被前一天的雷击浪涌打坏了。整个过程从到场到定位不到二十分钟,靠的就是对RS232电平标准的熟悉。

这件事让我意识到,很多人用串口用了很多年,但从来没有真正搞清楚RS232的电平定义。一旦通信出问题,第一反应就是“驱动不对”或者“线序不对”,而忽略了最底层的物理层——电压本身。RS232之所以在USB、以太网、蓝牙满天飞的今天依然活得很好,恰恰是因为它的电气特性足够“皮实”:正负十几伏的摆幅,在工业现场的电磁干扰环境下,比那些3.3V、5V的单端电平要抗造得多。你去看工厂里的PLC、变频器、伺服驱动器、条码枪、电子秤,几乎清一色保留着RS232或者RS485接口,这不是没有道理的。

这篇文章我打算把RS232的电平标准从根上讲透,包括它的电压定义、噪声容限、接口引脚、和TTL/CMOS电平的转换、和RS485/RS422的区别,以及在实际布线和调试中那些文档里不会写的坑。适合刚入行的硬件工程师、嵌入式软件工程师,也适合那些天天跟串口打交道但没系统学过物理层的朋友。

1.2 RS232到底规定了什么

很多人以为RS232就是一个“接口标准”,其实它是一份相当完整的规范,全称是“EIA/TIA-232-F”,由美国电子工业协会制定。它规定了三件事:第一,电气特性,也就是用什么电压表示逻辑0和逻辑1;第二,机械特性,也就是连接器的形状和引脚定义;第三,功能特性,也就是每根信号线是干什么用的。我们平时说的“RS232电平标准”,主要指的是第一件事——电气特性。

这里有一个非常关键的概念:RS232是负逻辑。也就是说,它用负电压表示逻辑1,用正电压表示逻辑0。这跟我们在单片机里习惯的“高电平是1、低电平是0”正好相反。为什么这么设计?历史原因是为了在早期的电报和电传打字机设备上,用负电压表示“空闲”状态,这样线路断开时(电压为0)会被识别为异常,而不是误判为持续的逻辑1。这个设计思路一直延续到今天。

具体电压范围是这样的:对于发送端(驱动器),逻辑1对应-5V到-15V,逻辑0对应+5V到+15V;对于接收端(接收器),逻辑1识别为-3V到-15V,逻辑0识别为+3V到+15V。注意发送端和接收端的门限是不一样的,中间-3V到+3V这一段是“死区”,也就是不确定区域。这个设计叫做噪声容限,发送端保证至少输出±5V,接收端只需要识别±3V,中间留了2V的余量来抵抗线路上的干扰和压降。这个余量在工业现场非常关键,因为长距离传输时线缆电阻会导致电压衰减,如果发送端只输出±3V,接收端可能就识别不出来了。

注意:很多人用万用表量RS232信号时,看到静态时TX是-9V左右,就以为“没有信号”。实际上-9V正是逻辑1,也就是空闲状态(idle),这是正常的。只有当电压跳到+9V左右时,才表示正在发送逻辑0(起始位)。

1.3 为什么是±12V而不是±5V

这个问题我被问过很多次。答案其实很朴素:因为早期的RS232设备用的是±12V的电源系统,而且长距离传输需要足够的电压摆幅来克服线缆压降和噪声。RS232标准规定的最大传输距离是15米(约50英尺),在这个距离上,如果只用±5V,线缆电阻和分布电容会把信号衰减得很难识别。用±12V的话,即使衰减到±5V,接收端依然能可靠识别。

当然,实际应用中很多人用RS232跑几十米甚至上百米也能通,但这是“超规格使用”,能不能通取决于线缆质量、波特率和环境噪声。我见过用屏蔽双绞线跑115200波特率、距离30米稳定通信的案例,也见过用普通排线跑9600波特率、距离5米就误码率飙升的情况。所以如果你要超距离使用,一定要用好的屏蔽线,并且降低波特率。

另外补充一点,现在很多芯片(比如MAX3232)内部用的是电荷泵升压,只需要3.3V或5V供电就能产生±10V左右的RS232电平。这类芯片的好处是单电源供电,外围只需要几个电容,非常方便。但它的驱动能力比传统的±12V方案要弱一些,带负载能力有限,长距离传输时要注意。

2. 电平标准的细节拆解:从TTL到RS232的完整链路

2.1 TTL电平和RS232电平的本质区别

在讲转换之前,先把TTL/CMOS电平和RS232电平的区别说清楚。TTL电平是单片机、FPGA、ARM这些数字芯片的IO口电平,通常是0V表示逻辑0,3.3V或5V表示逻辑1,是正逻辑、单端、低压。RS232电平是负逻辑、单端、高压。这两者之间不能直接连接,必须经过电平转换芯片。

为什么不能直接连?第一,电压不匹配。单片机的IO口耐压通常是-0.3V到VCC+0.3V,如果你把RS232的-12V直接接到单片机引脚上,瞬间就会烧掉IO口。第二,逻辑极性相反。TTL的高电平是逻辑1,RS232的负电压才是逻辑1,直接连的话数据会全部取反。第三,驱动能力不匹配。单片机IO口的驱动电流通常只有几毫安到十几毫安,而RS232标准要求驱动器能驱动2500pF的容性负载,需要专门的驱动芯片。

所以电平转换芯片是必须的。常见的芯片有MAX232、MAX3232、SP3232、ADM3202等。MAX232是5V供电的老牌芯片,MAX3232是3.3V供电的升级版,引脚兼容。这类芯片内部集成了电荷泵,能把单电源升压成±10V左右,同时完成逻辑极性的转换。

2.2 电荷泵的工作原理:怎么从5V变出±10V

电荷泵是MAX232这类芯片的核心。它的原理其实不复杂,用两个电容和一组开关就能实现。第一个阶段叫“充电阶段”:开关把电容C1跨接在VCC和GND之间,C1被充电到VCC(比如5V)。第二个阶段叫“转移阶段”:开关切换,把C1的负极接到VCC,正极悬空,这样C1正极的电压就变成了VCC加上C1两端的电压,也就是2倍VCC(10V)。这就是倍压。如果要产生负电压,就把C1的正极接到GND,负极作为输出,这样输出就是-VCC(-5V)。实际芯片里会用两组电荷泵,一组产生正高压,一组产生负高压,再通过稳压和滤波得到稳定的±10V左右。

这个原理决定了电荷泵的输出电流能力有限,通常只有几毫安到十几毫安。所以MAX232这类芯片适合点对点的短距离通信,不适合驱动长线缆或者多个负载。如果你需要更强的驱动能力,可以考虑用传统的±12V电源方案,或者用专门的RS232驱动芯片(比如MC1488/1489组合,不过这两款现在不太常用了)。

实操心得:MAX3232的外围电容建议用0.1uF的陶瓷电容,不要用0.1uF的电解电容。陶瓷电容的等效串联电阻(ESR)更低,电荷泵的效率更高。我试过用钽电容,效果也不错,但成本比陶瓷电容高。另外,电容要尽量靠近芯片引脚,走线要短,否则电荷泵的开关噪声会耦合到信号线上。

2.3 接收端为什么需要迟滞

RS232接收器的输入门限是±3V,但实际芯片内部通常会设计一个迟滞窗口(hysteresis),比如从-3V到+3V之间有一个几十毫伏到几百毫伏的迟滞带。这个迟滞的作用是防止输入信号在门限附近抖动时,输出产生多次翻转。比如输入信号缓慢上升,从-3V升到+3V的过程中,如果没有迟滞,输出会在门限附近反复跳变,导致误码。有了迟滞之后,输入必须超过+3V才能确认逻辑0,必须低于-3V才能确认逻辑1,中间的区域保持上一个状态不变。

这个特性在长线缆、高噪声环境下非常重要。我遇到过一种情况:线缆屏蔽层没接地,导致共模噪声很大,接收端的信号在门限附近抖动,数据误码率很高。后来把屏蔽层可靠接地,噪声被旁路掉,信号干净了,误码就消失了。所以如果你遇到“时通时不通”的问题,先检查屏蔽层和地线。

3. 接口引脚定义与典型连接方式

3.1 DB9和DB25的引脚定义

RS232的机械接口最常见的是DB9(9针)和DB25(25针)。DB25是早期标准,现在基本被DB9取代了。DB9的引脚定义如下:

引脚名称方向功能
1DCD输入载波检测
2RXD输入接收数据
3TXD输出发送数据
4DTR输出数据终端就绪
5GND-信号地
6DSR输入数据设备就绪
7RTS输出请求发送
8CTS输入清除发送
9RI输入振铃指示

对于最简单的三线制通信(也就是我们平时最常用的方式),只需要接2(RXD)、3(TXD)、5(GND)三根线。注意这里的“输入”和“输出”是相对于DTE设备(比如电脑、工控机)而言的。DCE设备(比如调制解调器、称重仪表)的2和3是反过来的。

这就引出了一个非常经典的坑:直连线和交叉线。如果你把两个DTE设备(比如两台电脑)直接连起来,需要交叉线,也就是一端的2接另一端的3,一端的3接另一端的2。如果你把DTE和DCE连起来,用直连线,2接2、3接3。很多人搞不清楚什么时候用交叉线、什么时候用直连线,其实记住一句话就行:同类型设备用交叉线,不同类型设备用直连线。

3.2 硬件流控引脚的接法

RTS/CTS和DTR/DSR是硬件流控引脚。RTS是DTE告诉DCE“我准备好发送了”,CTS是DCE告诉DTE“我准备好接收了”。DTR是DTE告诉DCE“我上线了”,DSR是DCE告诉DTE“我也上线了”。在早期的调制解调器通信中,这些引脚用来协调双方的收发节奏,防止缓冲区溢出。

现在很多应用不需要硬件流控,但有些软件会检查这些引脚的状态,如果发现DTR或DSR没有置位,就拒绝通信。我遇到过一种情况:一个老旧的采集软件,必须把DTR和DSR短接、RTS和CTS短接,才能正常打开串口。这就是所谓的“环回”接法,用来欺骗软件,让它以为对端已经就绪。如果你遇到“串口打开失败”或者“软件一直显示设备未连接”的问题,可以试试这种接法。

注意:有些USB转串口芯片(比如CH340、CP2102、FT232)对硬件流控引脚的支持不完整,或者驱动里默认关闭了流控。如果你用的软件依赖硬件流控,建议用FT232芯片的转换器,它的兼容性最好。CH340便宜,但在一些工业软件上会有兼容性问题。

3.3 从原理图看典型连接

一个典型的RS232通信原理图是这样的:单片机或FPGA的UART_TX接到电平转换芯片的T1IN,UART_RX接到R1OUT,电平转换芯片的T1OUT接到DB9的3脚(TXD),R1IN接到DB9的2脚(RXD),GND接到5脚。如果需要流控,再把RTS、CTS、DTR、DSR对应接上。电平转换芯片的VCC和GND之间接0.1uF去耦电容,电荷泵电容按数据手册推荐值接。

这里有一个细节:电平转换芯片的T1OUT和R1IN之间,有时候会加TVS管或者压敏电阻来做浪涌保护。工业现场雷击浪涌很常见,没有保护的话,芯片很容易被打坏。我见过一个客户,他们的设备在雷雨天经常坏串口芯片,后来在DB9接口处加了TVS管,问题就解决了。TVS管的选择要注意结电容,结电容太大会影响高速通信的边沿,一般选几十皮法以内的。

4. RS232与RS485/RS422的对比与选型

4.1 三种标准的电气特性对比

RS232、RS485、RS422经常被放在一起讨论,但它们的电气特性差别很大。RS232是单端、全双工、点对点;RS485是差分、半双工、多点总线;RS422是差分、全双工、点对多点。下面这张表把关键参数列出来:

参数RS232RS485RS422
信号方式单端差分差分
逻辑电平±3V到±15V±200mV到±6V±200mV到±6V
传输距离15米1200米1200米
最高速率20kbps(标准)10Mbps(短距)10Mbps(短距)
拓扑结构点对点多点总线点对多点
双工方式全双工半双工全双工
抗干扰能力弱强强

从表里可以看出,RS232的优势在于简单、通用、全双工,劣势在于距离短、抗干扰弱、只能点对点。RS485的优势在于距离长、抗干扰强、支持多点,劣势在于半双工(需要方向控制)、协议复杂一些。RS422可以看作是RS485的全双工版本,但只能有一个主机、多个从机。

4.2 差分信号为什么抗干扰强

RS485和RS422用的是差分信号,也就是用两根线(A和B)传输一个信号,接收端取两根线的电压差。干扰噪声通常是共模的,也就是同时耦合到两根线上,做差之后就被抵消掉了。这就是差分信号抗干扰强的根本原因。

RS232是单端信号,只用一根线传输,参考地是GND。如果线缆周围有电磁干扰,干扰会直接叠加到信号线上,接收端无法区分是信号还是噪声。而且如果两个设备的地电位不一致(地环路),地线上的电流会产生压降,导致接收端的参考地偏移,严重时信号会完全识别不出来。这就是为什么RS232不适合长距离传输,也是为什么在工业现场,如果两个设备距离较远,通常会用RS485而不是RS232。

4.3 什么时候该选RS232,什么时候该选RS485

选型其实很简单:如果是短距离(15米以内)、点对点、全双工、不需要组网的场景,用RS232。比如电脑连调试串口、工控机连扫码枪、单片机连上位机。如果是长距离(几十米到上千米)、多点组网、半双工就够用的场景,用RS485。比如工厂里的PLC连多个变频器、电表、传感器。

有一种情况需要注意:有些设备同时支持RS232和RS485,通过跳线或者软件切换。这种设备通常用的是同一个UART控制器,只是外部的收发器不同。如果你用RS485模式,记得在软件里控制方向引脚(DE/RE),否则收发会冲突。我见过一个项目,工程师忘了控制方向引脚,结果设备只能收不能发,查了半天才发现是方向引脚一直拉低。

实操心得:如果你用USB转RS485转换器,注意有些便宜的转换器不支持自动方向控制,需要软件手动切换。FT232+MAX485的方案通常支持自动方向控制,用起来省心。另外,RS485总线两端要接120欧姆的终端电阻,中间节点不要接。终端电阻的作用是匹配线缆特性阻抗,消除反射。如果线缆很短(几米),不接终端电阻也能通,但长距离一定要接。

5. 实操调试与常见问题排查

5.1 用万用表和示波器快速定位物理层问题

调试RS232通信,第一步永远是确认物理层。万用表可以量静态电压:TX在空闲时应该是-5V到-15V,RX如果对端在发送,也应该在正负之间摆动。如果TX一直是0V,说明驱动器没工作或者芯片坏了。如果TX一直是-12V不动,说明没有数据发送,问题可能在软件层。

示波器可以看波形:正常的RS232波形应该是干净的方波,上升沿和下降沿比较陡峭。如果波形上升沿很缓,可能是线缆电容太大或者驱动器能力不足。如果波形上有明显的振铃或者过冲,可能是线缆太长没有终端匹配。如果波形上叠加了高频噪声,可能是屏蔽没做好或者地环路。

我个人的习惯是:先用万用表量静态电压,确认驱动器工作正常;再用示波器看发送波形,确认数据确实在发送;最后用串口调试助手看接收数据,确认波特率、数据位、停止位、校验位设置正确。这三步走下来,90%的问题都能定位。

5.2 常见问题速查表

现象可能原因排查方法
完全收不到数据TX/RX接反交换2和3脚
收到乱码波特率不匹配确认双方波特率一致
收到部分数据数据位/停止位不匹配确认双方帧格式一致
时通时不通接触不良或干扰检查接头、屏蔽层接地
通信距离短线缆质量差或波特率太高换屏蔽线、降低波特率
芯片发热短路或接错电压检查接线、量电源电压
软件打不开串口流控引脚未置位短接DTR-DSR、RTS-CTS
发送正常接收异常接收端芯片损坏量接收端电压、换芯片

5.3 几个我踩过的坑

第一个坑:用USB转RS232转换器时,不同芯片的驱动兼容性差别很大。FT232最稳定,但价格贵;CH340便宜,但在一些老旧的工业软件上会出现“串口被占用”或者“打开失败”的问题;CP2102居中。如果你做工业项目,建议用FT232的方案,省心。

第二个坑:RS232线缆的长度和波特率是相互制约的。标准规定15米@20kbps,如果你要跑115200bps,距离最好控制在3米以内。我试过用5米的屏蔽线跑115200bps,偶尔会误码;换成2米的线就完全稳定。所以如果你需要高速率,尽量缩短线缆。

第三个坑:有些设备的RS232接口是“假”的,也就是内部其实是用TTL电平直接引出来的,没有经过电平转换。这种接口如果直接连标准的RS232设备,要么不通,要么烧芯片。判断方法很简单:量一下TX的静态电压,如果是0V或者3.3V,那就是TTL电平;如果是-5V到-15V,才是真正的RS232。

第四个坑:在多台设备共地的系统中,如果两台设备的地电位差超过±15V,RS232接收器可能会损坏。这种情况下,要么用隔离型RS232转换器,要么改用RS485。隔离型转换器内部有光耦或者磁耦,能承受几千伏的地电位差,在工业现场很实用。

5.4 关于“从总线仲裁机制看RS232属于什么总线”的补充

有人问过这个问题,这里顺便说一下。RS232是点对点、全双工的,它没有总线仲裁机制,因为它根本不支持多点连接。所谓“总线仲裁”是RS485或者CAN总线这种多点总线才需要的机制,用来解决多个节点同时发送时的冲突问题。RS232的拓扑决定了它不存在冲突,所以也不需要仲裁。如果你看到有人把RS232称为“总线”,那是一种不严谨的说法,严格来说它只是一种“接口标准”。

6. 电平转换芯片选型与电路设计要点

6.1 主流芯片对比

芯片供电通道数最高速率特点
MAX2325V2收2发120kbps经典、便宜、外围电容大
MAX32323.3V/5V2收2发250kbps低功耗、电容小
SP32323.3V/5V2收2发250kbps兼容MAX3232
ADM32023.3V2收2发460kbps高速、低功耗
MAX32213.3V1收1发250kbps单通道、带自动关机

选型主要看三点:供电电压、通道数、速率。如果单片机是3.3V,选MAX3232或SP3232;如果是5V,MAX232也行,但电容要用1uF的。如果需要高速率(比如1Mbps),选ADM3202或者更高速的型号。如果只需要一路串口,MAX3221更省空间。

6.2 外围电容的选择

MAX232的外围电容推荐值是1uF,MAX3232推荐值是0.1uF。这个电容的材质建议用陶瓷(X7R或X5R),不要用铝电解。陶瓷电容的ESR低,电荷泵效率高,而且体积小。如果用电解电容,电荷泵的输出电压会偏低,可能导致通信不稳定。

另外,VCC引脚一定要加0.1uF的去耦电容,尽量靠近芯片。这个电容的作用是滤除电源噪声,防止电荷泵的开关噪声串到电源上,影响其他电路。我见过一个设计,去耦电容离芯片太远,结果串口通信时好时坏,后来把电容挪到芯片旁边就好了。

6.3 保护电路的设计

工业现场的RS232接口一定要加保护。最基本的保护是TVS管,接在TX、RX对GND之间。TVS管的击穿电压要略高于RS232的最高电压(±15V),比如选18V或24V的。结电容要小,否则会影响高速通信。如果需要更高的保护等级,可以加气体放电管或者隔离芯片。

还有一种保护是串联电阻,在TX和RX线上各串一个几十欧姆的电阻,限制浪涌电流。这个电阻和TVS管配合使用,效果更好。但串联电阻会引入压降,如果线缆很长,接收端的电压可能不够,所以要权衡。

注意:如果你做的是消费类产品,可能不需要这么复杂的保护。但如果是工业产品,尤其是户外或者雷区使用的设备,保护电路是必须的。我见过太多因为省了几毛钱的TVS管,导致整块板子被打坏的案例。

7. 从RS232到现代接口的演进思考

RS232诞生于1960年代,到现在已经六十多年了。它之所以没有被淘汰,是因为它的设计足够简单、足够可靠、足够通用。USB虽然速度快、供电方便,但协议栈复杂,需要驱动,而且在工业现场的电磁兼容性不如RS232。以太网虽然组网方便,但需要网络配置,成本也高。RS232就像一把老式的机械扳手,虽然不如电动工具花哨,但在很多场合下,它是最直接、最可靠的解决方案。

我个人的判断是,RS232在工业控制、仪器仪表、医疗设备这些领域还会继续存在很多年。因为对于这些应用来说,可靠性比速度重要,简单比功能丰富重要。你不需要为了传几个字节的数据,去搞一套TCP/IP协议栈。一根三芯线,一个电平转换芯片,就能搞定的事情,没必要复杂化。

当然,RS232也在演进。现在很多芯片把RS232收发器和UART、甚至和MCU集成在一起,体积越来越小,功耗越来越低。有些芯片还集成了隔离功能,把光耦和收发器做在一起,进一步简化了设计。这些演进让RS232在保持电气特性不变的前提下,变得更易用、更可靠。

最后分享一个小技巧:如果你手头没有RS232电平转换芯片,但又需要临时调试一下,可以用一个三极管加几个电阻搭一个简易的转换电路。虽然不如专用芯片稳定,但应急足够用了。具体电路网上有很多,核心思路就是用三极管做电平移位和反相。不过这只适合临时调试,正式产品还是老老实实用专用芯片。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 1:30:55

电流镜设计不再难:镜像与比例电流源原理、优化与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 1:30:32

背包问题本质解析:从DP原理到工程落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 1:30:28

电蚊拍四倍压电路原理与高压电源设计解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 1:30:22

ESP32 WiFi配置免重烧:NVS存储与Web配置页实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 1:30:17

YOLOv5生猪检测数据集:密集场景训练与调参实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 1:29:41

ADC0809底层原理:解构模数转换的六大物理铁律

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华