news 2026/9/30 1:30:25

EtherCAT从站硬件控制器设计实战:STM32+LAN9252方案与调试指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
EtherCAT从站硬件控制器设计实战:STM32+LAN9252方案与调试指南

搞工控的朋友应该都有同感:EtherCAT主从站硬件结构,这几年在运动控制领域越来越绕不开。不管是单轴伺服还是几十轴同步控制,硬件设计阶段的取舍,直接决定了整套系统现场稳不稳。很多第一次接触EtherCAT的工程师,拿到资料先看协议,但真正画板子时才发现坑最多的地方反而是硬件结构。这篇文章不打算从OSI模型开始讲,就基于我做从站控制器和主站搭建的实战过程,把主从站硬件结构拆开,重点聊从站硬件控制器的详细设计,包括ESC芯片选型、外围电路、STM32+LAN9252的实操方案,以及现场调试中常见的坑。适合正在画从站板子、或者准备把主站方案产品化的工程师参考。

1. EtherCAT主从站硬件结构整体认知

EtherCAT本质上是实时以太网协议,但和普通以太网最大的区别在于“转发即处理”。从站里的ESC芯片直接在帧经过时提取和插入数据,而不是把整个帧收进内存再交给MCU解析,所以链路转发延迟只有几百纳秒。这个特性决定了EtherCAT在高速运动控制里的地位,也决定了我们设计硬件时的思路和普通以太网设备完全不同。下面把主站和从站两边的硬件结构分开说清楚。

1.1 主站硬件结构:三种主流方案对比

主站的核心职责只有一个:按时把过程数据帧发出去,同时回收所有从站的输入数据。硬件方案直接决定开发工时和最终性能,我的经验是先从PC加网卡加协议栈开始,调通逻辑以后再考虑嵌入式化。

方案一,PC机加普通以太网卡。这是最普及的方案,TwinCAT的原型调试、SOEM、IgH在Linux上都是跑标准网卡。优点是开发效率极高,不需要专门主站硬件,顺手就能用Wireshark抓包;缺点是标准PC网卡的帧发送抖动偏大,特别是在Windows下,几十到几百微秒都很正常,在要求250微秒同步周期的伺服系统里基本不可用。如果只做IO采集或者低速传感器,这个方案完全可以接受。

方案二,嵌入式平台加MAC控制器。典型的是STM32H7、i.MX、AM335x这类带以太网MAC的芯片,跑RTOS加协议栈,或者用Zynq这样的平台。因为网络定时器和中断都在本地控制,抖动明显低于PC,可以做到20到50微秒。这个方案适合产品化中小规模主站,但开发量比PC方案大不少,要自己处理以太网驱动和协议栈的集成,排查问题的难度也会上一个台阶。

方案三,专用ASIC或FPGA。这是高端运动控制器常用的方案,把EtherCAT链路控制全部硬件化,抖动可以压到微秒级以下,还能支持冗余、多网段,但硬件成本和开发难度都不是一般项目能承受的。实际项目里,绝大多数人不会走到这一步。

我做项目时会先列一张对比表,选型逻辑一目了然:

主站方案典型抖动开发成本推荐场景
PC+普通网卡50μs以上低验证、调试、IO类应用
嵌入式MAC+RTOS10~50μs中产品化主站、中小轴数
专用ASIC/FPGA低于5μs高多轴同步、高端运动控制

这里有一个常见误区:很多工程师选型只盯着“能不能跑通”,忽略了抖动。EtherCAT标称100Mbps,带宽永远是够的,真正的瓶颈是主站发送周期的时序一致性。轴数越多、周期越短,这个影响就越明显。我在做24轴伺服同步时,换主站平台前后性能差别非常直观,所以主站硬件结构一定不能拍脑袋决定。

1.2 从站硬件结构:ESC是绝对核心

从站硬件结构和主站完全不对称。普通以太网设备的MCU要做协议栈解析,而从站的协议处理由ESC硬件完成,MCU只做应用层逻辑。这个分工决定了EtherCAT从站可以做得便宜又可靠,也决定了画板子时的重心要围着ESC转。

