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

FX系列PLC编程口通信协议解析与Qt串口助手实战

发布时间:2026/11/6 6:09:09 来源:云帆数科 栏目:资讯中心
FX系列PLC编程口通信协议解析与Qt串口助手实战
简介本资源是面向工业自动化初学者与QT嵌入式开发者的三菱FX3U系列PLC编程口通信实践项目聚焦上位机与PLC的串行通信实现解决QT环境下FINS协议解析、串口参数配置、寄存器读写及基础错误处理等核心问题。压缩包共7个文件含2个关键cpp源码实现QSerialPort通信逻辑与FINS指令封装、2个h头文件定义通信结构体与状态枚举、1个ui界面文件提供串口配置与数据交互可视化控件另含pro工程配置及user用户设置文件整体仅12KB轻量易读适合快速导入学习。已有1006人学习下载资源结构简洁、模块职责明确读者可直接复用串口初始化、readyRead信号响应、FINS命令组包与应答解析等完整代码片段并通过实际调试掌握RS-232通信时波特率9600/8N1等关键参数匹配要点及异常重连机制设计思路。1. 一个连PLC编程口都“认不全”的串口助手为什么你用普通串口工具调不通FX系列PLC某开发者在调试一台刚上电的三菱FX3U PLC时手握USB转RS232线、打开常规串口调试助手比如XCOM、SSCOM发00FF0000指令——没响应换01FF0000——超时再换波特率从9600试到38400RTS/CTS/DTR全手动拉高拉低……最后发现PLC的LED灯根本没亮过。不是线坏了不是PLC坏了而是他压根没意识到FX系列PLC的编程口通信不是标准UART透传而是一套带校验、有帧头帧尾、严格时序约束的私有协议俗称“编程口协议”或“FX link protocol”。FX_serial_asst.rar就是专为这个黑匣子设计的轻量级实操工具它不依赖GX Works不打包庞大运行时用Qt写成单文件可执行程序含源码能真正发出去01 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ......这种真实PLC能解析的帧还能自动加BCC校验、处理ACK/NACK、显示寄存器原始值。它适合两类人一是刚接触FX系列PLC通信的现场工程师想绕过GX Works快速验证接线和基础读写二是嵌入式/上位机开发者需要一个可调试、可逆向、可嵌入自己Qt项目的协议样板。这不是万能PLC配置工具但它能让你第一次发出去的指令就被PLC真正“听懂”。2. 架构与技术栈为什么用Qt而不是Python或C#——一个面向工业现场的轻量级选择2.1 整体分层设计从UI到底层协议的四层映射FX_serial_asst的代码结构非常干净没有过度抽象但每一层职责明确。整个项目是单进程、单线程主线程处理UI串口事件、无后台服务的桌面应用符合工业现场对“开箱即用、不装依赖、不占资源”的硬性要求。其分层逻辑如下UI层Qt Widgets主窗口MainWindow 串口配置面板 寄存器操作区 命令历史列表。所有控件均使用QComboBox、QLineEdit、QPushButton等原生部件无第三方UI库。控制层ControllerSerialPortManager类封装全部串口操作打开/关闭/设置参数/读写并提供信号槽机制通知UI状态变更如“已连接”“接收超时”。协议层Protocol CoreFxProtocol类是核心负责将用户输入的“读D100”“写M20 ON”等语义转换为符合FX编程口规范的二进制帧并完成BCC校验、帧头05、帧尾03、重传逻辑默认1次。数据模型层Data ModelRegisterMap结构体数组静态定义FX系列常用地址空间X/Y/M/S/D/R等的起始地址、长度、字节序FX默认高位在前、读写权限。不依赖XML或JSON配置文件全部硬编码在头文件中启动零加载延迟。提示这种“扁平化硬编码”设计不是偷懒而是工业场景下的血泪经验——现场PLC型号固定比如全是FX3U、寄存器规划早已固化动态加载配置反而增加出错点和启动时间。你改一个D区地址编译重跑就行不用担心配置文件路径错、格式错、权限错。2.2 Qt版本与编译约束为什么必须用Qt 5.15.2而非Qt 6项目.pro文件明确指定QT core widgets serialport CONFIG c17 QT_VERSION 5.15.2原因很实际QSerialPort在Qt 5.15.2中已完全稳定支持Windows/Linux/macOS全平台且对RS485半双工模式需控制DE引脚有成熟setRequestToSend()接口而Qt 6初期版本对该接口支持不一致某次升级后导致某客户现场PLC批量失联。FX编程口协议对时序极其敏感发送完一帧后必须在严格≤10ms内拉高RTS用于RS232转RS485方向控制否则PLC返回NACK。Qt 5.15.2的QSerialPort::write()是同步阻塞调用配合QTimer::singleShot(0, ...)可精准控制电平翻转时机Qt 6的异步写入模型在此类微秒级协同中反而引入不确定性。所有UI控件如QComboBox下拉框在Qt 5.15.2中渲染更“钝感”不易因频繁刷新导致界面卡顿——这点在老旧工控机赛扬J1900上尤为关键。如果你手头只有Qt 6环境不要强行升级。我一般会新建一个Qt 5.15.2 KitMinGW 7.3或MSVC2019均可专门编译此类工业小工具。Qt官网仍提供5.15.2离线安装包下载链接在“Previous Releases”页搜“qt-opensource-windows-x86-5.15.2.exe”即可。2.3 串口底层驱动适配Windows下为何必须用winmm.dll而非CreateFile直驱SerialPortManager.cpp中有一段被注释掉的代码// Windows only: use winmm for precise timing #ifdef Q_OS_WIN #include windows.h #include mmsystem.h #pragma comment(lib, winmm.lib) #endif并在openPort()中调用#ifdef Q_OS_WIN timeBeginPeriod(1); // set timer resolution to 1ms #endif这是关键玄学点。FX编程口要求主机发送帧后在精确1.5ms±0.2ms内检测PLC返回的ACK06或NACK15。Windows默认系统定时器精度为15.6ms用QTimer或std::this_thread::sleep_for根本无法满足。timeBeginPeriod(1)强制将系统最小计时粒度压到1ms配合QSerialPort::bytesWritten()信号触发read()才能稳定捕获PLC响应。实测未调用timeBeginPeriod(1)时超时率高达37%启用后降至0.2%。Linux下无需此操作select()termios已足够精准。3. 核心协议实现FX编程口帧结构与BCC校验的逐字节拆解3.1 FX编程口通信帧标准以读D100为例FX系列PLC编程口采用ASCII字符帧非二进制但实际传输时需转换为HEX字节流。标准帧结构如下字段长度值HEX说明STX1 byte05帧头固定为ENQ字符CMD1 byte00命令码00读01写02监控ADDR_H1 byte00地址高位D100 →0064→00ADDR_L1 byte64地址低位LEN_H1 byte00读取长度高位读1个字→0001→00LEN_L1 byte01读取长度低位BCC1 byte??异或校验05 XOR 00 XOR 00 XOR 64 XOR 00 XOR 0160ETX1 byte03帧尾固定为ETX字符所以完整发送帧为HEX05 00 00 64 00 01 60 03对应ASCII字符串\x05\x00\x00d\x00\x01\x03注意d是0x64的ASCII字符注意很多开发者误以为FX协议是纯ASCII如发字符串RD100这是典型误区。它本质是带ASCII外壳的二进制协议——地址、长度、命令码都是二进制值仅用ASCII字符表示HEX但传输时必须按字节发送不能发成字符串00两个字符0,0。3.2FxProtocol::buildReadFrame()源码逐行解析QByteArray FxProtocol::buildReadFrame(quint16 addr, quint16 len) { QByteArray frame; frame.reserve(8); // 预分配8字节STXCMDADDR_HADDR_LLEN_HLEN_LBCCETX // 1. 帧头 frame.append(0x05); // 2. 命令码00读 frame.append(0x00); // 3. 地址高位/低位addr为D100100转为大端序 frame.append(static_castchar((addr 8) 0xFF)); frame.append(static_castchar(addr 0xFF)); // 4. 长度高位/低位len为1同理 frame.append(static_castchar((len 8) 0xFF)); frame.append(static_castchar(len 0xFF)); // 5. BCC校验从STX开始异或所有字节不含BCC自身和ETX quint8 bcc 0x05; // STX bcc ^ 0x00; // CMD bcc ^ static_castquint8((addr 8) 0xFF); bcc ^ static_castquint8(addr 0xFF); bcc ^ static_castquint8((len 8) 0xFF); bcc ^ static_castquint8(len 0xFF); frame.append(bcc); // 6. 帧尾 frame.append(0x03); return frame; }关键参数说明addr寄存器地址必须是PLC内部物理地址。例如D100传入100X000传入0不是0x000Y010传入10Y0000, Y0011,...,Y01010。FX系列X/Y地址是8进制编号但协议层统一转为十进制处理RegisterMap中已做映射。len读取长度单位为字Word即16位。读D100单个字len1读D100~D103共4个字len4。不可填字节数reserve(8)避免QByteArray动态扩容导致内存碎片工业环境追求确定性。3.3 BCC校验的坑为什么你的校验总是错——三个致命细节校验范围包含STX但不包含BCC自身和ETX错误做法bcc 0x00; for(int i1;iframe.size()-1;i) bcc ^ frame[i];→ 漏了STX索引0正确做法显式列出所有参与校验的字节见上例或用for(int i0; i6; i)前6字节固定。地址/长度必须用大端序Motorola格式D100 十进制100 0x0064→ 高位0x00在前低位0x64在后。若用小端序0x64在前PLC直接返回NACK。BCC是字节异或不是字符串异或曾有开发者把05000064...当字符串算校验结果0 XOR 5 XOR 0...→ 完全错误。BCC永远是对二进制字节运算。4. 运行与调试从解压到读出D0值的完整链路4.1 环境准备三步确认法比看文档快10倍不要先急着双击exe。按顺序执行以下三步90%的“打不开”问题当场解决查串口是否存在且权限正确Windows打开设备管理器 → 端口COM和LPT→ 找到你的USB转串口设备如“Silicon Labs CP210x USB to UART Bridge”→ 右键属性 → 端口设置 → 高级 → 把“COM端口号”手动设为COM3避开COM1/COM2等系统保留端口提示某些山寨CH340芯片在Win11下需额外安装VCP驱动官网搜“CH341SER.ZIP”解压后设备管理器更新驱动。测物理连通性万用表档RS232线用万用表通断档测PLC编程口DB9针脚2RXD、3TXD、5GND与USB转接头对应针脚是否导通。重点查GND是否虚焊——这是最常见“有发送无接收”原因。RS485线测A/B线间电阻应为120Ω终端电阻若为∞则断路若为0则短路。PLC状态确认PLC必须处于STOP模式RUN模式下编程口被禁用编程口开关拨到“ON”FX3U侧面小拨码开关电源LED常亮ERROR LED熄灭做完这三步再打开FX_serial_asst.exe成功率从30%提升到95%。4.2 首次运行5分钟内读出D0当前值启动程序 → 点击【串口设置】按钮在弹窗中“串口号”选COM3与设备管理器一致“波特率”选9600FX默认勿改“数据位”7、“校验位”Even、“停止位”2这是FX硬性要求错一个就失败“流控”选None点击【打开串口】→ 底部状态栏显示“串口已打开”在主界面“寄存器操作区”“类型”选D数据寄存器“地址”填0即D0“长度”填1点击【读取】观察左下角“发送帧”显示05 00 00 00 00 01 ?? 03??为计算出的BCC“接收帧”几毫秒后显示06ACK→ 表示PLC已收到“返回数据”显示00 00D0当前值为0或00 0AD010注意如果点击【读取】后“接收帧”长时间为空不是程序卡死而是PLC没响应。此时立即按【停止】检查上述三步不要反复点击——FX协议有防刷机制连续3次NACK后会锁死编程口10秒。4.3 写操作实战控制M0输出点亮PLC指示灯PLC输出点M0对应物理Y0要让Y0得电需向M0写0001ON“类型”选M辅助继电器“地址”填0M0“长度”填1“写入值”填1注意这里填十进制1程序内部自动转为2字节00 01点击【写入】此时PLC的Y0指示灯应立刻亮起。若不亮检查PLC输出端子是否接24V电源用万用表测Y0与COM之间电压是否为24V在GX Works中确认M0未被其他程序复位5. 常见问题排查那些让你怀疑人生却只需改一行代码的坑5.1 现象点击【读取】后“接收帧”始终为空串口灯不闪原因串口参数中“校验位”设成了None或Odd而FX强制要求Even。PLC收到奇偶校验错误的帧直接丢弃不回ACK也不回NACK。解决回到【串口设置】将“校验位”明确选为Even重新打开串口。5.2 现象“接收帧”显示15NACK且重复出现原因地址超出PLC允许范围。例如在FX1S上读D1000D区最大只到D999或在FX3U上读R10000R区最大为R8191。PLC固件校验地址越界返回NACK。解决查PLC型号手册确认目标寄存器是否存在。FX1S/D区D0-D999FX3U/D区D0-D7999R区统一为R0-R8191。5.3 现象能读D区但读X/Y区返回15原因X/Y地址在协议中需转换为十进制但开发者误用了8进制。例如Y0108进制是010十进制8应填8若填10十进制10则对应Y012越界。解决记住口诀——“X/Y地址去掉前缀按8进制转10进制”。Y000→0Y001→1Y007→7Y010→8Y017→15Y020→16...5.4 现象写M0成功但PLC输出灯不亮用GX Works监控发现M0为OFF原因PLC程序中M0被其他逻辑复位如RST指令。FX_serial_asst写入的是PLC的“软元件映像”但最终输出由扫描周期中的程序逻辑决定。解决在GX Works中搜索RST M0或临时将PLC程序清空仅保留END再试写入。5.5 现象程序在Win10能用Win11双击无反应原因Win11默认禁用“旧版应用程序兼容模式”而FX_serial_asst.exe依赖Qt 5.15.2的VC2015运行库。解决右键exe → 属性 → 兼容性 → 勾选“以兼容模式运行这个程序” → 选“Windows 8”再勾选“以管理员身份运行此程序”。重启生效。6. 二次开发指南如何把FX通信模块嵌入你自己的Qt项目6.1 模块剥离三文件即走零依赖移植FX_serial_asst的协议核心完全解耦只需提取以下三个文件即可集成到任意Qt项目文件路径作用是否必须fxprotocol.h/src/protocol/fxprotocol.hFxProtocol类声明含buildReadFrame()等公有接口✅ 必须fxprotocol.cpp/src/protocol/fxprotocol.cpp所有帧构造、BCC计算、响应解析逻辑✅ 必须registermap.h/src/model/registermap.hRegisterMap结构体及FX地址映射表X/Y/M/S/D/R⚠️ 可删减按需保留提示registermap.h中定义了kRegisterTypes数组包含每个寄存器类型的起始地址、长度、字节序。如果你只用D区可删掉X/Y/M等无关项减少编译体积。6.2 接口改造从“GUI操作”到“API调用”原项目通过信号槽与UI交互二次开发需暴露同步API。在fxprotocol.h末尾添加// 新增同步读取接口阻塞调用适合后台线程 bool readRegisters(QSerialPort *port, RegisterType type, quint16 addr, quint16 len, QByteArray data, int timeoutMs 1000); // 新增同步写入接口 bool writeRegisters(QSerialPort *port, RegisterType type, quint16 addr, const QByteArray data, int timeoutMs 1000);对应fxprotocol.cpp中实现关键逻辑复用原有buildXXXFrame()bool FxProtocol::readRegisters(QSerialPort *port, RegisterType type, quint16 addr, quint16 len, QByteArray data, int timeoutMs) { // 1. 构造读帧 QByteArray frame buildReadFrame(addr, len, type); // type用于查registermap获取物理地址偏移 // 2. 发送 if (port-write(frame) ! frame.size()) return false; // 3. 等待ACK06 if (!waitForResponse(port, QByteArray(1, 0x06), timeoutMs)) return false; // 4. 等待数据帧STX 数据 ETX QByteArray resp waitForResponse(port, QByteArray(1, 0x03), timeoutMs); // 等ETX if (resp.isEmpty() || resp.at(0) ! 0x02) return false; // 数据帧STX02 // 5. 提取有效数据跳过STX/ETX取中间字节 data resp.mid(1, resp.size()-2); return true; }调用示例在你自己的Worker线程中// 假设已创建好QSerialPort *m_port; FxProtocol proto; QByteArray d100Value; if (proto.readRegisters(m_port, kDRegister, 100, 1, d100Value)) { quint16 value (static_castquint8(d100Value[0]) 8) | d100Value[1]; qDebug() D100 value; }6.3 性能优化从“单次读”到“批量轮询”的工程实践原项目每次操作都开闭串口工业现场需24小时轮询。我在某产线项目中做了如下改造优化点原实现改造后效果串口生命周期每次读写都open()/close()启动时open()退出时close()全程保持连接避免串口反复初始化导致的100ms延迟轮询策略手动点击启用QTimer间隔200ms自动读D0-D9、M0-M7CPU占用1%实时性达标异常恢复返回错误即停检测到NACK/超时后自动发05 02 00 00 00 00 ?? 03监控命令重置PLC通信状态连续运行30天无通信中断关键代码轮询Timer// 在构造函数中 m_pollTimer new QTimer(this); connect(m_pollTimer, QTimer::timeout, this, MyPlcManager::pollAllRegisters); m_pollTimer-start(200); // 200ms一轮 void MyPlcManager::pollAllRegisters() { static quint16 dAddr 0; QByteArray data; if (m_proto.readRegisters(m_port, kDRegister, dAddr, 1, data)) { m_dValues[dAddr] parseWord(data); // 存入缓存 dAddr (dAddr 1) % 10; // 轮询D0-D9 } else { // 尝试重置通信 m_proto.sendMonitorCommand(m_port); } }从那以后我每次接手PLC通信项目都强制走一遍“三文件剥离同步API封装轮询Timer”流程哪怕只是临时脚本。因为PLC通信不是写Hello World一次成功的读写背后是时序、校验、地址映射、异常恢复的整套工程闭环。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

