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

基于STM32F103与LAN9252的EtherCAT从站开发实战:64入64出方案

发布时间:2026/11/3 3:04:30 来源:云帆数科 栏目:资讯中心
基于STM32F103与LAN9252的EtherCAT从站开发实战:64入64出方案
简介这份文档面向嵌入式开发工程师与工业以太网学习者围绕STM32F103与LAN9252构建EtherCAT从站这一典型方案展开重点解决从站开发中硬件连接、协议栈移植与配置理解等实际问题。资源包共1个docx文件约1.75MB内容涵盖LAN9252四种工作模式的对比与SPI模式选型依据、XML设备描述文件与SSC工具的使用思路、原理图与PCB设计要点以及HW_Init、MainInit、MainLoop等协议栈骨架的拆解。文中还梳理了SPI接口使能、1ms定时器中断、IRQ与SYNC0/SYNC1外部中断的配置顺序及中断回调处理并给出TwinCAT2组态与PLC调试的配套工具清单。目前已有2921人学习适合需要理解EtherCAT从站通信流程、对照移植代码与排查中断配置问题的开发者参考。1. 从一块学习板到 64 入 64 出从站这套方案要解决什么接手这个需求的时候手上只有一台倍福 CX9020 主站和一句“做 64 入 64 出的 EtherCAT 从站”。主站跑的是 Windows CE 加 TwinCAT2.0ARM 架构网卡是专用的从站侧要自己选 MCU、自己画板、自己把协议栈跑起来。EtherCAT 是一主多从的工业以太网协议从站必须一进一出、不能终结总线这意味着硬件上至少要有两个 RJ45 口软件上要处理过程数据、邮箱通道和状态机。选型落在 STM32F103 加 LAN9252 上前者便宜、资料多、HAL 库成熟后者把 PHY、网络交换和 ESC 三件事一颗芯片全包了MCU 只需要通过 SPI 跟它对话。这套方案适合正在做工业通信毕设、课设或者要给现有设备补一个 EtherCAT 接口的工程师照着走能把“原理图—XML—协议栈—联调”这条链路完整跑通。2. 总体架构与选型LAN9252 四种模式里为什么选 SPI2.1 从站的角色拆解与 LAN9252 的职责边界先把系统里谁干什么说清楚后面所有配置才有依据。整个从站由三部分组成RJ45 与变压器构成的物理入口、LAN9252 这颗 EtherCAT 从站控制器ESC、以及 STM32F103 这颗应用层 MCU。LAN9252 承担三件事第一它是 PHY所有跟以太网线缆打交道的工作包括编解码、链路检测、自协商全在它内部完成STM32 完全不碰以太网时序第二它是网络交换单元EtherCAT 要求从站具备一拖一能力总线信号从端口 0 进来、从端口 1 出去LAN9252 内部做转发所以它必须工作在 2 端口或 3 端口模式不能做成单口终结第三它是 SPI 从机把主站下发的过程数据缓存到内部寄存器再等 MCU 通过 SPI 来取同时把 MCU 写进来的输入数据挂到总线上。这个分工决定了 MCU 侧的资源需求非常克制一路 SPI、一个 1ms 定时器、三个外部中断就这些。反过来说如果选型时想让 MCU 直接跑 MAC 加 PHY 的方案软件上要自己实现 EtherCAT 数据链路层工作量不是一个量级。LAN9252 把最难的实时链路部分硬件化了MCU 只做应用逻辑这是这套架构最划算的地方。2.2 四种工作模式的取舍依据LAN9252 的数据手册列了四种模式数字 I/O 自工作模式8 入 8 出不需要 MCU 参与SPI 串口模式四线串行也支持 SQI 六线高速并行模式 HBI16 位或 8 位数据总线扩展模式SPI 与 MCU 通信的同时对外再引一组 MII可以多挂一颗 PHY 多接一个 RJ45。本项目的需求是 64 入 64 出数字 I/O 模式只有 8 入 8 出直接排除。并行 HBI 模式速度快但会占用 STM32F103 大量 GPIOF103 的引脚资源本来就紧张还要留出调试口和指示灯不划算。扩展模式适合需要三个网口的场景本项目两个口够用多挂 PHY 只会增加布线和调试成本。SPI 模式四根线解决问题标准模式时钟最高 30MHz高速 SQI 模式能到 80MHz对 6464 位的过程数据来说带宽绰绰有余。所以选 SPI是引脚成本、开发复杂度和带宽三者平衡后的结果不是拍脑袋。2.3 硬件连接与关键引脚定义原理图阶段要盯住的信号不多但每一个都不能错。SPI 四根线是 SCK、MISO、MOSI、CS其中 CS 建议用硬件片选或者普通 GPIO 由协议栈控制不要指望 SPI 外设自动管理。中断侧有三根IRQ 是 ESC 中断PDI 收到主站数据或者状态变化时拉低这是必须实现的一根SYNC0 和 SYNC1 是分布式时钟同步信号如果启用 DC 功能就要接不启用可以悬空但建议预留。复位引脚和 EEPROM 的 I2C 线也要接好EEPROM 选 24FC512512Kbit 容量这里有个血泪经验EEPROM 型号尽量用这颗换别的型号出现过上电识别不稳定的情况属于玄学范畴但确实存在。电源部分注意 LAN9252 有 3.3V 和 1.2V 内核电压需求按手册给的参考电路做去耦电容别省。晶振用 25MHz给 PHY 提供时钟。RJ45 侧的网络变压器和终端匹配按 EtherCAT 规范来两个口一进一出指示灯可以接 LAN9252 的 LINK/ACT 引脚。3. 设备描述文件用 SSC 生成 XML 与 EEPROM 配置3.1 SSC 建工程与 IO 点位定义SSC 是 EtherCAT 协会提供的从站协议栈代码工具能根据配置生成协议栈源码和设备描述 XML。新建工程时不要用默认模板选 Custom 后下拉选 EL9800 那个 8 位数字 I/O 模板它对应的就是 SPI 加 PIC 的评估板配置跟我们的架构最接近。建完工程先保存工具会弹出一个 Excel这份表就是 IO 点位的定义入口。64 入 64 出对应 Excel 里//0x6nnx和//0x7nnx两组条目输入映射到 0x6000 段输出映射到 0x7000 段每个 bit 一行用 Excel 的批量拖拽填满 64 行。最后把Maximum number of modules改成 3。保存后 SSC 会自动提示导入导入完点Project - Create new Slave Files生成协议栈和 XML。这一步生成的代码不能直接烧进 STM32但里面跟对象字典相关的.c文件价值极高后面移植时直接参考。3.2 XML 结构剖析与必须改的字段XML 用 XMLSpy 或 XML Notepad 打开顶层是 Vendor 和 Descriptions 两个节点。Vendor 下的 id 和 name 来自协会会员信息ImageData16x14 是 16 色位图的十六进制数据用画图做一个 16x14 的 logo 转成 hex 填进去即可。Descriptions 下重点看几处Device-Physics填 YY表示两个 RJ45 一进一出Device-Type下的 ProductCode 和 RevisionNo 是设备唯一标识TwinCAT 靠这两个字段区分设备两份 XML 这两个值一样的话只会识别其中一个迭代版本时记得同步升 RevisionNoDevice-Name随便取但要跟后面字典里的 Device name 对得上。字典部分在Profile-DataType和Profile-Objects前者相当于 typedef后者相当于变量定义。比如 index 为 0x1008 的 Device name 对象类型是 STRING(10)就要去 DataType 里找 STRING(10) 的定义BitSize 是 80正好 10 个字节。这部分 SSC 全帮你生成了手工改极易出错不建议动。IO 点位在 Device 下的四个 Sm 节点里Inputs 和 Outputs 分别指向 RxPdo 和 TxPdo每个 Entry 就是 Excel 里定义的一个点SSC 生成了 128 个 Entry手工录的话工作量恐怖。3.3 ConfigData 那 14 个字节怎么定XML 末尾的 EEPROM 节点里ByteSize 写 2048ConfigData 是 14 个字节这组数据决定 LAN9252 上电后怎么配置自己。SSC 默认按 ET1100 生成值是050E03440A0000000000用 LAN9252 必须改。查 LAN9252 的迁移应用笔记2.3 节给出的值是800E00CC8813F0000000800000。第一个字节 0x80 对应寄存器 0x0140也就是 Process Data Interface 寄存器写 0x80 就是 SPI 模式跟我们 2.2 节的选型完全对应。后面几个字节分别配置中断极性、EEPROM 大小、PDI 相关参数暂时不理解就保持手册默认值不要自己发挥。!-- EEPROM 节点示例ByteSize 按物理芯片容量写ConfigData 首字节 0x80 表示 SPI 模式 -- EEPROM ByteSize2048/ByteSize ConfigData800E00CC8813F0000000800000/ConfigData /EEPROM这份 XML 最终要放到 TwinCAT 安装目录的Io/EtherCAT下组态时由主站烧进 EEPROM之后从站每次上电LAN9252 自己从 EEPROM 读这 14 个字节完成初始化。所以 XML 改错一个字节现象就是设备能扫到但起不来或者干脆扫不到排查时优先怀疑这里。4. STM32 侧外设配置与协议栈对接4.1 CubeMX 里配什么、哪些使能要注释掉用 CubeMX 建 STM32F103ZE 工程配三样东西。SPI 配四线标准模式主机模式时钟先给 15MHz 左右跑通后再往上提标准模式上限 30MHz。定时器配 1ms 周期中断命名 ECAT_CheckTimer协议栈的看门狗和周期处理都挂在这个中断里。三个外部中断配在 IRQ、SYNC0、SYNC1 对应的引脚上下降沿触发。NVIC 分组用 2 位抢先、2 位响应。优先级安排ECAT_CheckTimer 给 1 抢先 0 响应PDI_Isr 给 1 抢先 0 响应SYNC0 和 SYNC1 给 2 抢先 0 响应。这里有个必须做的动作CubeMX 生成代码后去gpio.c和tim.c的初始化函数末尾把使能中断的那行HAL_NVIC_EnableIRQ注释掉。原因很直接中断什么时候开必须由协议栈的状态机决定一上电就开外部中断ESC 还没初始化完中断进来读到的全是无效数据现象就是死活连不上。这个坑我见过不止一次属于典型的一上电就翻车。/* gpio.c 中生成的中断使能语句移植时注释掉改由协议栈调用 */ // HAL_NVIC_EnableIRQ(LAN9252_IRQ_EXTI_IRQn); // HAL_NVIC_EnableIRQ(LAN9252_SYNC0_EXTI_IRQn); // HAL_NVIC_EnableIRQ(LAN9252_SYNC1_EXTI_IRQn); /* tim.c 中同理 */ // HAL_NVIC_EnableIRQ(ECAT_CHECK_TIM_IRQn);注释掉之后在协议栈暴露的接口里补上对应的使能函数比如HW_EnableIrq()里调HAL_NVIC_EnableIRQHW_DisableIrq()里调HAL_NVIC_DisableIRQ让协议栈按自己的节奏开关。4.2 SPI 读写函数的封装与协议栈接口对接协议栈不关心你用的是 HAL 还是寄存器它只认几个固定名字的函数。SPI 部分通常要实现字节读写和块读写把 HAL 的HAL_SPI_TransmitReceive包一层。注意 SPI 是全双工读的同时在写写的同时在读所以不要配中断也不要把读写拆成两个独立动作。/* 协议栈期望的单字节读写CS 由上层控制这里只做数据交换 */ uint8_t HW_EepromReadByte(uint16_t addr) { /* EEPROM 走 I2C略 */ } /* SPI 单字节交换发一个字节同时收回一个字节 */ uint8_t SPI_ReadWriteByte(uint8_t data) { uint8_t rx 0; HAL_SPI_TransmitReceive(hspi1, data, rx, 1, 100); return rx; } /* 块读协议栈读过程数据时用len 一般不超过 64 */ void SPI_ReadBlock(uint8_t *buf, uint16_t len) { HAL_SPI_Receive(hspi1, buf, len, 100); }参数上注意超时给足100ms 是保守值实际单字节远小于这个数。CS 引脚建议在块操作前后手动拉低拉高不要依赖硬件 NSS因为 LAN9252 的 SPI 时序对 CS 建立和保持时间有要求硬件自动片选在高速下容易出问题。封装完之后把协议栈里HW_Init()调用的底层函数逐个替换成自己的实现编译能过就说明接口对上了。4.3 中断回调的统一入口三个外部中断最终都汇到HAL_GPIO_EXTI_Callback按引脚分派给协议栈的PDI_Isr、Sync0_Isr、Sync1_Isr。SYNC 两个中断在进入前要先关 ESC 中断处理完再开避免嵌套。void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin LAN9252_IRQ_Pin) { PDI_Isr(); /* ESC 主中断必须实现 */ return; } if (GPIO_Pin LAN9252_SYC0_Pin) { DISABLE_ESC_INT(); /* 同步中断处理期间屏蔽 ESC 中断 */ Sync0_Isr(); ENABLE_ESC_INT(); return; } if (GPIO_Pin LAN9252_SYC1_Pin) { DISABLE_ESC_INT(); Sync1_Isr(); ENABLE_ESC_INT(); return; } }定时器中断里调ECAT_CheckTimer()这个函数负责协议栈的周期任务和看门狗喂狗1ms 一次不能断。整个协议栈跑起来的骨架就三句HW_Init()初始化硬件抽象层MainInit()初始化协议栈状态机然后while(1)里死循环调MainLoop()。协议栈内部极其复杂几乎没法逐行读但从这个骨架入手知道入口在哪、周期任务在哪调试时就有抓手。5. 联调避坑从“扫不到设备”到“数据对不上”的排查顺序5.1 设备扫不到先查 EEPROM 和 ConfigData现象是 TwinCAT 扫描网络时看不到从站或者能看到但显示为未知设备。原因大概率在 EEPROM要么 24FC512 没焊好、I2C 地址不对要么 XML 里的 ConfigData 还是 ET1100 的默认值LAN9252 上电后按错误配置初始化PDI 根本没切到 SPI 模式。解决方法是先用编程器单独读写一次 EEPROM 确认芯片正常再核对 ConfigData 首字节是不是 0x80最后确认 XML 确实被烧进了 EEPROM 而不是只放在 TwinCAT 目录里。5.2 能扫到但连不上 OP 状态现象是设备出现在扫描列表里状态机停在 PREOP 或 SAFEOP 上不去。原因通常是中断使能时机不对一上电就开了 IRQ 或定时器中断协议栈状态机还没走到该开的时候。解决方法是回到 4.1 节确认 CubeMX 生成的使能语句已注释所有中断开关都走协议栈接口。另一个可能是 1ms 定时器没跑起来看门狗超时用示波器量一下定时器中断引脚翻转或者打个 GPIO 翻转确认。5.3 过程数据方向反了或数量不对现象是 PLC 侧能读写但 64 个输入点对应到了输出或者只通了前 8 个点。原因在 XML 的 PDO 映射Excel 里//0x6nnx和//0x7nnx填反了或者Maximum number of modules没改成 3 导致模块数不够。解决方法是重新核对 Excel 两组条目的起始地址改完重新生成 XML 和协议栈重新烧 EEPROM不要只改 XML 不重新生成。5.4 SPI 通信偶发失败现象是大部分时间正常偶尔读回全 0 或全 FF。原因多半是 CS 时序或 SPI 时钟太快标准模式标称 30MHz但实际布线、线长、上拉电阻都会影响15MHz 稳定不代表 30MHz 稳定。解决方法是先把 SPI 时钟降到 10MHz 以下验证功能再逐步往上提找到稳定上限后留 20% 余量。同时检查 CS 的拉低到第一个时钟沿之间是否有足够延时必要时在代码里加几个空操作。6. 验收与答辩怎么证明这套从站真的通了验收这件事我一般不看“能连上”这一个指标而是分三层走。第一层是物理与识别层TwinCAT 扫描能列出设备设备名、Vendor ID、Product Code 跟 XML 里定义的一致状态机能从 INIT 走到 PREOP。这一层用 TwinCAT 的在线状态栏截图就能证明答辩时把 XML 里 ProductCode 的值和界面上显示的值并排放在一页说服力比口头说强得多。第二层是数据层64 入 64 出全部打通不是通几个点就算。做法是在 PLC 侧写一段测试程序把输出字的每一位按 1Hz 轮流置位观察从站面板上 64 个 LED 是否按预期逐个点亮输入侧用键盘或拨码开关逐位给信号在 TwinCAT 的变量监视窗口里看对应 bit 是否翻转。这里建议做一个点位对照表把 Excel 里的偏移、XML 里的 Entry 索引、PLC 里的变量名三列对齐验收时逐行打勾。表格比口头描述可靠答辩老师或者甲方看到这张表基本就认可你把映射关系理清了。验收项判定标准验证手段设备识别扫描列表出现且信息与 XML 一致TwinCAT 扫描截图状态机能进入 OP 状态并保持在线状态栏观察 10 分钟输出通路64 位逐位点亮无遗漏PLC 轮询程序加 LED 观察输入通路64 位逐位翻转无错位拨码开关加变量监视周期稳定性1ms 任务不丢拍定时器中断内翻转 GPIO 示波器测第三层是稳定性让从站连续跑半小时以上期间反复插拔网线、重启主站看能否自动恢复。EtherCAT 的卖点是实时和可靠答辩时如果能拿出一段连续运行的日志或者示波器上稳定的 1ms 方波比任何 PPT 都有分量。有个习惯我从这个项目之后一直保留每次改完 XML 或者 EEPROM 配置一定先单独烧录、单独上电、单独扫描确认这一层没问题再往下动代码。早期我图省事XML 和协议栈代码一起改结果连不上时分不清是哪边的问题白白耗了两天。把变更拆开、逐层验证看起来慢实际是最快的路径。希望这套流程能帮到你少走几个我踩过的坑。本文还有配套的精品资源点击获取

