1. 拆开问题SPI 链路为什么需要隔离隔离的到底是什么先说我踩过的一个真实场景。有一块以 PIC18F4620 做主控的电机驱动状态采集板SPI 排线拉到距离 20cm 外的光栅编码器接口板上。上电之后十次里有三四次读回的数据是 0xFF 或者错位乱码。程序里加了重试、降速到 125kHzCRC 校验也上了乱码还是像打地鼠一样按下去一个冒出来一个。后来用示波器挂在 MISO 上看波形本身不差真正的问题是共模。电机驱动回路里 IGBT 开关瞬间母线电压跳变通过寄生电容耦合到信号地SPI 主控板的地和传感器板的地之间出现了好几伏的瞬态电压差。逻辑电平是按地来参考的两地之间电压在跳接收端看到的数据自然就是错的。这个问题的根源不在速率、不在时序而在“地”。所以标题里那句“隔离工业和嵌入式应用中的 SPI 通信链路”本质上隔离的是地环路和共模干扰不是隔离数据本身。MAX14431BAEE 是一个完整的 SPI 隔离方案物理层上把 SCK、MOSI、MISO、CS 这四根线用数字隔离器切开两侧各自参考自己的地互不牵连。PIC18F4620 这边继续跑 5V 的逻辑隔离器另一次按从机侧的电压供电顺带把 5V/3.3V 电平转换也解决了。什么场景需要这么做电机驱动器、变频器、伺服控制器里面主控板和功率板之间的 SPI 通信PLC 背板总线里 CPU 模组和 IO 模组之间的 SPI 扩展以及任何跨越长线缆、经过接插件、和功率电路共箱的 SPI 接口。不是说所有 SPI 都得加隔离近距离板内走线、地平面完整的情况下不加也跑得好好的。一旦信号要出板子、要经过插接件、要和功率回路住在同一个腔体里隔离就不是可选项了。用光耦行不行也能做但传统光耦做 SPI 隔离很难受。SPI 时钟稍微跑快点光耦的传播延迟和通道间不一致性就会吃掉时序裕量而且光耦原边要 LED 驱动电流静态功耗摆在那里一个四通道的光耦隔离方案体积、功耗、速率全面吃亏。MAX14431BAEE 这类数字隔离器用的是电容隔离原理速率能推到 100MHz 级别用在 PIC18F4620 的 SPI 上主频 20MHz 时 SPI 最快也就 5MHz绰绰有余。2. 方案落地从器件选型到四线隔离的硬件设计2.1 为什么选 MAX14431BAEE而不是通用四通道隔离器MAX14431BAEE 是 Maxim现在归到 ADI 旗下面向 SPI 总线推出的数字隔离器四个通道3 个正向 1 个反向正好对应 SPI 标准接法里的 CS/SCK/MOSI 三条从主到从的信号和 MISO 一条从从到主的信号。选它而不是拿一片普通四通道数字隔离器来自己接原因有三个。第一是方向定死了不需要像通用隔离器那样仔细规划每个通道的方向引脚画原理图的时候少掉一类低级错误。第二是它内部针对 SPI 这种带时钟的同步总线做了优化通道间的传播延迟匹配比常见的通用隔离器更紧SCK 和 MOSI 是并行穿过隔离器的延迟不一致会导致从机采到错位数据。第三MAX14431 的工作电压范围比较宽逻辑侧直接挂 PIC18F4620 的 5V VDD不需要中间加电平转换隔离侧单独供电给从机板如果从机是 3.3V 的 DSP 或传感器 SoC直接把隔离器输出侧按 3.3V 接顺便完成电平转换。型号后缀里“BAEE”对应的是引脚封装和卷带包装等信息设计上不影响原理图采购的时候对着数据手册的 Ordering Guide 核一遍温度等级和包装就行。这个器件的数据手册里最核心的两个参数是传播延迟和通道间延迟偏差选型时重点看最坏情况不要看典型值。典型值只能说明这批次平均水平时序裕量计算必须按最坏值来。2.2 硬件连接SPI 四线怎么过隔离器电源和地怎么处理我直接用一块 PIC18F4620 做主控的状态采集板来说原理图怎么画。PIC18F4620 的 SPI 模块引脚复用在你熟悉的 RC3SCK、RC4SDI、RC5SDO上CS 属于软件控制的普通 IO我用的是 RD0。主控侧接法如下SCKRC3→ MAX14431 正向通道输入MOSI/SDORC5→ MAX14431 正向通道输入CSRD0→ MAX14431 正向通道输入MISO/SDIRC4→ MAX14431 反向通道输出MAX14431 另一侧的对应信号再接到从机 SPI 引脚上。两侧电源独立主控侧 VDD 接 5V从机侧根据需要接 5V 或 3.3V。每个电源引脚旁边都放一个 0.1μF 的陶瓷电容位置尽量靠近电源引脚再并联一个 4.7μF 或者 10μF 的钽电容做低频去耦。这里有个很多人第一次画会犯的错隔离器的两侧地不能连到一起。一旦 layout 里把两侧 GND 用铜皮大面积连通隔离就前功尽弃了干扰会直接越过隔离屏障继续串。所以我画板子的时候会在隔离器正下方把两侧地平面彻底断开并且在地平面上留出一条约 1mm 宽的净空区整个器件横跨在这条净空区上。隔离器底下不要铺铜这是常规操作但新手布局时经常忽略。输入侧和输出侧的去耦电容也要分开放分别参考各自的地不要图省事把两边的电容堆在一起。隔离器旁边如果有走线需要跨越隔离带尽量走顶层或底层不要在隔离带上方平行走很长一段那会形成寄生电容耦合路径。还有一个容易忽视的点CS 信号在隔离器里也是要走一个通道的很多人只隔离时钟和数据线片选直接飞线跨过隔离区结果干扰从片选线进到主控的 IO 口里数据链路全是干净的但系统还是随机复位。SPI 的四根线一根都不能省。2.3 从机侧电路和长线终端处理隔离器从机侧到实际从机芯片之间往往还有一段 PCB 走线或者排线。如果 SPI 速率在 1MHz 以下、距离在几厘米以内直接连线问题不大。如果排线长度超过 10cm 或者速率接近几个 MHz就建议在从机侧靠近接收端的位置加串联匹配电阻阻值按走线特征阻抗来选一般 22Ω 到 33Ω 比较常见。串联电阻放在驱动端的输出引脚旁边。隔离器到从机的 MOSI/SCLK 是隔离器在驱动电阻放在隔离器输出侧靠近引脚的位置MISO 是隔离器输出从机那边驱动所以 MISO 上的串联电阻放在从机 SPI 输出引脚旁边。这个细节我在第一版板上偷懒没放后来跑 4MHz 时钟时波形过冲到接近 6V加了 33Ω 之后波形立刻干净了。从机侧如果芯片有施密特触发器输入或者内置弱上拉通常不需要额外处理。但如果从机是纯粹的数字器件、输入悬空时电流不定必须把隔离器输出侧没有用到的通道输入引脚做确定电平处理不能悬空。MAX14431 未用通道按数据手册要求接固定电平这个照着手册来别因为“不用所以不管”留下一堆不确定电平的输入脚生产测试时偶发漏电或者误动作特别难查。3. 软件配合PIC18F4620 的 SPI 配置和时序列注意事项3.1 时钟极性和相位怎么配隔离器有没有自己的“脾气”MAX14431 在数据链路层面是透明的不修改 SPI 数据但它是物理层器件会和主机的 SPI 时序产生延迟叠加。软件层面的配置重点是保证 PIC18F4620 发出的 SPI 模式与从机需要的模式一致而不是和隔离器一致因为隔离器本身不关心 CPOL/CPHA 是哪种模式它只是把电平延迟几十纳秒送过去。PIC18F4620 的 SPI 模式由 SSPCON1 寄存器里的 CKP 位和 SSPSTAT 里的 CKE 位控制。CKP 决定 SCK 空闲电平CKP0 时空闲为低对应 SPI Mode 0 和 Mode 1 的时钟极性CKP1 时空闲为高对应 Mode 2 和 Mode 3。CKE 决定数据在 SCK 的哪个边沿被采样CKE0 时在 SCK 从活动态到空闲态的边沿发送数据CKE1 时在 SCK 从空闲态到活动态的边沿发送数据。很多工程师在这一对上栽跟头我自己的经验是把 PIC 的 CKE 和教科书上写的 CPHA 对应关系画个时序波形图对着从机数据手册的时序图一项项核对别相信记忆。以最常见的 SPI Mode 0 为例CPOL0、CPHA0空闲时钟为低上升沿采样PIC18F4620 上对应的配置是 CKP0、CKE1。我调试的时候习惯用逻辑分析仪同时抓 SCK、MOSI、MISO确认从机读到的数据是预期的如果发现整包数据错半拍优先怀疑 CKE 配置反了而不是从机坏了。3.2 PIC18F4620 的具体初始化和收发代码参考我实际用的初始化代码大致长这样主频用的 20MHz 外部晶振SPI 分频到 5MHz。PIC18F4620 的 SPI 时钟源来自主时钟分频SSPCON1 的 SSPM3:SSPM0 设为 0000 对应 SPI Master 模式且时钟为 Fosc/4也就是 5MHz。// SPI Master ModeFosc/4SPI Mode 0 SSPCON1 0x20; // 0010 0000: SSPEN1, CKP0, SSPM0000 SSPSTAT 0x40; // 0100 0000: SMP1, CKE1 TRISC3 0; // SCK 输出 TRISC5 0; // SDO/MOSI 输出 TRISC4 1; // SDI/MISO 输入 TRISD0 0; // CS 输出手动控制 CS_PIN 1; // CS 默认拉高SMP 位在主模式时建议设为 1让输入数据在 SCK 周期末端被采样能争取更多数据建立时间。手册里有句“SMP1 时输入数据采样时间在数据输出末端”这个对长链路非常有用输入信号经隔离器延迟后仍能稳定建立。发送一字节的标准写法unsigned char spi_write_read(unsigned char dat) { SSPBUF dat; while (!SSPSTATbits.BF); // 等待发送完成且接收缓冲满 return SSPBUF; }需要注意PIC18F4620 的 SPI 是全双工的每发一字节的同时会收一字节BF 置位意味着本次收发都结束了。所以无论主机这次只是想读从机状态还是只写配置都需要先往 SSPBUF 里写一个任意字节来产生时钟否则 MISO 上不会进来数据。这个细节在调试时最容易困惑为什么 SPI 只有发送没有接收多半是主机没发东西从机没得到时钟。3.3 片选控制软件片选配合隔离器时的时序细节CS 我用普通 IO 做软件控制原因很简单PIC18F4620 的硬件从机选择功能在 SPI 主模式下用起来限制多而软件 CS 的时序完全由代码掌控配合隔离器之后更灵活。具体操作时序是CS 拉低等待至少一个 SPI 时钟周期的低电平时间让从机准备就绪隔离器本身不要求特殊建立时间但从机端需要最小 CS 有效到第一个 SCK 上升沿的时间逐字节调用 spi_write_read()全部数据交换完后等待最后一个 SCK 边沿结束再拉高 CSCS 拉低的时机和拉高的时机都不要太紧贴着 SCK 边沿。我吃过一次亏CS 拉高和最后一位 SCLK 下降沿之间只隔了两个 NOP结果从机把最后一位数据当成还在帧内状态机直接错乱。后来在 CS 拉高的前后各加了 3 个 NOP问题消失。加了隔离器之后这个裕量会更紧张因为 SCK 路径比 CS 路径多延迟几十纳秒两边延迟如果不对齐从机看到的有效建立时间会进一步减少。MAX14431 这类隔离器通道间延迟偏差较小但软件侧还是留足余量比较稳。4. 实测波形、延迟预算和常见问题排查4.1 传播延迟怎么算进时序预算里数字隔离器不是导线信号穿过去是有延迟的。MAX14431BAEE 数据手册里传播延迟参数对于 5V 供电、25℃ 条件下典型在几十纳秒量级通道间匹配也有明确指标具体以选型批次手册为准。设计时不能光看典型值必须留出裕量。延迟预算最简单算法是这样的主机发出的 SCK 上升沿到达从机时比主机端看到的晚 tPD主机发出的 MOSI 数据同样晚 tPD 到达从机。只要两条路径都经过相同型号的隔离通道它们到达从机的时间差就是通道间延迟偏差 ΔtPD而不是各自 tPD 的绝对值。这才是隔离器影响 SPI 时序的核心。从机在 SCK 边沿采样 MOSI 时要求 MOSI 数据已经稳定建立。计算时把数据路径的总延迟隔离器 tPD 走线延迟和时钟路径的总延迟隔离器 tPD 走线延迟相减取最坏通道偏差。MAX14431 这类器件通道偏差做得好几纳秒量级对 5MHz SPI 来说完全够用。但我遇到过一个项目SPI 从机要求的最大时钟频率只有 1MHz隔离后跑起来它会偶发采样错误排查半天发现是隔离器通道方向接错导致 MISO 数据虽然波形正确但相位差了一整个周期——这类问题用逻辑分析仪能快速定位。给一个我在现场用的粗略带宽经验SPI 时钟 5MHz一个位周期 200ns。隔离器加走线延迟预算按 50ns 算占掉四分之一周期再留出从机最小建立/保持时间 50ns还剩 100ns 给数据稳定。如果 SPI 时钟推到 10MHz200ns 周期里可能只剩一半裕量这时就必须认真查数据手册的精确参数了。PIC18F4620 在 20MHz 主频下 SPI 最快 5MHz这恰好是隔离方案最舒服的工作点。4.2 示波器实测能看到什么波形过冲、延迟、地弹隔离之后抓波形我最先看三个地方。第一是 SCK 的上升沿和下降沿有没有明显过冲。隔离器输出驱动能力通常比直接 GPIO 强但长线反射还是会在上升沿形成振铃。第二是 MISO 上的信号幅度如果从机是 3.3V 而主控侧看的是 5V 逻辑隔离器会把 3.3V 电平整成 5V 电平输出给 PIC波形会有一个明显的台阶感这是正常现象不是信号出问题了。第三是两侧地的电位差用示波器两个通道同时勾主控侧地和从机侧地正常时应该是平的一条线如果在功率电路动作时出现尖峰说明隔离屏障有缝隙最常见是板子上有跨隔离带的走线或者接插件外壳把两侧地旁路连起来了。我的第一版样板上光栅编码器接口板的地通过金属接插件的安装螺丝和主控板的结构件又连上了隔离器白装了。后来在机械结构上把两边的安装面做了绝缘处理地弹波形才消失。这个问题在手册上永远学不到属于工装结构设计和硬件设计“打架”的典型案例。4.3 实测中遇到的五个典型问题和对应排查手段我把调试过程中踩过的问题整理成一张表这些问题在新手项目里几乎轮着出现。现象可能原因排查手段全 0xFF 或全 0x00隔离器某通道没供电、方向接反、CS 没拉低万用表量隔离器两侧电源示波器从主控引脚一路追到从机引脚确认每级信号偶发错位一整字节时钟/数据通道间延迟偏差累计过大或 CKE/CKP 配错相位逻辑分析仪同时抓 SCK/MOSI/MISO对比对齐情况低速正常、提速后乱码时序裕量不足或长线反射导致过冲采样降低 SPI 分频验证在驱动端加 33Ω 串联电阻查看波形过冲幅度主控频繁复位、看门狗超时隔离带下方地平面桥接或 CS 线跨隔离区绕行太长引入干扰目检 layout寻找跨隔离区的铜皮/走线示波器测两侧地间噪声MISO 波形幅度偏低从机输出驱动能力不足或隔离器输出侧负载过重示波器看高电平是否满足主控 VIH检查隔离器输出侧有没有错误并联了负载电阻这五个问题里面“低速正常、提速后乱码”最常见也最好修。SPI 分频先降到最保守档位比如从 5MHz 降到 312kHz确认功能正常后逐步提升每一步都观察波形裕量。很多时候问题在长线反射而不在隔离器本身加串联电阻比换更高端的隔离器更有效。还有一种不那么常见的坑PIC18F4620 的 SPI 引脚如果上电后还没有初始化会有很短一段时间处于不确定状态。如果此时隔离器已经供电、从机也已经复位完成从机的片选引脚可能被 CS 线上的杂散电平误触发。解决办法是在 PIC 初始化代码最开头就把 CS 引脚配置成输出并拉高SPI 模块使能后再开始操作。这个顺序我在不止一个项目里验证过处理不好会出现上电偶发从机自检失败特别难复现。5. 经验沉淀几个能在下一个项目里直接用的小技巧如果你准备在自己的项目里照搬这套方案我把经常被追问到的几个点先列出来。第一原理图阶段就把隔离器两侧电源域分开命名主控侧叫 VDD_5V、GND从机侧叫 VDD_ISO、GND_ISO。PCB 导入网表之后检查有没有 GND 和 GND_ISO 之间的 0Ω 电阻或磁珠残留这类“方便调试”的跳线在上量产版之前务必拿掉。我见过有人为调试方便把两侧地用 0Ω 短接最后忘记删除直接投板整个量产批次都白做了。第二调试时准备一个 SPI 回环测试。物理上把从机摘掉隔离器输出侧的 MOSI 和 MISO 短接加上限流电阻更稳主机自发自收这样可以单独验证隔离器链路本身有没有问题。如果回环数据正确再怀疑从机如果回环就错问题一定在主机配置和隔离器接线之间。第三考虑从机的时序要求时要把隔离器延迟当成主机时序的一部分来看而不是假设主机引脚上量到的波形就等于从机引脚上的波形。现场最稳妥的做法是在隔离器从机侧的测试点上拿示波器量真实波形以这个波形为准调整软件参数。这套方案用下来的总体感受是MAX14431BAEE 加 PIC18F4620 的组合在工控场景里非常实用PIC 的 5V SPI 直接进隔离器省掉电平转换电路隔离器把共模干扰挡在主控之外软件不再需要靠疯狂重试来“续命”。如果你只是板内短距离 SPI不必上隔离但信号一旦要出板、进接插件、靠近功率器件早加隔离比事后 debug 划算得多。至少对我来说自从把 SPI 总线整体隔离之后新项目的调试时间明显变短了——省下来的时间拿来写真正需要的应用逻辑比追着地环路和共模噪声满车间跑舒服得多。
企业数字化 ERP 产品动态
相关推荐
工业级隔离SPI设计:MAX14431与MKV46F256选型调试全解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:03:59
MAX14431BAEE+与PIC18F4620隔离SPI通信链路设计 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:03:59
FPGA时序约束中逻辑互斥与物理互斥的本质区别及避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:02:59
Level-2全推行情Python SDK部署避坑:多市场订阅与版本对齐 简介:《同花顺level-2全推行情Python API操作手册》面向高频交易与量化开发者,尤其适合做涨停板、盘口异动类策略的研究与工程人员,用来解决Level-2行情如何借助Python稳定接入、按字段准确解析的落地问题。资料是单个PDF文档,压缩… · 2026/11/3 3:53:38
推理框架与AI编译栈:模型部署优化与选型实战指南 1. 从"模型跑不动"说起:推理框架到底在解决什么问题如果你手里有一个训练好的模型,想让它在一个具体的设备上跑起来,大概率会遇到这样几个问题:模型文件太大,设备内存装不下;推理速度太慢&#x… · 2026/11/3 3:53:38
二阶锥规划在动态最优潮流计算中的创新应用 1. 项目背景与核心挑战现代配电网正经历着从被动运行向主动管理的范式转变。随着分布式电源渗透率不断提升和负荷特性日益复杂,传统的最优潮流(OPF)计算方法已难以满足实时调控需求。我们团队在电力系统优化领域深耕多年,发现动态… · 2026/11/3 3:53:38
Excel VBA常用代码片段库:Range、跨簿取数与事件避坑实战 简介:《EXCEL VBA常用代码实战大全》是一份面向Excel VBA初学者与办公自动化实践者的代码技巧型文档,重点解决单元格引用、区域选取、查找定位、复制粘贴及循环判断等常见编程问题,适合希望从入门范例逐步过渡到独立编写宏程序的读者。包内共… · 2026/11/3 3:53:38
连续喷墨喷码机维修手册:从墨滴电场到墨路电路的故障链 简介:这份资源是华石F500(含F530/550系列)喷码机的服务与维修手册,面向设备操作人员、产线维护工程师及初次接触该机型的专业技术人员,用于系统掌握日常保养、故障排查与安全操作规范。压缩包共1个PDF文件,… · 2026/11/3 3:53:38
关键信息基础设施全栈安全防护架构解析 1. 项目背景与核心价值这份73页的PPT方案实际上是一套针对关键信息基础设施保护的完整技术架构设计。在数字化转型浪潮下,能源、交通、金融等行业的核心系统正面临前所未有的安全挑战。去年某大型制造企业因工控系统漏洞导致全线停产的事故,让行业真正意… · 2026/11/3 3:52:38
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18