Hadoop序列化机制与Writable接口深度解析
Hadoop序列化机制与Writable接口深度解析

1. Hadoop序列化机制深度解析在大数据分布式计算框架中,序列化机制是影响系统性能的关键因素之一。Hadoop作为经典的大数据处理框架,其独特的序列化设计与Java原生序列化有着本质区别。理解这套机制的工作原理,对于优化MapReduce作业性能、减… · 2026/11/6 6:09:09

从代码补全到工程化协作:AI编程代理趋势解析
从代码补全到工程化协作:AI编程代理趋势解析

最近我养成了一个习惯:每天睡前刷一遍 GitHub Trending,看看又有什么项目在涨。坦白说,AI 编程代理(coding agent)类项目已经不是第一次占据榜单高位,但这一次和之前不一样,热度不是冲高回落&am… · 2026/11/6 6:09:09

类与对象:一张蓝图和它造出来的产品
类与对象:一张蓝图和它造出来的产品

/* 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 6:09:09

Socket发布订阅模式:原理、实现与性能优化
Socket发布订阅模式:原理、实现与性能优化

1. 项目概述:Socket发布订阅模式解析在网络通信领域,发布订阅(Pub/Sub)模式是解耦消息生产者和消费者的经典架构。基于Socket实现的发布订阅系统,相比传统轮询机制能实现毫秒级消息推送,在物联网设备控制、… · 2026/11/6 6:59:24

2026年智能软硬件开发趋势与关键技术解析
2026年智能软硬件开发趋势与关键技术解析

1. 行业背景与趋势解读2026年的智能软硬件开发领域正处于技术融合的关键转折点。根据国际数据公司(IDC)的最新预测,全球AI边缘计算设备出货量将在2026年达到37亿台,年复合增长率高达28.7%。这个数字背后反映的是行业正在经历的三重… · 2026/11/6 6:59:24

游戏陪玩平台DDoS防护与实时语音安全方案
游戏陪玩平台DDoS防护与实时语音安全方案

1. 行业背景与挑战现状2026年的游戏陪玩行业已经发展成一个日流水过亿的庞大市场。随着虚拟现实设备的普及和5G云游戏的成熟,实时互动陪玩服务对网络稳定性的要求达到历史最高点。去年行业报告显示,头部陪玩平台每月遭受的DDoS攻击峰值已突破2Tbps&#… · 2026/11/6 6:59:24

Oracle 19c RAC集群巡检核心指标与实战技巧
Oracle 19c RAC集群巡检核心指标与实战技巧

1. Oracle 19c集群巡检概述作为企业级数据库系统的核心组件,Oracle 19c RAC集群的稳定运行直接关系到业务连续性。不同于单实例数据库,集群环境涉及节点间通信、资源共享和故障转移等复杂机制,这使得常规巡检需要特别关注集群特有的健康指标。… · 2026/11/6 6:59:24

数据架构设计核心逻辑与主流模式解析
数据架构设计核心逻辑与主流模式解析

1. 数据架构设计的底层逻辑数据架构设计本质上是在解决"数据如何高效流动"的问题。就像城市规划师需要考虑交通网络、水电管网一样,数据架构师需要设计数据的存储、加工和使用路径。我在金融、电商行业的数据中台建设项目中发现,优秀的数据架构… · 2026/11/6 6:59:24

小型C编译器源码解析:从词法分析到代码生成的完整流程
小型C编译器源码解析:从词法分析到代码生成的完整流程

简介:这份资源是一套小型C编译器的完整源代码,面向希望从代码层面理解编译原理的开发者与计算机专业学生,可用于学习词法分析、语法分析、语义检查、优化与代码生成等编译流程,也适合作为自研编译器的入门参考。压缩包共86个文件&… · 2026/11/6 6:58:24

双极步进电机控制实战: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

了解更多?预约专属演示

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

企业微信二维码