相关推荐

Obsidian文档快速分享插件开发实战
Obsidian文档快速分享插件开发实战

1. 为什么需要Obsidian文档快速分享插件?作为一个深度使用Obsidian超过两年的用户,我深刻体会到知识管理工具中"分享"功能的缺失带来的不便。Obsidian作为本地优先的Markdown笔记工具,其核心设计理念是保护用户隐私和数据主权&… · 2026/11/3 3:04:30

实时流处理中的窗口机制:滚动与滑动窗口详解
实时流处理中的窗口机制:滚动与滑动窗口详解

1. 实时流处理中的窗口机制概述在分布式流处理系统中,窗口机制是处理无界数据流的核心技术之一。作为Apache Storm的核心功能,Windowing机制允许我们将连续的数据流划分为有限的块进行处理,这对于聚合计算、状态管理和时间序列分析等场景至关… · 2026/11/3 3:03:30

从课程资料到医疗机器学习系统设计:样本量、交叉验证与避坑指南
从课程资料到医疗机器学习系统设计:样本量、交叉验证与避坑指南

简介:面向高校机器学习课程期末大作业与系统设计报告写作需求,这份文档以医疗保健智能系统为主题,围绕膀胱癌诊断场景给出可参考的完整范例。内容从机器学习在医学诊断中的基础切入,梳理影像学、尿细胞学、卡介苗治疗预后及术后预… · 2026/11/3 3:03:30