一个完整从站节点的硬件模块包括这几部分:

  • ESC芯片,比如LAN9252、ET1100、ET1200,负责帧解析、FMMU映射、同步管理器、时钟同步;
  • MCU,比如STM32F407或者GD32,跑应用逻辑和PDO处理;
  • PHY芯片,把ESC出来的MII或RMII信号转成差分网线信号;
  • EEPROM,保存SII数据,包括从站名称、同步参数、PDO映射;
  • 网络变压器、RJ45、共模电感和防护电路;
  • 电源电路,把24V工业电源转换为芯片需要的3.3V、1.2V等。

从通信链路看,一帧EtherCAT数据进入从站的PHY,经过网络变压器到达ESC,ESC把属于自己的数据拷贝到内部寄存器并向MCU发中断,同时把后续数据往下个从站转发。整个过程由ESC硬件自动完成,MCU甚至感觉不到通信在发生。这也是为什么从站实时性和MCU主频关系不大,只要保证在通信周期内完成数据交换即可。

2. 从站硬件控制器的核心设计

很多小伙伴觉得从站硬件控制器就是MCU加一个网络口,这个认识会害死人。从站控制器的本质是ESC及其外围电路,MCU反而是配角。把ESC周边设计好,整套从站就成功了一大半。

2.1 ESC芯片选型:不能只看价格

ESC选型直接决定从站能支持的数据规模、接口方式以及成本。三款主流芯片我都有实际项目经验:Bechoff官方方案ET1100,Microchip的LAN9252,还有小型化的ET1200。

ET1100是最经典的中大型从站ESC,支持32位并行接口,也可以配8位或16位微控制器,PDO数据量可以做很大。缺点是芯片封装大、外围电路多、成本高。适合网关、协议转换器、高密度IO设备这类需要大缓存和高吞吐的场景。如果你做的是工业网关,从站端数据量很大,ET1100更稳妥。

LAN9252是这两年用得最多的方案,片内集成了EtherCAT从站控制器和两个PHY,MCU走SPI接口访问ESC寄存器。正因为集成度高、BOM少,很多伺服驱动器、变频器、IO模组都采用LAN9252方案。LAN9252还有一个优势是SPI从模式接口,几乎所有MCU都天然支持,不用并行总线,STM32F103都能轻松驱动。

ET1200规格和ET1100同源但更小型化,并行接口只有4位或8位宽,适合小型IO设备,成本更低。

选型经验我总结成一张表,方便对照:

芯片接口方式集成PHY适合场景
LAN9252SPI集成2个伺服、变频、IO模组
ET1100并行/SPI无网关、大数据量从站
ET12004/8位并行无小型IO从站

选型时先明确过程数据规模。伺服从站一般PDO几百字节,LAN9252绰绰有余;如果从站产品要做报文诊断、数据记录,寄存器规模上来以后,还是老实选ET1100。这里有一个新手常忽略的点:LAN9252虽然集成PHY,但在工业现场,为了抗干扰和散热,很多人会外接PHY而不是用内部PHY,画图时要对这两种拓扑都心里有数。

2.2 从站外围电路与接口设计

ESC选完,外围电路就是硬件成败的关键。我按LAN9252方案来说,把容易踩坑的几个点列清楚。

第一个是时钟。LAN9252需要外接25MHz晶振,片内也有PLL。晶振品质直接影响PHY信号质量,我遇到过用劣质晶振导致链路频繁断开的案例,后来换成有源晶振或者大厂无源晶振就正常了。晶振两个负载电容要按数据手册取值,一般在12到22pF之间,不要想当然。

第二个是SPI接口。LAN9252作为SPI从机,和MCU主机的连接要重点看时序。LAN9252的SPI时钟最高可以到20MHz,但实际布线长了以后速率要降下来,否则偶发通信错误会让人查一整天。SPI模式有两个要点:一是片选CS时序,必须保证每次访问都是完整的读写周期;二是IRQ中断线,MCU要利用这个中断做周期同步,建议接独立中断输入IO,不要和别的设备共用。

