1. 为什么我选择用 WorkBuddy 而不是从零手搓一个 App去年年底我接了个私活帮一个做线下活动策划的朋友搭一套内部用的签到与任务管理工具。需求听起来不复杂活动当天工作人员用手机扫码签到后台能实时看到到场情况活动结束后导出名单。但真正动手的时候问题就来了——朋友团队没有专职开发预算也有限不可能养一个完整的移动端团队。我一开始想的是直接写原生 Android毕竟我对 Android Studio 那套东西还算熟。但算了一下时间成本光是搭建项目骨架、处理登录态、做数据同步、适配各种机型保守估计要三周。而且朋友那边后续还想加功能比如任务分配、消息通知、数据看板每加一个功能都要重新打包发版维护成本太高。后来我换了个思路用 WorkBuddy 来搭。WorkBuddy 本质上是一个低代码/无代码的应用搭建平台它把常见的 App 能力用户体系、数据存储、页面渲染、权限控制都封装好了你只需要关注业务逻辑本身。我最终用大约五天时间把这个工具跑通了从开发到上线再到后续迭代整个过程踩了不少坑也积累了一些可复用的经验。这篇文章不是 WorkBuddy 的官方教程官方文档该讲的都讲了。我要分享的是从零到上线这个完整链路上那些文档里不会写、但实际做的时候一定会遇到的问题。包括平台选型的取舍、数据层的设计、WebView 的坑、Supabase 的集成细节、以及上线前必须检查的清单。如果你也打算用 WorkBuddy 做一个能真正跑起来的 App这篇内容应该能帮你省下不少时间。提示本文提到的所有操作和配置都是基于我实际项目中的经验总结。不同版本的 WorkBuddy 界面和功能可能有差异具体以你使用的版本为准。2. 动手之前先想清楚WorkBuddy 能做什么、不能做什么2.1 WorkBuddy 的核心能力边界很多人第一次接触 WorkBuddy 的时候容易把它当成万能 App 生成器觉得拖拖拽拽就能做出一个微信级别的产品。这个预期是不对的。WorkBuddy 的定位是快速搭建业务工具类应用它擅长的是表单填写与数据提交列表展示与详情查看简单的流程审批与状态流转用户登录与权限分级数据统计与简单报表它不擅长的是复杂的动画和交互效果高性能的游戏或图形渲染需要深度调用系统硬件的功能比如蓝牙控制 ESP32 这种大规模并发场景下的性能优化我那个签到工具刚好落在 WorkBuddy 的舒适区里表单提交、列表展示、数据导出全是它的强项。所以选型这件事核心不是看平台有多强而是看你的需求跟平台的能力是否匹配。2.2 什么时候该用 WorkBuddy什么时候该换方案我总结了一个简单的判断标准你可以对照自己的项目看一下判断维度适合 WorkBuddy建议换方案功能复杂度表单、列表、审批流实时音视频、复杂动画团队规模1-3 人无专职移动端有完整前端后端团队迭代频率每周都有小调整版本稳定半年不改预算有限希望快速上线充足追求极致体验用户量内部使用或小规模 C 端百万级 DAU如果你的项目大部分落在左边这一列那 WorkBuddy 是个不错的选择。如果右边占多数那还是老老实实走原生开发或者跨端框架的路子。2.3 我踩过的第一个坑把 WorkBuddy 当成了全栈解决方案刚开始的时候我以为 WorkBuddy 把后端也包了数据存储、用户管理这些都不用管。结果做到一半发现WorkBuddy 提供的是前端搭建能力 基础数据存储但如果你需要更复杂的数据查询、关联查询、或者自定义 API还是得自己接后端服务。我后来接的是 Supabase因为它提供了 Postgres 数据库、认证、实时订阅、存储等一整套后端能力而且跟 WorkBuddy 的集成相对顺畅。这个组合在后面会详细讲。注意不要等到项目做到一半才发现数据层不够用。在动手之前先把你需要的数据结构和查询场景列出来确认 WorkBuddy 自带的数据能力能不能覆盖。覆盖不了的部分提前规划好外部服务的接入方案。3. 六个阶段拆解从空白项目到能上线的 App3.1 阶段一需求梳理与数据建模这个阶段看起来最不起眼但实际上是后面所有工作的基础。我当时的做法是先不碰 WorkBuddy拿一张白纸把整个业务流程画出来工作人员打开 App看到活动列表选择一个活动进入签到页面扫描参与者二维码或手动搜索姓名确认签到数据实时同步到后台管理员在后台查看签到统计导出名单画完流程之后我开始设计数据表。核心就三张表events活动信息活动名称、时间、地点、状态participants参与者信息姓名、手机号、所属活动、签到状态、签到时间users工作人员信息姓名、角色、权限这里有个经验在 WorkBuddy 里建数据表的时候字段类型尽量用最简单的。比如时间字段不要用复杂的日期格式直接用时间戳或者标准化的字符串。因为 WorkBuddy 的数据绑定和展示逻辑对复杂类型的支持有限简单类型能省掉很多麻烦。3.2 阶段二WorkBuddy 项目初始化与页面搭建WorkBuddy 的项目创建流程比较直观选模板、填名称、选图标几分钟就能搞定。但有几个细节需要注意第一项目名称和包名要提前想好。后面如果要上架应用商店包名是不能改的。我当时的做法是用com.公司名.项目名的格式比如com.example.checkin。虽然 WorkBuddy 可能会自动生成一个包名但最好还是自己确认一下。第二页面结构要提前规划。WorkBuddy 的页面是树状结构父页面和子页面的关系会影响导航逻辑。我建议按照业务流程来组织页面而不是按照功能模块。比如活动列表 → 活动详情 → 签到页面是一条完整的用户路径放在同一个分支下导航逻辑会清晰很多。第三主题和样式统一设置。WorkBuddy 支持全局主题配置包括主色调、字体、圆角等。这个一定要在开始搭页面之前就定好不然后面每个页面单独调样式工作量会翻倍。3.3 阶段三数据层对接Supabase 集成这是整个项目里技术含量最高的部分。WorkBuddy 自带的数据存储适合简单的场景但我需要更灵活的查询和关联能力所以接了 Supabase。Supabase 的集成主要分三步第一步在 Supabase 创建项目并建表。建表的时候要注意字段名用英文不要用中文。虽然 Supabase 支持中文列名但在 API 调用的时候容易出问题。我当时的命名规范是表名用复数形式events、participants字段名用下划线分隔event_id、checkin_time。第二步在 WorkBuddy 里配置 API 连接。WorkBuddy 支持自定义 API 数据源你需要填入 Supabase 的项目 URL 和 API Key。这里有个坑Supabase 有两种 Key一种是anonkey公开的受行级安全策略限制一种是service_rolekey私密的绕过所有安全策略。在客户端一定要用 anon keyservice_role key 只能放在服务端绝对不能暴露在前端代码里。第三步配置行级安全策略RLS。这是 Supabase 的核心安全机制。你需要为每张表定义谁可以读、谁可以写、什么条件下可以操作。比如participants表工作人员只能看到自己所属活动的参与者不能看到其他活动的数据。这个策略如果配错了要么数据泄露要么功能不可用。-- 示例participants 表的 RLS 策略 -- 允许工作人员查看自己所属活动的参与者 CREATE POLICY staff_can_view_own_event_participants ON participants FOR SELECT USING ( event_id IN ( SELECT event_id FROM staff_events WHERE staff_id auth.uid() ) );3.4 阶段四核心功能开发与联调这个阶段就是把前面设计好的页面和数据逻辑串起来。我遇到的主要问题集中在两个方面一是数据绑定的时机问题。WorkBuddy 的页面加载和数据请求是异步的如果页面渲染的时候数据还没回来就会出现空白或者报错。解决办法是在页面加载前先显示 loading 状态等数据回来再渲染内容。WorkBuddy 提供了数据加载状态的回调用好了能避免很多白屏问题。二是表单提交的幂等性。签到场景下用户可能会快速点击提交按钮导致同一条数据被提交多次。我在 Supabase 那边加了一个唯一约束participant_id event_id唯一同时在 WorkBuddy 这边做了按钮防抖处理。双保险下来基本没出现过重复签到的情况。3.5 阶段五测试与问题修复测试环节我主要做了三件事功能测试把整个流程走一遍从登录到签到到导出确保每个环节都正常。边界测试比如网络断开时提交会怎样、数据为空时页面怎么显示、并发签到会不会冲突。兼容性测试在不同品牌、不同系统版本的手机上跑一遍。Android 的碎片化问题在 WebView 场景下尤其明显后面会详细讲。这个阶段发现的问题大部分都是小问题但有一个比较严重在某些 Android 机型上WebView 加载页面时会出现白屏需要手动刷新才能显示。这个问题后面单独讲。3.6 阶段六打包上线与后续迭代WorkBuddy 支持直接打包成 APK 或者上架到应用商店。打包之前需要准备好应用图标、启动页、隐私政策链接等材料。上架流程各个商店不太一样但核心就是那几样应用信息、截图、描述、隐私政策。上线之后我大概每两周做一次小迭代。WorkBuddy 的好处是改完页面直接发布就行不需要重新打包发版。但如果是涉及到原生能力的改动比如权限、推送还是需要重新打包。4. 十六个坑里最值得说的几个WebView、Supabase 和那些让人抓狂的细节4.1 Android WebView 版本碎片化白屏问题的根因与解法这是我在这个项目里遇到的最头疼的问题。WorkBuddy 生成的 App 本质上是一个壳里面用 WebView 加载 H5 页面。而 Android 系统的 WebView 版本是跟系统绑定的不同版本差异很大。我遇到的问题是这样的在大部分手机上App 运行正常。但在某些较老的 Android 机型上特别是 Android 8.1 及以下页面加载到一半就白屏了控制台报错说某个 JavaScript API 不支持。排查过程比较曲折。我先是在 WorkBuddy 的调试模式里看日志发现是某个 ES6 的语法在旧版 WebView 里不支持。但 WorkBuddy 生成的代码是打包过的我改不了源码。后来我想了个办法在页面加载前加一个特性检测如果检测到 WebView 版本过低就跳转到一个简化版的页面。// 检测 WebView 是否支持某个关键 API if (typeof Promise undefined || typeof Object.assign undefined) { // 跳转到兼容版页面 window.location.href /fallback.html; }但这个方案治标不治本。真正的解决办法是在 WorkBuddy 的项目设置里把目标 WebView 版本调低。WorkBuddy 支持配置最低支持的 WebView 版本调低之后它生成的代码会自动做兼容处理。这个设置藏得比较深在项目设置 → 高级选项 → 兼容性里面。提示如果你的 App 需要覆盖较老的 Android 机型一定要在项目初期就把 WebView 兼容性设置好。等到上线之后再来处理成本会高很多。4.2 Supabase 的行级安全策略配错了就是数据泄露Supabase 的 RLS 是个好东西但也是个容易踩坑的地方。我一开始为了图省事直接给所有表开了允许所有操作的策略。结果测试的时候发现用 A 活动的账号登录居然能看到 B 活动的参与者数据。这要是上线了就是严重的数据泄露。正确的做法是最小权限原则每张表只开放必要的操作而且必须带上用户身份过滤条件。比如-- 错误做法允许所有人读取所有数据 CREATE POLICY allow_all_read ON participants FOR SELECT USING (true); -- 正确做法只允许工作人员读取自己所属活动的数据 CREATE POLICY staff_read_own_event ON participants FOR SELECT USING ( event_id IN ( SELECT event_id FROM staff_events WHERE staff_id auth.uid() ) );另外Supabase 的 RLS 策略是可以叠加的。如果你同时开了多条策略Supabase 会用 OR 逻辑把它们合并起来。这意味着如果你不小心开了一条允许所有的策略其他策略就形同虚设了。所以每次加策略之前先检查一下有没有冲突的旧策略。4.3 数据同步的实时性轮询还是订阅签到场景对数据实时性有一定要求工作人员签到之后后台最好能马上看到。Supabase 提供了实时订阅功能Realtime可以监听数据表的变化并推送更新。但实时订阅在移动网络下不太稳定有时候会断连。我最后的方案是实时订阅 定时轮询兜底。正常情况下用实时订阅如果超过 30 秒没有收到更新就触发一次轮询请求。这样既保证了实时性又避免了断连导致的数据不同步。// 伪代码示例实时订阅 轮询兜底 let lastUpdate Date.now(); supabase .channel(participants) .on(postgres_changes, { event: *, schema: public, table: participants }, (payload) { lastUpdate Date.now(); refreshData(payload); }) .subscribe(); // 每 30 秒检查一次如果超过 30 秒没更新就主动拉取 setInterval(() { if (Date.now() - lastUpdate 30000) { fetchLatestData(); } }, 30000);4.4 那些让人抓狂的小问题除了上面几个大坑还有一些小问题也很烦人图标不显示WorkBuddy 的图标库有时候会加载失败特别是在网络不好的时候。解决办法是把用到的图标提前下载到本地或者用 SVG 内联的方式。字体大小不一致不同手机的系统字体缩放设置不一样导致页面上的文字大小不统一。解决办法是在 CSS 里用rem或者vw单位不要用px。返回键逻辑混乱Android 的物理返回键在 WebView 里的行为跟原生页面不一样。有时候按返回键会直接退出 App而不是返回上一页。这个需要在 WorkBuddy 的导航设置里配置返回键的拦截逻辑。输入框被键盘遮挡在表单页面点击输入框弹出键盘后输入框被挡住了。解决办法是在页面底部留出足够的空白或者用scrollIntoView在输入框获得焦点时滚动页面。5. 上线前必须检查的清单别等到用户反馈才发现问题5.1 功能完整性检查上线之前我把整个流程从头到尾走了至少五遍每一遍都换不同的账号、不同的活动、不同的网络环境。检查项包括登录/登出是否正常活动列表是否能正确加载签到功能是否正常重复签到是否有提示数据导出是否完整格式是否正确权限控制是否生效不同角色看到的内容是否不同这个清单看起来简单但实际做的时候很容易漏。我建议你把它写成一个 checklist每完成一项就打个勾不要凭记忆。5.2 性能与体验检查性能这块我主要关注三个指标指标目标值实测值优化措施首屏加载时间 3 秒2.5 秒图片懒加载、数据分页页面切换响应 500 毫秒300 毫秒预加载下一页数据数据提交响应 1 秒800 毫秒乐观更新、后台同步首屏加载时间是最影响用户体验的。我的优化手段主要是两个一是把非关键的图片和资源延迟加载二是把数据请求做成异步的先渲染页面骨架数据回来再填充。5.3 安全与合规检查安全这块除了前面说的 RLS 策略还有几个点要注意API Key 不能硬编码在前端Supabase 的 anon key 虽然是公开的但也要通过环境变量注入不要直接写在代码里。敏感数据要加密比如参与者的手机号在数据库里存的时候最好加密展示的时候脱敏。隐私政策要齐全如果上架应用商店隐私政策是必须的。内容要说明你收集了哪些数据、用来做什么、怎么保护。注意不同应用商店对隐私政策的要求不一样上架之前先去看一下目标商店的具体要求。有些商店还要求提供数据删除功能这个也要提前规划。5.4 上线后的监控与迭代上线不是终点而是起点。我在 Supabase 那边开了日志功能记录所有的 API 调用和错误。WorkBuddy 这边也有基础的错误上报可以配置一个 Webhook把错误信息推送到我的邮箱或者即时通讯工具。上线第一个月我大概收到了十几条错误报告大部分都是边缘情况比如某个特定机型上的兼容性问题、某个特殊字符导致的提交失败。这些问题在测试阶段很难覆盖到只能靠线上反馈来发现和修复。6. 一些可以复用的经验下次再做类似项目我会怎么做6.1 项目启动阶段就要考虑的事如果让我重新做一遍这个项目我会在启动阶段多做三件事第一先做一个最小可用的原型。不要一上来就把所有功能都搭好先用 WorkBuddy 搭一个最简单的版本跑通登录 → 列表 → 详情 → 提交这个核心链路。原型跑通之后再往上加功能。这样能尽早发现平台的能力边界避免做到一半发现某个功能实现不了。第二把数据模型设计得稍微冗余一点。我当时的表设计比较精简后来加功能的时候发现有些字段不够用又得改表结构。如果一开始就多留几个备用字段后面会省事很多。第三提前规划好错误处理。网络请求失败、数据为空、权限不足这些情况在开发阶段很容易被忽略但上线之后一定会遇到。提前把这些错误状态处理好能减少很多线上问题。6.2 WorkBuddy 使用中的一些技巧用了一段时间 WorkBuddy 之后我总结了一些能提高效率的技巧善用模板WorkBuddy 有很多现成的页面模板比如登录页、列表页、表单页。直接套用模板比从零搭建快很多而且模板的兼容性和体验一般都调得比较好。组件复用把常用的 UI 元素比如按钮、卡片、标签做成自定义组件后面直接拖拽使用不用每次都重新配置。版本管理WorkBuddy 支持版本历史每次大的改动之前先保存一个版本。万一改坏了可以快速回滚。调试模式WorkBuddy 的调试模式可以看到详细的日志和网络请求排查问题的时候非常有用。建议在开发阶段一直开着。6.3 关于 Supabase 的一些补充Supabase 是个很强大的工具但也有一些需要注意的地方免费版有资源限制数据库大小、API 请求次数、存储空间都有限制。如果项目规模上来了需要升级到付费版。实时订阅有延迟虽然叫实时但实际上还是有几百毫秒的延迟。对实时性要求极高的场景可能需要考虑其他方案。备份很重要Supabase 免费版不提供自动备份需要自己定期导出数据。我当时的做法是每周手动导出一次存到本地。6.4 最后分享一个小技巧如果你也在用 WorkBuddy 做项目有一个小技巧可以帮你省很多时间把常用的数据查询和提交逻辑封装成自定义函数。WorkBuddy 支持自定义 JavaScript 函数你可以把 Supabase 的调用逻辑封装起来在页面里直接调用函数名就行不用每次都写一遍完整的 API 调用代码。// 封装一个通用的数据查询函数 async function queryData(table, filters {}) { let query supabase.from(table).select(*); for (const [key, value] of Object.entries(filters)) { query query.eq(key, value); } const { data, error } await query; if (error) throw error; return data; } // 页面里直接调用 const participants await queryData(participants, { event_id: currentEventId });这个做法不仅减少了重复代码还让后期的维护和修改方便很多。如果查询逻辑需要调整只需要改一个地方不用每个页面都改一遍。整个项目做下来我最大的感受是用 WorkBuddy 搭 App技术门槛确实低了很多但业务理解和数据设计的能力反而更重要了。因为平台帮你解决了技术实现的问题你的精力可以更多地放在这个功能到底该怎么设计数据该怎么组织这些更本质的问题上。如果你也在考虑用类似的方式做项目希望这些经验能帮到你。
企业数字化 ERP 产品动态
相关推荐
AI Agent执行循环深度拆解:从意图解析到终止判断的关键设计 要说最近AIAgent圈子里什么话题最热,除了各家模型厂商在拼推理能力之外,恐怕就是Agent执行框架本身的设计了。我在实际项目中反复调过不少类似的执行引擎,坦白讲,很多看起来特别智能的Agent应用,拆到底层其实就是一套循… · 2026/11/2 16:52:36
智能体失控停训背后:AI安全与模型训练的工程化思考 每天早起刷AI行业动态,这已经是不少从业者的固定动作了。大部分时候看到的都是“某某模型刷榜”“某某团队融资”“某某框架发布”这类例行消息,但今天这条日报里的标题确实让我多看了好几秒——“OpenAI暂停最强模型训练,智能体失控再敲AI安… · 2026/11/2 16:52:36
RAGFlow+知识图谱+Deepseek:构建可推理的企业知识库 1. 这不是又一个“RAG套壳”,而是知识组织方式的底层切换最近两周,我连续帮三个不同行业的团队落地知识管理项目:某高校实验室要沉淀十年实验数据与论文笔记,某制造业企业想把散落在PDF手册、Excel故障记录、内部Wiki里的设备维修… · 2026/11/2 16:52:36
Model-Optimizer:从量化压缩到端侧推理加速的实践 我需要你先提供具体的项目标题和素材,我才能基于它写出一篇可直接发布的高质量博文。请你按这个格式把信息补全:项目标题: [你想写的标题]
项目正文: [零散的原始描述,越具体越好]
关键词: [关键词1, 关键词2, ...]
摘要描述: [一句话简介]如… · 2026/11/3 5:24:59
Kali Linux下zsteg图像隐写分析工具实战指南 1. zsteg工具概述与Kali环境适配性zsteg是一款专注于PNG和BMP图像隐写分析的开源工具,采用Ruby语言开发。作为Kali Linux渗透测试工具链的重要补充,它填补了传统取证工具在LSB(最低有效位)隐写检测领域的空白。我在实际CTF比赛和渗… · 2026/11/3 5:24:59
BMS中SOH与SOP估算策略:从机理到多时间尺度滤波的工程实践 简介:面向电动汽车BMS算法学习者与工程技术人员的一份专题总结文档,聚焦SOH(健康状态)与SOP(功率状态)两大核心指标的估算策略,帮助读者系统梳理从定义、方法分类到优缺点比较的知识脉络。压缩包… · 2026/11/3 5:24:59
电池SOH估算:开环与闭环的工程取舍与避坑指南 简介:面向电动汽车BMS开发与电池管理算法学习者的技术总结文档,聚焦SOH(健康状态)与SOP(功率状态)两大核心指标的估算策略,帮助读者系统梳理从定义、方法分类到优缺点比较的完整知识框架。压缩包… · 2026/11/3 5:24:59
解决Vue项目中Babel配置路径错误问题 1. 问题现象与背景解析当你在VS Code中打开一个Vue项目时,如果项目目录没有作为根目录直接打开,而是作为子目录打开的,可能会遇到这个典型的Babel配置错误。控制台会抛出"Parsing error: No Babel config file detected"的警告&… · 2026/11/3 5:24:59
等保测评时效解析:二级与三级系统差异及优化策略 1. 等保测评时效概述信息系统安全等级保护测评(简称等保测评)是我国网络安全领域的重要合规要求。二级和三级信息系统作为企业最常见的两个等级,其测评时效性直接关系到企业的合规成本和业务连续性。在实际操作中,我发现很多企业管… · 2026/11/3 5:23: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
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