我做了好几年自动化相关的工作这几年明显感觉到一件事大家已经不太满足于“跟大模型聊几句天”而是想让它真正“动手干活”。Hermes Agent 这个名字最近在智能体开发圈子里出现得越来越多它是一个把大模型、工具调用、任务编排整合到一起的智能体运行框架核心价值是让模型不再停留在生成文本而是能调用外部工具、完成实际操作。这篇文章是“入门到精通”系列基础篇的第一讲我会从零开始讲清楚 Hermes Agent 的基础概念、核心架构、安装步骤并带你把第一个示例任务完整跑通。适合刚接触智能体开发、需要一个可落地框架的开发者阅读就算你之前只写过简单的 Python 脚本也完全可以跟上。1. Hermes Agent 到底是什么1.1 它到底解决了什么问题因为工作关系我经常听到这样的抱怨“大模型很聪明但让它查个数据、发个通知、生成个文件就没下文了。”这其实不是模型能力不够而是缺少一层能把“对话能力”和“外部工具”连接起来的中间层。只靠对话模型永远只能给你建议不能替你执行而真实业务里大部分价值恰恰藏在执行里。Hermes Agent 的思路是把“发号施令”和“动手执行”分开。它自己不生产模型能力而是作为调度中枢接收你的自然语言需求调用底层模型做意图判断再根据判断结果去触发具体的工具工具拿回结果后模型再综合判断下一步怎么做。你可以把它理解成一个“执行助理”——老板说“把上周的销售数据整理成表格发我”助理不会只回一句“建议你用Excel”而是真的去拉数据、建表格、发邮件。这套设计解决的三个核心问题也很明确。第一对话与行动脱节。模型能理解需求但缺一个执行出口Hermes Agent 补上这个出口。第二工具集成碎片化。每个外部系统都有自己的调用方式手动拼装容易乱Hermes Agent 提供了一个统一的工具注册和调用规范。第三任务过程不可控。自己写胶水代码串流程出了问题很难排查而使用 Agent 框架之后每一步的输入输出、工具调用记录、token 消耗都能被追踪到这对于真正上生产非常重要。1.2 它和“纯模型”以及“工作流工具”的区别先把一个容易混淆的点说清楚。很多朋友看到 Hermes Agent 里有“Hermes”字样以为它是一个具体的模型其实不是。Hermes Agent 是一个运行时框架底层接的是模型服务你完全可以按需切换不同的模型框架本身的职责是“组织调用”不是“生成回答”。为了更好理解它的定位我习惯用下面的表格对比几种常见方案方案核心角色优点局限纯大模型文本生成理解能力强部署简单无法调用外部系统结果不可执行人工写胶水代码固定流程逻辑完全可控需求一变就要改代码维护成本高工作流编排工具流程引擎可视化适合稳定流程灵活性低难以处理开放性问题Hermes Agent智能调度中枢模型主导决策工具统一接入需要处理好边界与控制问题从这张表能看出来Hermes Agent 和“固定工作流”最大的不同是它把决策权交给了模型。固定工作流是“遇到 A 情况就走第 1 步遇到 B 情况就走第 2 步”而 Hermes Agent 是“根据用户这句话模型自己判断该调用哪个工具、调用几次、什么时候结束”。这种开放性让它特别适合需求不固定、长尾场景多的自动化任务。当然灵活性也意味着不确定性。这也引出一个贯穿整个系列的重要观点使用这类框架时你永远要在“让模型自主决策”和“约束任务边界”之间找平衡。这不是缺点而是每个智能体开发者都要修炼的基本功后面我会反复提到。2. 核心原理与基础架构2.1 Agent、Tool、Message 三件事要理解 Hermes Agent先记住三个基础角色Agent、Tool、Message。用一个不太严谨但很好记的类比Agent 是大脑Tool 是手脚Message 是大脑和手脚之间传递的便签。Agent 是框架里的核心对象它负责接收用户请求、调用模型、维护整个对话上下文。Tool 是外部能力的封装比如“查天气”“发邮件”“执行一段 SQL”每个 Tool 都要有名字、功能描述、参数说明以及真正干活的函数。Message 则是贯穿全程的数据结构无论是用户输入、模型回复还是工具返回的结果都会被包装成统一的消息格式交给下一环处理。这套设计里最关键的一个机制是“工具注册”。你不需要把每个工具的逻辑写死在 Agent 里而是按规范把工具“挂”到 Agent 上挂上去之后模型在对话过程中能“看到”这些工具的存在。模型看到的不只是函数原代码而是结构化的工具描述包括它的用途、参数格式、返回值类型。模型会根据用户需求去匹配这些描述决定当前该不该调用、调用哪个。你可能会问为什么模型能“看到”工具底层依赖的是模型服务提供的函数调用能力也叫 Function Calling。简单说模型在生成回答时除了生成普通文本还可以生成一个“调用工具”的指令指令里明确写清楚“我要调用哪个工具、参数是什么”。Hermes Agent 接收到这个指令后去执行对应的函数再把执行结果返回给模型。整个过程就像大脑写了一张便签递给手去执行手执行完再把结果写一张便签传回来。2.2 Agent Loop一个任务是怎么“跑”起来的理解 Hermes Agent 的第二个关键概念是 Agent Loop也就是智能体的“运行循环”。很多新手看框架源码很吃力原因就在于没理解这个循环。它本质上是一个不断重复的四步过程理解与规划Agent 把用户当前输入和之前的上下文一起交给模型模型判断“用户想让我干什么”。决定行动模型决定是直接回答还是调用某个工具。如果要调用生成工具名和参数。执行与观察框架执行工具拿到结果。这一步是关键因为执行结果可能有各种意外比如查不到数据、权限不足、返回格式异常。继续或结束执行结果作为新消息回传给模型模型根据结果判断“任务是否完成”完成就输出最终答案没完成就回到第 1 步继续循环。这个循环很像你写一份周报的过程。你先回忆本周做了哪些事发现数据记不全就去翻聊天记录和项目文档拿到数据后继续写写完发现重点不突出再提炼一遍。每次“翻资料”都相当于一次工具调用每次“继续写”都相当于回到循环里直到你对结果满意。为什么会需要循环而不是让模型一次性输出全部答案因为一个真实的复杂任务往往要拆成多个小步骤而每一步的结果只能在执行时才能知道。比如“查一下明天的天气如果下雨就提醒我带伞”不先调用天气工具拿到“明天有雨”这个事实模型就无法做出“提醒带伞”这个后续决策。所以循环不是效率低下的表现而是智能体应对真实世界不确定性的必要设计。2.3 一次调用的完整数据流把前面几个概念串起来一次完整的数据流转大概长这样用户输入 “帮我查一下北京明天的天气” → Agent 将用户消息转为 Message → 连同工具列表一起发给底层模型 → 模型返回“调用 get_weather参数 city北京” → 框架解析这个指令找到已注册的 get_weather 函数 → 执行函数拿到“晴26度”的结果 → 将结果包装成 ToolResult 消息回传给模型 → 模型看到结果生成最终回答“北京明天晴26度适合出门” → Agent 把最终回答返回给你。这个流程里有一个细节值得注意工具执行的结果不是直接拼进最终回答里而是要“回到模型那里再加工一轮”。这意味着工具结果本身的质量会直接影响最终回复质量。如果工具返回的是杂乱无章的原始数据模型就很难组织出好答案。所以写工具函数时不仅要让程序能跑还要让返回值“像人话”结构清晰、要点明确最好连失败原因都写清楚。我自己在调试智能体时最常用的方法就是把这个数据流中的每一步日志都打开。看看模型到底生成了什么指令、为什么生成这个指令、工具返回了什么、模型看到工具返回后又说了什么。一遍走下来问题通常一眼就能发现。3. 环境准备与安装从零搭起一个可运行环境3.1 安装之前需要准备什么在动手安装前先把需要准备的东西列出来免得装到一半发现缺这个缺那个。我的建议是准备一张纸把这些内容一一打勾。项目建议配置用途说明Python3.9 或更高版本框架本身和示例代码都依赖它pip随 Python 安装安装第三方包虚拟环境venv 或 conda隔离项目依赖避免污染系统环境模型服务 API Key你常用的模型服务商提供Agent 底层调用模型时用于身份验证开发目录自己习惯的任意目录存放项目代码与配置文件这里我想多说两句虚拟环境。很多新手图省事直接在系统 Python 里装包当时觉得挺方便但过几个月就会发现不同项目之间的依赖打架这个项目要升级 A 库另一个项目又只能跑老版本最后只能把环境推倒重来。用虚拟环境看似多了一步操作其实是给自己省心。隔离环境才是“一次配好、不再折腾”的正确姿势。模型 API Key 这块也要提前规划。Hermes Agent 本身不提供模型能力需要配置一个可用的模型服务。至于选哪个服务看你自己的使用习惯和成本要求入门阶段选一个常见的兼容 OpenAI 协议的模型服务就够了。Key 的管理要养成好习惯不要写死在代码里后面我会带你用环境变量把它隔离开。3.2 一步步安装并验证环境环境准备完成后安装过程很直接。第一步是创建并激活虚拟环境然后安装 Hermes Agent 的 Python 包。不同操作系统激活虚拟环境的命令略有区别macOS 和 Linux 是 source 命令Windows 是激活脚本我在这里用最通用的写法演示python -m venv .venv source .venv/bin/activate pip install hermes-agent安装完成之后先别急着写业务代码先做两个快速验证。第一个验证是确认框架自带的命令行工具能正常执行一般框架都会提供一个版本命令第二个验证是确认在 Python 环境里能正常导入核心模块。验证命令长这样hermes version python -c from hermes import Agent; print(import ok)只要这两个命令都不报错说明环境已经搭好了。为什么建议做这一步因为我见过太多人安装时报错不看直接复制教程代码去跑最后花了大量时间排查一个“环境没装好”的问题。花半分钟做基础验证能帮你把问题的范围瞬间缩小一半。接下来配置模型服务信息。先用环境变量把 Key 和模型参数存起来这样代码里就不用出现任何敏感信息export HERMES_API_KEY你的模型服务Key export HERMES_MODEL_PROVIDERopenai export HERMES_MODEL_NAME你的模型名称也许你会觉得用 export 写变量有点麻烦不如直接在代码里填 Key 来得快。但请一定忍住。Key 写死在代码里一旦你将来把代码提交到共享仓库等于把钥匙公开了。而且用环境变量管理以后切换不同模型服务、不同账号时只需要改环境变量完全不用动代码。这也是所有生产级项目的通用做法。4. 第一个实操让 Hermes Agent 完成一个真实小任务4.1 选一个“简单但能看到效果”的入门场景入门场景选什么很有讲究。太简单的场景比如让 Agent 回一句“你好”你根本看不到工具调用的价值太复杂的场景比如让它操作多个外部系统你又容易被各种连接问题淹没。我建议选一个“让 Agent 自主决定是否调用本地函数”的场景既能演示核心机制又不需要对接任何外部服务。我选的场景是“城市天气查询助手”。我在本地定义一个 get_weather 函数里面只放几个城市的模拟天气数据。当用户问“北京明天天气怎么样”时Agent 需要判断“这个问题超出了我直接回答的范围应该去调用 get_weather 工具”然后执行这个函数再把结果组织成自然语言回答。这个场景的优点在于一次工具调用的完整链路都能看到而且所有代码都能在本地跑通不受外界环境影响。你可能会想一个查天气的功能我用 if 判断也能写何必用 Agent没错单看这一个功能确实是大炮打蚊子。但请注意这个示例的目标是让你观察“模型如何自主决定调用工具”这一过程。当你把 get_weather 换成绩效查询、数据库查询、文件操作把场景从“查天气”换成业务逻辑时同一套机制就升值了。这就是为什么我坚持让新手从这种小场景起步——先把机制看懂再谈规模化。4.2 核心代码实现与逐行拆解下面是完整的入门示例代码。不同版本的 Hermes Agent API 细节可能略有差异我按最通用的写法展示类名和参数名以你安装的版本官方文档为准整体思路是一致的from hermes import Agent, Tool def get_weather(city: str) - str: data { 北京: 晴最高26度最低15度, 上海: 多云最高29度最低22度, 广州: 阵雨最高31度最低25度, } return data.get(city, f暂未收录{city}的天气数据) weather_tool Tool( nameget_weather, description查询指定城市的当前天气情况, parameters{ city: {type: string, description: 城市名称} }, functionget_weather, ) agent Agent( model_provideropenai, model_name你的模型名称, api_key你的模型服务Key, tools[weather_tool], ) result agent.run(北京明天天气怎么样) print(result.output)这段代码很短但每个部分都有自己的职责。get_weather 是真正的工具函数它接收一个城市名返回一段描述天气的字符串。Tool 对象是注册信息name 是工具名模型就是靠这个名字来指定要调用谁description 是工具自我介绍模型在决定用哪个工具时主要就是读这段文字parameters 用结构化方式描述了参数格式function 字段把注册信息和实际函数绑定起来。运行时agent.run 会触发我们前面说过的 Agent Loop模型从工具列表里发现了 get_weather觉得它能回答“北京明天天气怎么样”于是生成调用指令框架自动执行 get_weather(北京)拿到“晴最高26度最低15度”再把结果交回模型组织成最终回答。整个过程中工具内部的实现细节对模型是隐藏的模型只知道这个工具能干什么不需要知道数据是怎么存的这种隔离是 Agent 架构的一个巨大优势。运行之后你可能会得到类似这样的输出明天北京天气晴最高26度最低15度。体感比较舒适建议穿薄外套出行。看到这个结果你就成功跑通了第一个 Hermes Agent 程序。别小看这个简单的输出它背后至少发生了“意图识别、工具匹配、参数生成、函数执行、结果再加工”五个环节这五个环节是所有复杂智能体应用的模板。4.3 让 Agent 自主决定该调用哪个工具当你给 Agent 挂上多个工具时“自主决策”的能力才真正体现出来。模型面对用户问题会先判断这个问题更适合哪个工具。要让它判断得准最重要的就是写好每个工具的 description 字段。我自己的经验是description 要回答三个问题这个工具是干什么的、什么时候应该用它、什么时候不应该用它。比如你的系统里有 get_weather 和 get_news 两个工具description 就别都写成“查询信息”。写清楚“查询指定城市的当前天气情况适合天气相关提问”和“获取最新新闻列表适合资讯相关提问”模型的选择准确率会明显上升。别看这是个很小的设计点在工具数量超过五个之后它成了影响 Agent 智能感的最大因素。还有一个小技巧工具的参数数量要克制。每个参数都会增加模型理解和生成的负担能并成一个参数就不要拆成两个。比如某个工具的输入需要“城市”和“日期”如果业务上经常同时使用可以封装成“请求信息”为一个参数对象而不是让模型一次生成两个值。参数越少模型出错的概率越低我开始时没注意这点导致模型经常生成多余参数后来才慢慢改掉。如果模型一直不调用工具也从两个方向排查。一是检查模型服务是否支持函数调用部分模型不支持该能力自然无法生成工具指令二是检查工具的 description 和参数描述是否足够清晰模型看不懂工具是干什么的就不会主动用它。这两个方向解决了大部分“工具不生效”的问题。5. 常见问题排查与避坑指南5.1 安装与依赖层面的问题速查安装阶段是问题的高发期好在大多数问题都能一眼识别。我把最常遇到的情况整理成了一张速查表方便你对照处理现象可能原因解决办法pip install 时报权限错误在系统环境里安装无写权限先激活虚拟环境再安装import 时找不到 hermes装进了另一个 Python 环境用 which python 和 which pip 检查路径hermes 命令不存在虚拟环境未激活或安装未完成重新激活环境确认安装输出无报错版本命令报错包下载不完整重新安装换一个网络环境后再试判断这类问题有个通用排查逻辑先确认“包装到了哪里”再确认“我的命令跑在哪个环境里”。这两件事一旦对不上就会出现经典的“明明装了却找不到”问题。建议每次新开终端时先打印一下当前 Python 路径确认虚拟环境已经激活再开展其他操作。5.2 模型调用与工具行为异常环境没问题的前提下运行时的异常就要从调用链上看。最常见的一类问题是模型返回结果和预期不符比如该调用工具时不调用或者反复调用同一个工具不结束。这类问题多半跟工具描述有关描述不清晰、参数说明不到位模型就会“看不懂”。另一类问题是工具执行出错后Agent 表现得像个复读机一遍遍重试。根本原因往往出在工具函数本身如果函数抛出了异常而这个异常没有被捕获框架只能拿到一个冷冰冰的错误对象模型不知道到底哪里错了自然只能盲目重试。正确做法是在工具函数内部就把异常消化掉返回一句“查询失败城市参数为空”这样的可读文本。模型看到明确原因后才能判断是修正参数继续尝试还是如实转告用户。还有一类问题需要特别警惕循环停不下来。任务稍复杂时模型可能在一个步骤上反复打转白白消耗 token。所以给 Agent 设置最大迭代次数是一个非常好的习惯。你可以把它理解成保险丝正常运行时它永远不会触达但一旦出现异常它能让程序及时止损。新手很容易忽略这个参数等账单出来才后悔。我自己的排查顺序通常是这样的先打开日志看工具调用记录确认每次调用的参数是什么然后看工具实际返回了什么错误信息是否可读最后看日志中模型的最终输出判断它有没有基于工具结果做出合理结论。这三步走完绝大多数问题都能定位到具体环节。5.3 踩过几次坑之后总结出的三个“别”第一个“别”别让 Agent 无限制执行有副作用的操作。删文件、改数据库、发消息、转账这些操作一旦出错代价不只是重来一遍。我的做法是把这类操作设计成“需要人工确认”的模式Agent 生成指令后先把操作内容展示给用户用户确认才真正执行。智能体的价值是自动化但自动化的前提是可控。第二个“别”别把所有错误都抛给模型无限重试。很多新手觉得“模型这么聪明告诉它错了它总能修好”但实践会告诉你模型能修复一部分问题也会在同一个问题上绕圈。合理的做法是给重试设上限同时在工具返回值里尽量给出结构化信息让失败原因一目了然。把试错成本控制在可控范围内才是长期稳定的方案。第三个“别”别一上来就堆十几个工具。我见过不少同学搭建 Agent 时第一天就把各种工具一股脑注册进去结果模型频繁选错工具。工具越多描述越容易被稀释。正确做法是先用两三个工具跑通主链路验证稳定后再逐个增加并对所有工具的 description 重新整理。小步快跑在 Agent 开发里不是口号而是能直接降低排查成本的有效策略。我个人在实际开发中的体会是Hermes Agent 这类框架的门槛不在框架本身而在于你愿不愿意建立“全局观察”的习惯。从第一个 demo 开始就把日志、中间结果、工具返回值这些事纳入视野而不是只看最终的漂亮输出。养成这个习惯之后你会发现自己解决问题的能力会上一个台阶。基础篇第一讲到这里就足够了。下一篇我会把重点放到工具开发的完整规范上讲清楚如何把一个真实业务接口封装成高质量 Tool以及参数 schema 设计背后那些文档里不写的细节。你要是照着这篇跑通了代码可以先把示例里的 get_weather 换成你自己的业务函数试试动手改一遍比读十遍教程都管用。
企业数字化 ERP 产品动态
相关推荐
从Agent到本地部署:AI应用落地的关键信号与实操指南 2026年9月21日,周一。早上起来翻了翻技术社区和几个同行群,AI圈的消息面明显和上半年不太一样了。过去大家讨论的是哪个模型又刷了多少分、谁家参数规模更大,今天的主流话题已经悄悄变成了“Agent工作流怎么落地”“AI编程怎么真正提升团队效… · 2026/11/6 6:08:09
机房批量部署极域电子书包课堂管理系统:从勘察到联调排障 机房重装这件事,真正麻烦的从来不是装系统本身,而是装完之后那套课堂管理软件能不能让整间教室的机器同时上线。极域电子书包课堂管理系统这套东西,教师端一装、学生端一配,看着就是几个"下一步",但真正落到… · 2026/11/6 6:08:09
融合阴阳哲学的打字练习设计实践 1. 项目背景与核心价值作为一名长期关注传统文化与现代传播方式结合的研究者,我最近尝试了一个很有意思的实践——将昆仑正义文化的核心概念"宇宙生命阴阳论"融入日常打字练习中。这个看似简单的创意,实际上解决了传统文化学习中的三个痛点&am… · 2026/11/6 6:08:09
Kubernetes集群成本与适用性深度解析 1. Kubernetes集群的成本真相:从技术炫技到商业考量第一次接触Kubernetes时,大多数团队都会被其强大的容器编排能力所吸引。但很少有人真正计算过,维护一个生产级Kubernetes集群需要投入多少隐性成本。让我们拆解一个典型的中小型企业集群配置… · 2026/11/6 7:02:25
现代OpenGL开发环境搭建与配置指南 1. 现代OpenGL开发环境搭建概述《OpenGL编程指南》第八版作为图形编程领域的经典教材,其环境搭建与传统OpenGL有着显著区别。现代OpenGL(3.0版本)完全基于可编程渲染管线,这意味着我们需要从底层开始重新理解整个图形渲染流程。我… · 2026/11/6 7:02:25
Elasticsearch生产环境稳定性与性能优化实战 1. Elasticsearch生产环境稳定运行的底层逻辑Elasticsearch作为分布式搜索和分析引擎,在生产环境中面临着数据一致性、查询性能、资源消耗等多重挑战。我经历过从单节点到上百节点集群的完整演进过程,发现90%的生产事故都源于对基础原理的误解。比如一个… · 2026/11/6 7:02:25
ArcGIS Desktop 10.8 安装与许可配置完整指南:从环境搭建到避坑实践 简介:这份资源面向地理信息、测绘、城乡规划等专业的学生与从业者,提供 ArcGIS Desktop 10.8 的安装包获取渠道,帮助需要搭建本地 GIS 实验或工作环境、却苦于找不到可靠安装来源的用户快速上手。压缩包内共 1 个 docx 文档,约 11… · 2026/11/6 7:02:25
惯性导航复习指南:核心概念与考点全解析 简介:这份东南大学惯性导航复习资料面向备战期末考试的本科生与考研复习者,系统梳理课程核心考点,帮助读者在有限时间内建立知识框架、查漏补缺。内容围绕坐标变换矩阵、地球模型与垂线纬度定义、惯性器件、陀螺仪与加速度计、舒勒摆与舒勒回… · 2026/11/6 7:02:25
Unity中旋转矩形最小外接矩形计算与优化 1. 问题背景与需求拆解在Unity游戏开发中,我们经常会遇到需要计算物体包围盒的场景。最近我在开发一个2D物理引擎的扩展功能时,遇到了一个具体需求:给定两个任意旋转角度的矩形,需要计算出能够同时包含它们的最小外接矩形。这个需… · 2026/11/6 7:01:25
双极步进电机控制实战: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 步进电机驱动实战解析 /* 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工业级双极步进电机控制方案 /* 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协议实战 /* 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设计:状态机与三态驱动的流片级实现 /* 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仿真实战指南 /* 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驱动调试 /* 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 步进电机驱动实战解析 /* 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工业级双极步进电机控制方案 /* 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