第三是PHY接口。如果使用LAN9252内部PHY,特别注意它对外是Ethernet信号,网络变压器中心抽头和共模电感不能省,不然EMC测试很难过。如果外接PHY,ESC一侧用MII接口,信号数量多但抗干扰好,各信号线尽量区分等长,长度控制在50毫米内。RMII信号少一半,但需要独立的50MHz参考时钟,时钟质量做不好的话容易引干扰。

第四是网口防护。有次从站板子发到现场后,靠近电机电缆的那个RJ45总是受干扰。后来在网口前加了共模电感,网络变压器中心抽头做好端接电容,情况改善非常明显。网线上的浪涌和ESD防护不能省,TVS管要选好压敏电压,选大了起不到保护作用,选小了会影响信号质量。

第五是电源。ESC内核一般1.2V,IO是3.3V,PHY也有模拟电源要求,三者要分开滤波。模拟电源AVDD和数字电源之间用磁珠隔离,地平面尽量一刀切出模拟地和数字地。LAN9252的数据手册对电源有明确要求,建议严格按照参考设计来画,不要觉得多加一个磁珠是浪费。

2.3 MCU与ESC的接口方式选择

MCU和ESC的接口决定了代码复杂度和数据吞吐。ET1100支持并行总线,适合ARM9或带外部总线接口的MCU;LAN9252走SPI,几乎任何MCU都能对接。

SPI接口好用的地方在于不需要外部总线、占用IO少、时序可以用DMA加速。用STM32做LAN9252主控时,我通常把SPI配置成Mode 0或Mode 3,速率先设置10MHz,稳定以后再往上拉。数据交换用DMA双缓冲,一次过程数据读写在10微秒内完成,对1毫秒的通信周期完全没有压力。

还要注意一个细节:MCU访问ESC寄存器时,LAN9252提供了直接地址模式和页面地址模式两种SPI寻址方式。寄存器多的场景要用页面方式,初始化时要正确配置。这个字段错了的话,读回来的寄存器值全是乱的,而且很难排查。

3. 基于STM32与LAN9252的从站硬件实操

理论讲再多,不如一套能跑的硬件方案来得直接。这里我把自己踩过的硬件设计流程完整交代一遍,照着做不敢说一次成功,但至少能少走一半弯路。

3.1 硬件平台搭建与关键器件选择

如果要从零做从站硬件,最稳妥的起步组合是STM32F407加LAN9252。我列一份自己实际用过的BOM参考:

  • MCU:STM32F407VET6,主频168MHz,带DMA和多个SPI;
  • ESC:LAN9252,SPI从模式,使用内部PHY;
  • 晶振:25MHz,无源或有源均可,但品质不能差;
  • EEPROM:93LC66B,SPI接口,容量足够存SII数据;
  • 网络变压器:HX1188NL,带中心抽头;
  • 隔离:ADuM磁耦,隔离MCU与ESC之间的SPI信号,增强现场抗干扰能力;
  • 电源:24V输入,通过DCDC转为5V,再经LDO转为3.3V和1.2V。

电源部分要特别重视,LAN9252的模拟电源AVDD要单独走线,所有电源引脚旁加0.1uF电容,芯片底下再加一颗10uF钽电容。很多从站异常复位、PHY工作不稳定,根源都在电源纹波上。

整板设计流程我是这样推进的:

  1. 先按LAN9252数据手册画ESC最小系统,包括晶振、复位、时钟选择引脚;
  2. 再画SPI接口到MCU,把IRQ接到STM32的外部中断IO;
  3. 网口部分按参考设计画网络变压器、共模电感、RJ45;
  4. EEPROM挂到LAN9252的SII引脚,注意EEPROM也要支持SPI接口;
  5. 最后画MCU最小系统和电源,再把所有外设连接到MCU。

画图顺序决定了能不能快速排查问题。不要一开始就全图铺开,我吃过这个亏,板子回来以后调不通,根本不知道是哪部分的问题。

3.2 PCB布局与信号完整性实战经验

PCB布局对EtherCAT从站的影响比很多人想象的大,尤其是PHY和网络变压器区域。

