首页/新闻资讯/正文详情

I2C调试实战:从万用表到示波器,ACK与波形排查全攻略

发布时间:2026/11/6 1:05:12 来源:云帆数科 栏目:资讯中心
I2C调试实战:从万用表到示波器,ACK与波形排查全攻略
I2C 调试中最让人头大的场景莫过于设备连接正常、上拉电阻也焊了、地址核对无误可就是读不到数据。这种时候大多数人的第一反应是拿起万用表去量结果盯着屏幕上的电压数字发呆——因为万用表根本看不到波形。我自己也是从这个阶段摸爬滚打过来的后来才慢慢总结出一套从万用表、示波器到 ACK 的完整排查流程。这篇文章就把我踩过的坑和验证过的方法整理出来给还在跟 I2C 波形较劲的朋友一条可以直接照做的路径。不管是刚入门单片机的新手还是已经做嵌入式开发几年的工程师按照这个顺序排查基本能覆盖大多数 I2C 通信故障。I2C 本身只有两根线SCL 和 SDA加上一根地线就能工作看起来非常简单。但恰恰是这种简单让很多人忽略了信号测量本身的门道。万用表适合查静态问题示波器适合看动态时序而 ACK 的识别则是判断通信是否真正建立的关键。下面我按实际调试中应该动手的顺序把每个工具该用在哪一步、怎么看、怎么判断一次说清楚。1. 万用表能测什么先别急着上示波器很多人一听 I2C 调试就条件反射地想买示波器。实际上在示波器上场之前万用表就能帮你排除掉一大半低级问题。这些低级问题如果没查干净上了示波器反而更难定位因为波形看起来有东西在跳但就是通信失败容易把人绕晕。1.1 万用表真正做得到的三件事第一件事是测量静态电压。I2C 总线在空闲状态下SCL 和 SDA 都应该被上拉电阻拉高电压接近 VDD。如果测到某个引脚是 0V 或者只有零点几伏那基本可以断定要么上拉电阻没焊、虚焊要么有设备把总线拉死了要么两根线之间有短路。这一步只需要把万用表拨到直流电压档红表笔接 SCL 或 SDA黑表笔接地上电后读数三十秒就能完成。第二件事是通断测试。当怀疑 SCL 和 SDA 之间短路、或者某一根线对地短路的时候断电状态下用蜂鸣档直接测两两之间的阻值是最快的方法。正常的 I2C 总线SCL 与 SDA 之间应该是开路因为有上拉电阻实际会测到一个几 kΩ 的电阻而不是零欧对地也应该是开路。如果蜂鸣器长响基本就是 PCB 贴片连锡、飞线破皮碰在一起这类物理问题。第三件事是验证上拉电阻值。断电状态下用电阻档直接量 SCL 或 SDA 对 VDD 的阻值看是否接近你设计的上拉电阻标称值。比如你焊了 4.7kΩ实测应该在 4.7kΩ 左右如果测出来是几十 kΩ 甚至几百 kΩ说明上拉电阻可能贴错、焊盘虚焊或者走线上串了其他元件。这一步能帮你在上示波器之前把总线根本没有上拉这种最基础的问题揪出来。1.2 为什么万用表看不到 I2C 波形采样率是硬伤有一个问题几乎每个新手都会问为什么我把万用表搭在 SDA 上看到的就是一个稳定的高电平看不到波形答案在于采样率。万用表的 ADC 采样速度以每秒几次到几十次计算而 I2C 标准模式时钟是 100kHz快速模式是 400kHz一个高电平脉冲只有几微秒。用秒级采样率的仪器去看微秒级的信号就好比用秒针去拍蜂鸟扇翅膀能看到的只是模糊的平均值。所以万用表上显示接近 VDD 的稳定电压实际上只是高速翻转信号被积分后的结果并不代表总线没有活动。明白了这一点你就知道万用表的定位是静态检查它回答的是总线有没有被拉低、有没有短路、上拉有没有接这类问题回答不了时序对不对、ACK 有没有返回这类动态问题。动态问题必须交给示波器。1.3 用万用表判断哪一端拉低了总线有一个很实用的场景SDA 测出来是低电平但你不确定是主控拉低的、还是从机拉低的。这时候可以断电把主控的 SDA 引脚用杜邦线或者飞线断开然后重新上电再量 SDA 的电平。如果还是低说明是从机侧有问题比如从机芯片坏、进入了错误状态、或者内部锁死如果变成高电平了说明是主控侧把它拉低了比如主控初始化时序不对、GPIO 配置成了推挽输出并在发送低电平。这个方法不花一分钱却能直接切割故障范围。我自己在排查一块板子时就靠这一招定位到是某颗传感器在上电瞬间把 SDA 拉死换了供电时序后问题消失。2. 示波器上场触发、时基和解码的实操设置万用表把静态问题排除干净之后如果通信还是异常就该轮到示波器了。示波器能看到 I2C 的每一个跳变沿、每一个电平宽度、每一帧数据的先后顺序还能直接解码出地址和数据内容。但示波器也不是一接上就能看明白的探头接法、触发设置、时基选择任何一个不对都可能让你什么都抓不到或者抓到的波形完全不可读。2.1 探头和接地点很多人忽略的第一步先说探头的物理连接。默认配置是 CH1 接 SCL、CH2 接 SDA这样屏幕上能同时看到两根线的对应关系。地线千万不要用探头自带的那根长黑色鳄鱼夹那个夹子连出来的地线回路很大像一根天线会把开关电源的噪声、周围环境的辐射全部收进来在波形上表现为毛刺和振铃I2C 本身又是高阻态开漏结构特别容易受影响。正确做法是使用探头自带的短接地弹簧直接勾在板子上的 GND 测试点让地回路尽可能短。如果板上没有现成的测试点可以临时焊一根短粗线到 GND。垂直档位一般设置成 1V/div这样 0 到 3.3V 的完整摆幅刚好占三格多看得清楚。水平时基先不要着急后面根据抓到的内容再调整。这里有一个经验探头的补偿电容要先用示波器自带的 1kHz 方波校准过否则测上升沿波形会变形影响后面我们对时序的判断。2.2 触发设置抓启动条件和数据帧的两种思路示波器触发是新手最容易卡住的地方。很多人把探头接上之后屏幕上的波形一直在乱跑或者一片模糊按下 Single 又什么都抓不到。问题的核心是触发条件没设对。I2C 的通信是由主机发起 START 条件开始的START 的定义是SCL 为高电平期间SDA 产生一个下降沿。所以最通用的触发方式是使用 CH1SCL的下降沿触发然后把触发电平设置在 1.5V 到 1.65V 之间。这正好落在 TTL 逻辑阈值区间的中间位置高电平是 2V 以上、低电平是 0.8V 以下阈值放中间最稳定能避免因为毛刺造成的误触发。如果你的示波器支持 I2C 协议触发那更方便。在触发菜单里选择 I2C 类型然后可以指定触发条件为 START、STOP、ACK 或者某个具体的地址值。比如你想确认主机有没有发出正确的从机地址就把触发条件设成地址0x50读操作然后按下 Single示波器会在千分之一秒内抓到对应的那一帧。没有协议触发功能的老示波器也不用担心用 SCL 下降沿触发加上耐心一样能抓到完整的帧。时基怎么调I2C 标准模式一个 bit 是 10μs一个字节加 ACK 是 9 个时钟也就是 90μs一帧常见的写操作可能包含地址、寄存器地址、多个数据字节总时长几百微秒到几毫秒。所以建议先把时基打到 50μs/div 左右抓一帧完整的通讯过程看清楚整体结构之后再把时基缩小到 5μs/div 甚至 2μs/div观察单个字节和 ACK 位的细节。2.3 不看解码也能读时序手动数时钟的土办法现在的数字示波器绝大多数自带协议解码功能在解码菜单里选 I2C告诉示波器哪个通道是 SCL、哪个是 SDA它就能直接在波形下面标出 START、地址、读写位、ACK、数据字节和 STOP。这确实非常省事但我建议每个调试 I2C 的人都要掌握手动读波形的能力因为解码器在某些情况下会骗人后面我会专门讲这个坑。手动读 I2C 波形的思路很简单先找到 STARTSCL 高时 SDA 下降沿然后从 START 之后 SCL 的第一个上升沿开始数时钟。前 8 个时钟是地址字节其中前 7 个 bit 是设备地址第 8 个 bit 是读写位低为写高为读。第 9 个时钟是 ACK 位这个位的高低就是核心关注点。SDA 在第 9 个时钟被从机拉低就是 ACK保持高电平就是 NACK。读数据字节同样简单从第 10 个时钟开始每 8 个时钟一组数据每个字节之后又是第 9 个 ACK 位。你只要盯着 SDA 在每个时钟高电平期间的电平就行。这个方法看着笨但能让你真正理解 I2C 的时序框架排查问题时远比直接看解码结果更靠谱。3. ACK 波形怎么看第 9 个时钟才是关键整个 I2C 通信过程中ACK 是最容易被忽略、也最容易出问题的环节。很多人示波器一抓看到波形整体在跳觉得好像有信号就以为通信正常。但实际上只要 ACK 位是 NACK后面的数据传输就是无效的。3.1 ACK/NACK 在波形上的样子与判定方法ACK 的定义是在第 9 个时钟周期主机释放 SDA不驱动它从机如果接收正常会把 SDA 拉低表示我收到了。所以你在示波器上看到的正常 ACK是第 9 个时钟对应位置的 SDA 是一个低电平脉冲。NACK 正好相反主机释放 SDA 后从机没有拉低它所以 SDA 在那个位置保持高电平。为什么从机会不回 ACK我总结下来大概有这么几类原因从机地址不匹配地址线配置错了、地址算错了、从机没上电、从机正处于复位状态、从机内部总线锁死、从机固件异常导致无法响应、或者总线电气参数太差导致从机根本识别不了主机发出的信号。还有一种常见情况是主机在读操作结束时不发 ACK 而是主动回 NACK这是协议规定的正常行为不是故障后面我会细说。判断 ACK 最直接的示波器操作是把时基缩放到 5μs/div 左右找到地址字节的第 9 个时钟看 SDA 在那个位置的电平。如果示波器有光标功能可以分别测量第 9 个上升沿到第 10 个上升沿之间 SDA 的高低状态定量判断。3.2 时钟拉伸一个容易误判为 ACK 的细节有一种特殊情况叫时钟拉伸Clock Stretching。某些慢速从机在收到数据后来不及处理会在 ACK 位之前把 SCL 拉低强制主机暂停等它处理完再释放 SCL。这个机制在硬件 I2C 控制器里通常是自动处理的但如果用软件模拟 I2C或者用万用表观察到异常就容易让人困惑。在波形上看时钟拉伸表现为 SCL 的低电平时间明显变长比正常的一个低电平时间长出几倍甚至几十倍。这个时候不能只看 ACK 位 SDA 是不是低还要判断 SCL 是否被从机长时间占用。如果还没等主机发完 8 个时钟SCL 就被拉低得奇形怪状那通信流程本身就是异常的可能是从机在等待某个条件而卡住了。判断方法在示波器上用两个通道同时显示 SCL 和 SDA观察 SCL 是否始终保持着规则的脉冲间距。如果 SCL 的低电平宽度超出了正常值的 2 倍以上基本可以断定时钟拉伸发生了。如果这是你不希望出现的现象就去查从机的初始化配置、供电稳定性、以及它是否有独立的上电复位时序要求。3.3 从 ACK 位置反推上拉电阻和总线电容问题还有一个细节值得专门提ACK 位的波形形状能反映总线电气健康度。正常的高质量 I2C 波形SDA 在第 9 个时钟的下降沿应该干脆利落低电平保持稳定然后上升沿迅速回到高电平。如果你看到的是 SDA 缓慢爬升或者低电平只勉强到 1V 就不再下降这说明上拉电阻和总线电容的配合出了问题。I2C 规范对上升沿时间有明确限制标准模式要求最大上升时间 1000ns快速模式要求 300ns快速模式 Plus 要求 120ns。上升沿时间大约等于 0.8473 乘以上拉电阻乘总线电容。比如总线电容是 200pF上拉电阻是 10kΩ算出来的上升沿就是 0.8473 × 10000 × 200×10⁻¹² ≈ 1.7μs远超快速模式的 300ns 限制。这种情况下高速通信必然不稳定轻则偶尔 NACK重则完全不通。所以当你在示波器上看到 ACK 波形软绵绵的时候第一反应不是去怀疑从机芯片而是去量一下上拉电阻是否过大、总线是否过长导致电容太大。把 10kΩ 换成 4.7kΩ 甚至 2.2kΩ往往立竿见影。4. 完整排查流程从锁死总线的 SDA 低电平到故障定位前面讲了工具和原理这一节给出一条可以直接照做的排查链路。我自己调试 I2C 设备时基本按这个顺序走每一步都有明确的判定标准能快速缩小故障范围。4.1 排查步骤总览从静态电压到协议帧整个流程可以概括为六步第一步量静态电压第二步看时钟是否有输出第三步抓 START 条件第四步验证地址字节第五步检查 ACK第六步检查数据阶段和 STOP。这六步的逻辑是逐层深入先确认物理层有没有问题再确认主机有没有在发再确认协议层是否对得上最后确认数据交换是否完整。在实际操作中我会把前三步用万用表和示波器交替进行先用万用表排除短路和上拉问题然后示波器上电抓一次总线上有没有任何活动。如果连时钟都没有问题大概率在主控侧的 I2C 外设配置、引脚复用或者时钟使能上如果有时钟但没有完整的地址帧问题可能在初始化流程或者 GPIO 模式配置上。4.2 每一步的判定标准与常见失败原因第一步静态电压。正常状态 SCL 和 SDA 都应该高于 2V假设 VDD 是 3.3V。如果 SCL 低、SDA 高说明时钟线被拉死如果 SDA 低、SCL 高说明数据线被拉死两根都低可能是共用的上拉电源没接或者两颗上拉电阻都没贴。第二步看时钟。用 CH1 接 SCL下降沿触发时基 50μs/div按一下 Single然后触发主机发一次通信通常是代码里执行一次 I2C 读写。正常会看到一串脉冲。如果完全没有脉冲检查主控 I2C 外设的时钟使能、引脚复用配置、以及主机的初始化代码有没有真正执行到读写函数。第三步抓 START。很多情况下时钟有、SDA 也有活动但 START 条件不对。START 要求 SCL 高电平期间 SDA 产生下降沿。如果你看到 SDA 的下降沿发生在 SCL 低电平期间那这个START是无效的可能是主机 GPIO 驱动时序写错了也可能是软件模拟 I2C 的延时不对。第四步验证地址字节。从 START 后数出前 8 个 bit换算成十六进制确认是不是目标从机的地址。注意 7 位地址在总线上是左移一位的比如传感器地址是 0x50总线上的地址字节是 0xA0写或者 0xA1读。软件里 I2C 驱动通常要求你传入的是 7 位地址它内部自己移位。如果换算出来对不上去核对数据手册和驱动代码。第五步检查 ACK。方法已经在前面详细说过了。这里要特别提醒如果是读操作主机读完最后一个字节后主动发一个 NACK 再发 STOP 是标准行为别把它当成故障。第六步看数据阶段和 STOP。对写操作来说地址后面跟的寄存器地址和数据字节要完整对读操作来说经常出现的问题是主机发了读地址之后从机返回的数据乱掉这通常是因为读写切换少了 Repeated Start也就是没有在写完寄存器地址后重新发一次 START 再转成读模式。4.3 读取寄存器地址时的常见死法少了一次 Repeated Start这个坑我踩过不止一次值得单独拿出来讲。很多第一次接触 I2C 传感器的人会把读操作写成发 START → 发送写地址 → 发送寄存器地址 → 直接发读地址 → 读数据。但 I2C 协议规定在改方向之前必须再发一次 STARTRepeated Start。正确的读流程是发 START → 发送写地址 → 发送寄存器地址 → 再发 START → 发送读地址 → 从机返回数据 → 主机回 NACK → 发 STOP。如果少了那一次 Repeated Start从机根本不会切换为输出模式示波器上看到的表现为地址和寄存器地址都正常发送、ACK 也正常但到了读数据阶段 SDA 完全没有数据输出总线保持高电平。这种故障用示波器看特别明显前面的波形都是完整的后面突然一片空白。解决办法就是在驱动层面检查是否在读操作前重新调用了发送 START 的函数。5. 我踩过的几个坑与对应的处理办法这些坑不是从书上看来的是我自己在实际项目中一个个踩出来的每个都花过不少时间。写出来给大家当参考能避一个是一个。5.1 上拉电阻选型电阻值不能拍脑袋有一块板子I2C 通信时好时坏室温下能跑温度一降就概率性失败。用示波器量发现 SDA 的上升沿明显变缓差不多到了 800ns。算了一下总线上挂了两颗从机飞线长度加在一起有 20 多厘米总线电容大概有 300pF上拉电阻用了 10kΩ理论上升沿就是 0.8473 × 10k × 300p ≈ 2.5μs。这明显超出了快速模式的要求。我把上拉换成 2.2kΩ再把飞线剪短到 10 厘米以内问题彻底消失。经验是上拉电阻的选择要根据总线电容和通信速率来定。标准模式用 4.7kΩ 起快速模式建议 2.2kΩ如果总线上挂了 4 个以上的从机或者布线距离超过 20 厘米直接按 1.5kΩ 到 2.2kΩ 设计宁可稍微降低一点低电平功耗也别让上升沿拖后腿。5.2 电平不匹配与总线锁死两个高频事故第二个常遇到的是电平不匹配。主控是 3.3V 的 MCU从机是 5V 的传感器如果从机板子自带上拉电阻到 5V那么 SDA 和 SCL 的高电平就是 5V直接灌进 3.3V 主控的引脚长时间工作会损坏主控。正确的做法是使用电平转换芯片比如 PCA9306或者确保总线上的所有上拉电阻都接到 3.3V从机的开漏输出本身可以承受 3.3V 的高电平因为开漏器件只是把总线拉低并不会主动输出 5V 高电平。总线锁死也是个高频事故特征是一上电 SDA 就是低电平SCL 看起来有脉冲或者也没有脉冲。这种情况通常是从机在上电瞬间或者异常状态下把 SDA 拉死了。我的处理办法是先用万用表确认确实是锁死状态然后把 SDA 用一根杜邦线临时接到 VDD强制拉高一两秒让从机的状态机复位再撤掉线。大多数情况下从机会恢复正常。如果反复锁死就得去查从机的供电时序和复位引脚。5.3 示波器解码也会骗人永远以原始波形为准最后分享一个容易被忽视的坑示波器的协议解码功能不是万能的。我碰到过一次情况解码器显示地址是 0x50、ACK 正常、数据也对但设备就是不工作。我手动去看原始波形才发现第 9 个时钟位置的 SDA 其实只是一瞬间低了一下马上就被外部干扰弹回了高电平实际情况是 NACK。解码器按自己的算法把那个毛刺判成了有效 ACK而设备没有真正收到正确数据。从那以后我养成了一个习惯解码器显示结果只作为参考关键时刻一定放大原始波形用光标测量 ACK 位的实际电平持续时间。特别是排查间歇性故障时这一点几乎能决定你是在瞎猜还是真的定位到了问题。顺便说一句如果条件允许用逻辑分析仪长时间抓取总线配合解码头能更高效地捕捉偶发故障这是示波器单次触发很难做到的一个补充手段。我现在的调试习惯是万用表查静态、示波器看时序、逻辑分析仪抓偶发三者配合使用。每次遇到 I2C 问题先把这套流程走一遍基本都能在半小时内把问题范围缩得很小。希望这篇整理对你也有同样的帮助。