构建持续进化的个人知识系统:方法与工具
构建持续进化的个人知识系统:方法与工具

1. 为什么学习后的持续进化如此重要?我们都有过这样的经历:花几个月时间学完某个课程或掌握某项技能后,很快发现学到的知识开始变得陈旧。技术迭代的速度远超我们的想象——根据Stack Overflow的年度开发者调查,主流编程框架的平均… · 2026/11/3 3:31:34

密评工具不是跑分器:构建可复现的密码应用证据链
密评工具不是跑分器:构建可复现的密码应用证据链

简介:《商用密码应用安全性评估测评工具指引》面向参与商用密码应用安全性评估的测评机构、密码产品厂商及信息化建设单位,用于回答“选用何种测评工具、工具应满足哪些安全与技术要求”这一实操问题。内容围绕测评工具类别展开,区分密码应用… · 2026/11/3 3:31:34

小学生C++竞赛初赛卷解析:计算机基础与C++语法考点
小学生C++竞赛初赛卷解析:计算机基础与C++语法考点

简介:这份第二十九届厦门市小学生计算机C语言竞赛初赛试卷,面向备考小学C编程竞赛的学生、信息学社团教师及辅导者,可用于熟悉初赛题型、组织模拟测评和定位知识薄弱点。资源共1个PDF文件,压缩包约310KB,保留试卷版式&… · 2026/11/3 3:31:34