物理层信号要短。PHY到网络变压器的差分走线,长度尽量控制在25毫米以内,差分对之间要走等长,和旁边信号线保持3倍线宽以上的间距,避免串扰。RJ45的金属外壳接地要处理好,否则辐射会很严重,现场EMC测试容易翻车。

模拟和数字分区分开。LAN9252的AVDD和DVDD不要混,晶振离ESC芯片越近越好,晶振底下不要走其他信号线,周围形成一块干净的地。很多工程师喜欢把晶振放在板边,省事是省事了,但时钟信号质量会打折扣。

SPI接口的串阻和走线也要注意。SPI速率不高时可以不严格做阻抗匹配,但我建议在SCK、MOSI、MISO、CS四根线上各串一个22欧姆电阻。目的不是阻抗匹配,而是减缓信号边沿,降低EMI辐射。这个做法成本极低,效果却很明显。

布局上让MCU和LAN9252靠近。SPI线尽量短,如果信号要跨参考平面,一定要保证地平面连续。我见过最典型的设计教训是:MCU和ESC放在板子两端,SPI线绕了大半个板子,结果通信速率只能降到5MHz以下,还时不时超时。后来改了布局,问题消失。硬件设计真的不要嫌麻烦,布局阶段多花两小时,现场能少熬两个通宵。

3.3 从站EEPROM配置与地址管理

从站上线之前,ESC要通过EEPROM装载SII数据。SII里的内容决定从站被主站识别成什么设备、支持哪些PDO、FMMU和同步管理器怎么映射。

SII数据一般用官方工具或者SSC生成。生成后必须核对几个关键项:

  • 从站Vendor ID和Product Code,主站用这两个值匹配驱动或配置文件;
  • 同步管理器SM的设置,SM0、SM1用于邮箱通信,SM2、SM3用于过程数据输出和输入;
  • FMMU映射,决定过程数据放在哪个地址;
  • 站地址,如果不希望用拨码开关配置,可以在EEPROM中预置。

我在现场用得最多的办法是:板子上的从站地址用拨码开关定义,MCU启动后读取拨码状态,再动态写入ESC的Station Address寄存器。这样同一个硬件,只要拨码不同就可以在总线上区分,备件管理也方便。

EEPROM写入时要非常小心。如果写了一半断电,SII数据损坏,从站可能会出现启动异常,主站无法识别设备。我一般先通过工具读取备份,确认无误后再固化。批量生产时,用烧录器直接烧EEPROM,比让每一块板子在线写更可靠,效率也高得多。

4. 常见问题与排查技巧实录

EtherCAT从站硬件调试,本质上是一个链路排查的过程。这里把我在现场遇到的高频问题整理成一份实战笔记,按排查顺序写,照着走能省不少时间。

4.1 从站无法上线或AL状态卡死

这是EtherCAT开发里遇到最多的问题。现象是主站扫描不到从站,或者从站状态一直停在INIT,进不了OP状态。

排查顺序很重要,我按下面的流程走:

第一,先确认链路物理层。用网线直接连主站和从站,看PHY的Link灯。没有Link灯,就检查网线、网络变压器、PHY配置。很多问题是焊接虚焊或PHY模式配置不对导致。这里不要懒,示波器点一下PHY的时钟脚,确认25MHz时钟有没有起来。

第二,确认ESC是否完成初始化。用示波器查看LAN9252的RESET引脚,复位释放后必须等ESC内部初始化完成,一般要几十微秒。如果MCU复位和ESC复位用同一个信号,要注意时序先后关系,否则ESC还没准备好,MCU就已经开始写寄存器了。

第三,用主站工具读SII信息。如果EEPROM内容不对或者损坏,ESC会呈现非预期行为。比如从站能被发现但识别信息全乱码,基本就是SII数据的问题。

第四,查看AL Status寄存器。从站进不了OP状态,最常见的原因是同步管理器和FMMU配置不正确。建议在MCU代码中打印或者通过调试器查看ESC寄存器的值,确认主站写入的SM配置和从站代码里的映射一致。