相关推荐

从脉冲到EtherCAT:机器人控制系统的通信进化之路
从脉冲到EtherCAT:机器人控制系统的通信进化之路

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

Emerson Ovation 1C31169G02 LC链路控制器主板解析与维护指南
Emerson Ovation 1C31169G02 LC链路控制器主板解析与维护指南

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

MCU晶振电路设计完全指南:从负载电容计算到起振排查
MCU晶振电路设计完全指南:从负载电容计算到起振排查

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

FSoE黑通道完全解读:功能安全通信的设计与实战
FSoE黑通道完全解读:功能安全通信的设计与实战

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

嵌入式偶发故障排查实战:串口假故障、蓝牙断连与烧录失败
嵌入式偶发故障排查实战:串口假故障、蓝牙断连与烧录失败

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

智能车竞赛疯狂电路组硬件设计解析:从Buck电源到IR2110驱动
智能车竞赛疯狂电路组硬件设计解析:从Buck电源到IR2110驱动

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

工业控制器数据分级存储方案:EEPROM、NOR Flash与SD卡的选型与实现
工业控制器数据分级存储方案:EEPROM、NOR Flash与SD卡的选型与实现

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

FOC从理论到实践:STM32电机控制工程细节与调试经验
FOC从理论到实践:STM32电机控制工程细节与调试经验

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

I2C多主机仲裁与时钟延展:从原理到工程实践
I2C多主机仲裁与时钟延展:从原理到工程实践

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

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战: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/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
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/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
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/5 10:28:07

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

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

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

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

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

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

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战: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/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
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/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
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/5 10:28:07

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码