密评测评工具链分层选型与SM2/SM3/SM4现场取证指南
密评测评工具链分层选型与SM2/SM3/SM4现场取证指南

简介:《商用密码应用安全性评估测评工具指引》由中国密码学会密评联委会发布,面向密评机构、密码应用建设与运维单位及信息系统安全负责人,用于解决测评工具选型、使用与安全管控缺少统一依据的问题。文件围绕测评工具类别、安全要求与技术要… · 2026/11/3 3:31:34

C++竞赛初赛45题90分钟:语法常识、进制计算与程序阅读拿分法
C++竞赛初赛45题90分钟:语法常识、进制计算与程序阅读拿分法

简介:这份试卷面向准备参加厦门市小学生计算机C语言竞赛的选手及信息学辅导教师,可用于初赛自测、考点梳理与课堂练习。内容为第二十九届厦门市小学生计算机C语言竞赛初赛真题,满分100分、限时90分钟、共四大题45小题,覆盖信息技术… · 2026/11/3 3:31:34

深入理解内存对齐:原理、优化与实践
深入理解内存对齐:原理、优化与实践

1. 内存对齐的概念与必要性内存对齐是计算机系统中一个基础但极其重要的概念。简单来说,它指的是数据在内存中的存储位置必须满足特定边界要求。比如一个4字节的int型变量,在32位系统上通常需要从4的倍数地址开始存放。为什么需要内存对齐?这… · 2026/11/3 3:30:34

双极步进电机控制实战: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/2 13:10:28

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/2 4:42:45

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/2 5:17:18

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
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个工程问题
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隔离方案设计与实践
基于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驱动调试
双极步进电机控制实战: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 步进电机驱动实战解析
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工业级双极步进电机控制方案
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

了解更多?预约专属演示

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

企业微信二维码