这里分享一个调试技巧:开发阶段在从站板上预留一个SWD调试接口,同时把MCU的串口打印接出来,把ESC初始化和状态变化信息都输出。这个习惯帮我省了大量排查时间,很多看似玄学的问题,打印一开就水落石出。

4.2 通信抖动与丢帧实测排查

EtherCAT通信周期抖动,是运动控制系统里最隐蔽的问题。现象可能是电流环偶尔波动,位置误差偶尔出现尖峰,但通信又没断,特别难定位。

先检查主站。用示波器在LAN9252的SYNC0或SYNC1引脚观察同步中断信号,如果SYNC信号抖动大,说明主站周期不稳定或者DC同步参数没有正确配置。注意用示波器长时采样,观察脉冲间隔的分布,而不只是看平均值。

再检查从站。把示波器接在MCU的中断引脚上,如果MCU处理IRQ不够及时,或者DMA没有及时准备好数据,会导致从站数据交换错过周期,从站会报同步错误。我实测过一种典型情况:主站周期1毫秒,从站MCU里用阻塞方式读取SPI数据,响应时间偏长,实际数据更新时间一直在漂。后来把SPI读取改成DMA方式,并把中断优先级调高,抖动立刻好转。

丢帧问题要先抓包看链路层。用Wireshark连接在主站网卡旁路抓EtherCAT帧,如果链路层有循环冗余校验错误,基本都是物理层干扰或者PHY配置问题。断帧是通信抖动的前奏,必须尽早处理,不要等轴跑起来再去猜。

从站的SYNC中断服务程序里只做最核心的操作,任何耗时操作都不要放进去。我在一个项目里把状态机刷新放在了SYNC中断里,结果周期任务一多,同步精度立刻崩。后来把中断服务缩短到只做数据搬运和标记,其他逻辑全部放到主循环处理,问题才算彻底解决。

4.3 编译告警与代码常见坑

EtherCAT从站代码通常由SSC生成,工程一导入Keil或者IAR,经常会冒出一堆警告。比如SSC生成的代码里,objdef.c这类文件会出现类似“conversion from pointer to small”的告警,多数情况下是编译器对指针字长和内存模型判断引起的,并不影响功能。

但不要直接忽略所有警告。我有一次在SSC生成的代码里改动了数据类型,结果FMMU地址计算错位,过程数据整个错乱。后来养成一个习惯:任何对SSC代码的修改都要做寄存器级验证,特别是PDO方向、内存索引、字节对齐这三个点。

从站代码里的内存对齐也需要留意。LAN9252的PDO缓冲区和MCU结构体之间做数据搬运时,如果对齐属性不一致,Cortex-M系列处理器会产生硬件异常。很多人遇到HardFault第一反应是数组越界,其实很可能是结构体对齐问题。使用#pragma pack或者__attribute__((packed))时,要理解它背后的代价,不要盲目加。

最后提醒一点,SSC生成的代码会用到大量全局变量。如果工程里跑了RTOS,要注意数据竞争问题,最好把ESC相关处理放进单一任务中,不要让多个任务同时访问ESC寄存器。

5. 多轴同步场景下的从站控制器体会

前面讲的都是单从站怎么设计,实际工程项目里往往是几十个从站挂在一条链路上。像汇川H5U带24个660伺服轴这类EtherCAT多轴方案,我以前虽然没有直接用那套平台,但类似的24轴项目接过不止一个。多轴场景下的从站控制器设计,有些额外的东西必须提前考虑。

5.1 分布式时钟与CSP模式对从站硬件的要求

多轴同步的底层依赖是EtherCAT的分布式时钟,也就是DC同步。EtherCAT通过在每个从站ESC里维护一个本地时钟,再通过传播延迟补偿,实现整个网络时钟同步。所有从站根据同一个SYNC周期触发采样或输出,位置模式一般就用CSP,也就是周期同步位置模式。

从站硬件上,DC同步对晶振的精度和稳定度要求更高。晶振的ppm偏差会直接影响同步误差,多轴联动时尤为明显。如果从站数量多、链路长,建议选择温漂小的晶振,实测下来对同步效果影响很直接。

SYNC信号一定要引出测试点。多轴调试时,示波器要同时看多个从站的SYNC信号,如果没有测试点,就只能把探头焊到芯片引脚上,不仅麻烦还容易短路。我自己的板子上,SYNC0、SYNC1都会拉出来做成2.54毫米插针,调试效率提升很大。

CSP模式下,从站每个周期都要接受主站的目标位置,然后执行位置环计算。这个过程对MCU的算力有要求,但更关键的是保证每个周期都及时更新目标值。如果有一个周期没更新,伺服就会报跟随误差。所以从站MCU的中断优先级、DMA配置、SPI传输时间都要提前规划好。

5.2 多轴项目中电源、散热与EMC设计

24个从站挂在一条链路上,每个从站的电源负荷都不能按单从站去评估。特别是伺服驱动器从站,峰值电流可能很高,电源设计要留足裕量。

电源模块的散热要考虑。EtherCAT从站通常安装在电柜里,环境温度可能到60摄氏度以上,DCDC转换效率如果不够,长时间运行很容易热保护。我做过一个项目,从站板子装在密闭电柜里,夏天总是偶发断电重启,后来查出是DCDC过热保护。解决办法是换高效率的模块,并在外壳上增加散热孔。

EMC设计在多轴系统里更严格。几十个从站同时工作,互相之间的干扰会放大,网络变压器、共模电感、屏蔽处理都不能省。地线环路要特别注意,从站之间通过网线连接,网线屏蔽层最好单端接地,避免形成地环路电流。

信号隔离也要考虑。实际项目中,远离控制柜末端的从站,地电位可能和控制柜相差不少,如果SPI接口不做隔离,轻则通信误码,重则烧芯片。我的从站板现在默认在MCU和LAN9252之间加磁耦隔离,成本多不了多少,但现场可靠性高了一个档次。

5.3 一个过来人的自检清单

总结这些年画EtherCAT从站控制器的经验,我自己每次打板前都会过一遍自检清单:

  • LAN9252的25MHz晶振是否靠近芯片,负载电容是否匹配;
  • AVDD和DVDD是否分开滤波,模拟地和数字地是否分区;
  • SPI四根线是否串了电阻,IRQ是否接到独立中断IO;
  • 网络变压器中心抽头是否正确端接,共模电感是否预留位置;
  • EEPROM型号和接口是否正确,SII数据有没有备份;
  • SYNC信号是否引出测试点,SWD调试接口是否保留;
  • 整个板子的安装方向和散热路径是否合理。

这套清单看起来简单,但每一条都是实际项目换来的教训。硬件设计没有玄学,绝大多数问题都出在电源、时钟、接地和接口时序这几个基础环节上。把这些基础打牢,再从站数量翻倍也不慌,这就是我做过多个多轴项目以后最大的感受。

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

状态模式实战:订单状态流转、if-else重构与并发持久化

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

作者头像 李华
网站建设 2026/9/30 1:27:52

Win7蓝屏排查实战:配置转储文件并用WinDbg定位驱动故障

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

作者头像 李华
网站建设 2026/9/30 1:27:51

STM32开发必备:国内高效资源平台与参考方案全指南

1. 为什么“找参考方案”比“从零写代码”更值得花时间STM32 这颗芯片在国内嵌入式圈子的地位,用一句话概括就是:你绕不开它。从高校实验室的毕业设计,到工业现场的电机控制板,再到消费电子里的智能台灯、鱼缸控制器,S…

作者头像 李华
网站建设 2026/9/30 1:27:49

BMS上车前必须经历哪些测试?从功能验证到失效安全的完整流程

一块BMS板子从画好PCB、打好样、焊完器件,到真正装进电池包上车,中间隔着的不只是几次“测试通过”的邮件,而是一整套能把设计逼出原形的验证流程。我入行做电池管理系统那会儿,最天真的想法就是“板子能跑、采样准、通信通”就能…

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

NAT本质是户籍管理而非地址翻译:会话表驱动的排障方法论

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

作者头像 李华
网站建设 2026/9/30 1:26:56

AIoT范式迁移:从设备联网到边缘智能协同

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

作者头像 李华