1. 为什么要在AMD显卡上折腾Whisper先把结论摆在前头Whisper这套语音识别模型本身是跨平台的真正让人头疼的从来不是模型能不能跑而是在AMD显卡上能不能跑得动、跑得快、跑得稳。我接触过不少做语音转写、会议记录、字幕生成的朋友手里清一色是AMD的卡——有的是装机时图性价比选的有的是工作站自带的还有的是二手市场淘来的。这些人跑到网上一搜教程满屏都是另一家生态的配置流程照着抄根本走不通于是就有了这篇东西。Whisper是OpenAI开源的一套语音识别模型按参数量从小到大分为tiny、base、small、medium、large几个档位large下面还有v2、v3等变体。它的核心能力是把音频转成文字支持多语种、带时间戳、能做翻译任务。模型越大识别越准但对显存和算力的要求也水涨船高。很多人第一次跑Whisper是在CPU上tiny模型勉强能出结果换成small就开始卡成幻灯片medium以上基本没法用——这时候显卡加速就成了刚需。这篇内容适合三类人看第一类是想在AMD显卡上把Whisper跑起来的新手你需要一套能落地的配置路径第二类是把Whisper跑起来了但速度不理想的进阶用户你需要知道瓶颈在哪、怎么调第三类是准备做语音转写类小项目、需要评估硬件方案的开发者你需要一份真实的性能参考。我会把原理、配置、参数、踩坑经验全摊开讲尽量让你少走弯路。需要提前说明的是AMD显卡跑深度学习模型的主流路径和另一家生态不完全一样核心差异在于计算框架的适配层。目前比较成熟的方案是基于ROCm这套开源计算平台配合PyTorch的ROCm版本。ROCm对显卡型号有明确的支持列表不是所有AMD卡都能用这一点后面会详细展开。另外还有一条路是走DirectML兼容性更广但性能上限和生态成熟度要打折扣。两条路各有取舍我会分别讲清楚。2. 方案选型ROCm还是DirectML先想清楚再动手2.1 两条技术路线的本质区别在AMD显卡上跑Whisper绕不开一个前置决策用ROCm还是用DirectML。这两个名字听起来都挺唬人说白了就是两种让显卡干活的方式。ROCm是AMD自家的开源计算平台地位相当于另一家生态里的CUDA。它直接跟显卡驱动和硬件打交道能榨出比较高的性能PyTorch、TensorFlow这些主流框架都有对应的ROCm版本。缺点是支持范围窄只有官方列表里的显卡型号才能用而且对操作系统版本、内核版本、驱动版本都有要求装起来相对折腾。DirectML是微软推的一套跨厂商推理接口走的是DirectX 12通道。它的最大好处是兼容性广理论上只要显卡支持DX12就能跑不挑型号不挑品牌。但它的性能通常不如ROCm尤其是在大模型推理场景下差距明显而且PyTorch对DirectML的支持是通过一个额外的插件实现的生态成熟度和更新频率都跟不上主线。打个比方ROCm像是给显卡修了一条专用高速路路况好、限速高但入口有门槛不是什么车都能上DirectML像是走国道什么车都能开但红绿灯多、限速低。你要跑的是Whisper这种吃算力的活能上高速就别走国道。2.2 什么情况下选哪条路判断标准其实不复杂我整理成一张表你对号入座就行。判断维度选ROCm选DirectML显卡型号在官方支持列表内不在支持列表内操作系统Linux为主部分Windows版本可用Windows为主性能要求追求高吞吐、低延迟能跑就行不追求极致折腾意愿愿意花时间配环境希望快速跑通项目规模长期使用、批量处理临时验证、小批量我的建议很直接如果你的显卡在ROCm支持列表里优先走ROCm。性能差距在实际测试中往往是倍数级的尤其是跑medium以上模型的时候DirectML那条路可能会慢到让你怀疑人生。只有当显卡确实不在列表里、又不想换硬件的时候才考虑DirectML兜底。2.3 显卡型号的现实约束这里必须泼一盆冷水。ROCm的官方支持列表是有明确范围的主要集中在较新的消费级和专业级显卡上。一些老型号、移动端型号、以及部分中低端型号并不在列。你在动手之前第一件事就是去查自己的卡在不在支持范围内。如果不在也不是完全没戏社区里有一些非官方的手段能让部分型号跑起来但稳定性和性能都没法保证我不建议在生产环境里这么干。与其花大量时间跟驱动搏斗不如老老实实走DirectML或者考虑换一张在支持列表里的卡。硬件这东西适配性比绝对性能更重要。还有一个容易被忽略的点是显存。Whisper的模型大小直接决定显存占用tiny和base几百兆就能跑small大概需要1到2GBmedium在3到5GBlarge系列则要6GB以上large-v3在长音频场景下峰值可能更高。你选方案的时候要把显存余量算进去别到时候模型加载到一半报显存不足。3. 环境搭建从驱动到框架的完整链路3.1 驱动与ROCm的安装顺序环境搭建这块顺序错了会浪费大量时间。正确的顺序是先确认显卡型号和支持状态再装驱动再装ROCm运行时最后装PyTorch的ROCm版本。这个链条上任何一环版本不匹配后面都会出问题。驱动安装这块Linux下通常通过包管理器处理Windows下则是下载官方驱动包。这里有个经验驱动版本和ROCm版本要对应ROCm每个版本发布时都会说明适配的驱动版本范围装之前对一下文档别随手装个最新的就完事。我见过不少人卡在这一步驱动太新或太旧都会导致ROCm识别不到显卡。ROCm运行时安装完之后用官方提供的检测命令验证一下显卡是否被正确识别。如果这一步就报错后面的活都不用干了先解决识别问题。常见的识别失败原因包括显卡不在支持列表、驱动版本不匹配、系统内核版本太老、以及权限配置问题。3.2 PyTorch的ROCm版本安装PyTorch的安装现在比以前省心多了官方提供了带ROCm后缀的安装命令。你只需要根据自己的ROCm版本选择对应的安装源就行。这里的关键是版本对齐PyTorch的ROCm版本号要和系统里装的ROCm运行时版本匹配不能混用。安装完成后跑一段验证代码确认显卡能被PyTorch调用。核心就是检查设备是否可用、设备名称是否正确。如果返回的结果显示的是CPU而不是显卡说明安装链路有问题回头检查驱动和运行时。import torch print(torch.cuda.is_available()) # ROCm版本下这个接口同样适用 print(torch.cuda.get_device_name(0))注意在ROCm版本的PyTorch里设备相关的接口沿用了cuda这个命名这是历史原因造成的不代表用的是另一家的技术。看到cuda字样不要慌它在这里只是接口名。3.3 Whisper及其依赖的安装Whisper的安装本身不复杂通过包管理器一条命令就能搞定。但有几个依赖值得单独提一下。首先是音频处理库Whisper需要读取音频文件并做重采样底层依赖ffmpeg这个要提前装好否则读文件那一步就会报错。其次是模型下载Whisper的模型权重是运行时自动下载的首次使用需要联网下载速度和网络环境有关模型越大下载越久。我建议把模型权重提前下载好放到本地缓存目录避免每次换环境都重新下载。缓存路径可以通过环境变量指定这样多台机器之间还能共享省时省力。3.4 一个容易忽略的坑半精度支持Whisper默认可以用半精度float16推理这样显存占用减半、速度提升明显。但半精度能不能用取决于显卡的计算能力支持情况。部分较老的AMD显卡对半精度的支持不完整强行开启可能报错或者结果异常。稳妥的做法是先用全精度跑通确认整条链路没问题再尝试切半精度对比速度和结果质量。如果半精度下识别结果出现乱码或者明显错误就退回全精度。4. 性能优化把每一分算力都用在刀刃上4.1 模型档位的选择逻辑很多人一上来就想跑large模型觉得越大越准。这话没错但要看场景。模型档位的选择本质上是精度和速度的权衡你得先明确自己的需求。如果是实时转写或者对延迟敏感的场景small甚至base可能更合适large的推理延迟在消费级显卡上可能达到秒级甚至更高体验会很差。如果是离线批量处理、对准确率要求高的场景那large值得等。medium是个折中点准确率比small有明显提升速度又比large快不少。我的实测经验是中文场景下medium是性价比拐点。small对中文的识别准确率在安静环境下尚可但遇到口音、背景噪声、专业术语就开始掉链子medium明显好转large-v3当然最好但速度代价大。你可以先用small快速验证流程再根据实际效果决定要不要往上换。4.2 批处理与分块策略Whisper处理长音频时内部会把音频切成30秒的片段逐段处理。这个切分策略对性能影响很大。如果你的音频很长一次性喂进去和分块喂进去显存占用和总耗时都不一样。一个实用的优化是控制单次处理的音频长度。太短会导致片段数量多、调度开销大太长会撑爆显存。我一般建议单次处理控制在几分钟以内具体看显存余量。另外批处理batch能提升吞吐但会成倍增加显存占用显存不够的时候不要硬上宁可减小batch。还有一个细节是音频预处理。Whisper内部会把音频重采样到16kHz单声道如果你的原始音频是48kHz立体声重采样这一步会消耗额外时间。提前用工具把音频转成16kHz单声道能省掉这部分开销批量处理时效果明显。4.3 半精度与计算图优化前面提过半精度这里展开说。开启半精度后显存占用大约减半推理速度通常有30%到50%的提升具体幅度看显卡。开启方式是在加载模型时指定数据类型。但要注意半精度对数值稳定性有影响极少数情况下会导致识别结果异常所以开启后要做一轮结果对比。计算图优化方面PyTorch提供了编译加速的接口能把模型的计算图做融合优化减少调度开销。这个特性在较新版本的PyTorch里已经比较成熟对Whisper这种结构固定的模型效果不错。开启后首次运行会有编译耗时但后续推理会快一些。是否值得开取决于你的使用模式长期反复调用值得开一次性跑完就结束的场景没必要。4.4 显存管理与常见瓶颈显存是AMD显卡跑Whisper时最常见的瓶颈。除了选小模型、开半精度、减小batch这些常规手段还有几个技巧。一是及时释放中间变量。批量处理时每处理完一段音频相关的张量要及时释放避免累积占用。二是监控显存峰值跑的时候用工具观察显存曲线找到峰值出现的环节针对性优化。三是避免同时加载多个模型实例有些人为了并行处理会加载多份模型显存直接翻倍很容易爆。下面这张表是我整理的常见瓶颈和对应手段可以当速查用。瓶颈表现可能原因应对手段加载模型时报显存不足模型档位过大换小一档模型或开半精度处理长音频中途崩溃单次输入过长分块处理控制单段长度速度远低于预期未开半精度或走了CPU检查设备、开启半精度批量处理越来越慢显存未释放累积及时释放中间变量识别结果异常半精度数值问题退回全精度对比验证5. 实操全流程从零跑通一次转写5.1 环境验证与基准测试环境装好之后别急着上真实音频先做一轮基准测试。找一段几十秒的干净音频用不同模型档位各跑一遍记录耗时和显存占用。这一步的目的是建立你当前硬件配置下的性能基线后面调优的时候有参照。基准测试要记录几个关键数据模型加载时间、单段音频推理时间、显存峰值、识别结果质量。加载时间反映的是IO和初始化开销推理时间反映算力显存峰值决定你能跑多大的模型和batch。把这些数据记下来后面换参数的时候对比着看才知道优化有没有效果。5.2 完整转写脚本的编写一个能用的转写脚本核心逻辑不复杂加载模型、读取音频、调用转写接口、输出结果。但要做好错误处理和日志记录否则出了问题不好排查。import whisper import time def transcribe_audio(audio_path, model_sizemedium, languagezh): start time.time() model whisper.load_model(model_size, devicecuda) load_time time.time() - start start time.time() result model.transcribe( audio_path, languagelanguage, fp16True, verboseFalse ) infer_time time.time() - start print(f加载耗时: {load_time:.2f}s, 推理耗时: {infer_time:.2f}s) return result[text] if __name__ __main__: text transcribe_audio(test_audio.wav) print(text)这段代码里几个参数值得说明。devicecuda在ROCm环境下同样适用指向显卡。fp16True开启半精度前提是显卡支持。languagezh指定中文不指定的话模型会自动检测语种多花一点时间但省事。verboseFalse关掉进度输出批量处理时开着会刷屏。5.3 参数调优的实操记录参数调优这块我拿一段十分钟的中文会议录音做过对比测试模型用medium显卡是一张中端卡。测试结果大致如下默认参数下全精度推理耗时约两分半开半精度降到一分四十秒左右显存峰值从接近4GB降到2GB出头。识别质量方面半精度和全精度的结果肉眼对比差异很小个别专有名词有出入但整体可接受。再往上调把模型换成large半精度下耗时涨到四分钟左右显存峰值接近6GB。识别质量确实更好尤其是多人对话和背景噪声场景但速度代价明显。所以最终我在这张卡上定的是medium加半精度兼顾速度和质量。这里有个经验调参要一次只改一个变量。同时改模型档位和精度你没法判断性能变化是哪个因素导致的。先固定模型调精度再固定精度调模型一步步来数据才清晰。5.4 结果后处理与输出Whisper输出的原始结果带时间戳和分段信息直接拿来用往往需要整理。常见的后处理包括合并过短的片段、去掉重复的标点、按标点重新断句、以及把时间戳格式化成常见的字幕格式。如果做字幕需要把结果转成SRT或VTT格式这部分逻辑不复杂按格式规范拼接字符串就行。如果做纯文本转写重点是断句和标点修正Whisper在长句上的标点有时不太准可以结合简单的规则做一轮清洗。后处理这块没有标准答案按你的下游需求来定。6. 常见问题与排查实录6.1 显卡识别不到怎么办这是最高频的问题。排查顺序建议这样走先确认显卡型号在不在ROCm支持列表不在的话基本没救换方案在的话检查驱动版本是否匹配ROCm版本要求再检查系统内核版本是否满足最低要求最后检查当前用户有没有访问显卡设备的权限。权限问题在Linux下比较常见普通用户默认可能没有访问显卡设备的权限需要把用户加入对应的用户组。这一步做完要重新登录才生效很多人改完没重登以为没效果白折腾半天。6.2 推理速度慢得离谱速度慢先看设备对不对。跑一段验证代码确认PyTorch识别到的是显卡而不是CPU。如果显示的是CPU说明安装链路有问题回头查驱动和运行时。如果确实是显卡但还是很慢检查有没有开半精度以及模型档位是不是选大了。还有一种情况是音频预处理拖了后腿。如果原始音频格式特殊、采样率高、声道多读取和重采样会消耗大量时间让人误以为是推理慢。提前把音频转成标准格式能排除这个干扰。6.3 识别结果乱码或异常结果异常先怀疑半精度。退回全精度重跑一遍如果结果正常了说明是半精度的数值稳定性问题这张卡可能不适合开半精度。如果全精度也异常检查音频文件本身有没有问题采样率、声道、编码格式是否被正确读取。还有一种可能是语言参数设错了。指定了错误的语种模型会按错误的语言模型去解码结果自然离谱。多语种混合的音频建议不指定语言让模型自动检测。6.4 长音频处理中途崩溃长音频崩溃基本都是显存问题。Whisper内部按30秒切分但如果你一次性把整段长音频喂进去中间变量会累积。解决办法是手动分块每块处理完释放资源再处理下一块。分块的时候注意块与块之间留一点重叠避免在切分点丢字。下面这张速查表把常见问题和对应处理整理在一起方便对照。问题现象排查方向处理建议显卡识别不到型号、驱动、权限查支持列表、对齐版本、加用户组速度异常慢设备、精度、音频格式确认设备、开半精度、预处理音频结果乱码精度、语种参数退回全精度、检查语言设置长音频崩溃显存累积手动分块、及时释放首次运行卡住模型下载提前下载权重到本地缓存6.5 几个独家避坑心得第一个心得别在环境没验证通过之前就上真实项目。我见过有人环境还没跑通直接拿一小时的会议录音去转结果中途报错白等半天还以为是音频问题。先用短音频验证全链路再上真实数据。第二个心得模型权重提前缓存。Whisper首次运行会下载权重网络不好的时候能卡很久而且换环境要重新下。把缓存目录固定下来多环境共享省时省力。第三个心得记录每次调参的配置和结果。调参是个反复的过程不记录的话很容易绕圈子。我习惯用一个简单的表格记下模型档位、精度、batch、耗时、显存峰值回头一看就知道哪组配置最适合当前硬件。第四个心得显存留余量。别把显存用到极限留出百分之二十左右的余量系统和其他进程也要用显存用满了容易出莫名其妙的错误。7. 影响范围与适用场景延展7.1 这套方案能覆盖哪些场景AMD显卡跑Whisper这套方案落地场景其实挺广。最常见的是会议记录转写把录音转成文字稿medium模型加半精度在消费级卡上就能做到接近实时的处理速度。其次是字幕制作Whisper自带时间戳配合后处理能直接出SRT文件做视频的朋友用得上。再往深了说客服录音分析、播客内容整理、课堂录音转笔记这些场景都能覆盖。批量处理的时候把音频预处理、转写、后处理串成流水线一张中端卡一晚上能处理不少内容。对中小团队来说用AMD显卡做这套方案硬件成本比另一条路线低不少性价比是实打实的。7.2 性能边界的现实认知得说清楚这套方案的边界。消费级AMD显卡跑large模型速度上没法跟专业计算卡比长音频批量处理时差距更明显。如果你的场景是海量音频的离线处理对时间要求高那硬件该升级还是得升级软件优化能榨出的空间有限。另外ROCm的生态成熟度相比另一条路线还有差距遇到冷门问题可参考的资料少一些需要一定的排查能力。这不是劝退是让你有个合理预期。真遇到问题官方文档和社区issue是主要的信息来源耐心翻一翻大部分问题都有前人踩过。7.3 后续可以怎么扩展这套流程跑通之后有几个方向可以继续深挖。一是流式转写把实时音频流切片喂给模型做近实时的字幕这对延迟要求高需要更精细的缓冲和调度策略。二是多模型协同用小模型做快速初筛大模型做精细转写平衡速度和精度。三是领域微调如果你的场景有大量专业术语可以在Whisper基础上做微调提升特定领域的识别准确率不过这需要额外的训练数据和算力。我自己在实际操作中的体会是硬件适配这件事前期多花时间把环境理顺后面用起来就顺风顺水。最怕的是一边跑项目一边修环境两头都顾不好。把基准测试做扎实把配置记录清楚后面换硬件、换模型、调参数都有据可依这才是长期省事的做法。
企业数字化 ERP 产品动态
相关推荐
Jev决策模型:Java开发者如何用非文本生成实现高效Agent决策 1. 一个Java老兵的困惑:为什么这个模型不吐字,反而更聪明第一次看到Jev这个模型的时候,我的反应和大多数Java开发者一样——这玩意儿怎么连句话都不会说?我们习惯了和LLM打交道的方式:你问它答,它生成一段文… · 2026/11/4 17:49:53
Zotero配置GB/T 7714-2015参考文献格式与排错 参考文献格式被打回,大概是学术写作里最不值当的返工——内容本身没问题,就因为文末那几十条文献的作者人数、类型标识、标点符号跟目标期刊的模板对不上,整篇稿子卡在编辑初审。我前后帮人处理过十几份这类稿子,最夸张的一次&… · 2026/11/4 17:49:53
一线与二线产区标准图:统一口径的房地产板块评估框架 做房地产投资这一行,十个人里有八个问过同一个问题:一线还进不进,二线里哪几个能接棒。问得多了我发现,真正让人亏钱的往往不是判断错方向,而是一线与二线产区标准图根本没建起来——看一线用一套逻辑,看二… · 2026/11/4 17:49:53
OpCore-Simplify 完整指南:从一份硬件报告到可启动的 OpenCore EFI,5 个关键判断点讲清楚 OpCore-Simplify 完整指南:从一份硬件报告到可启动的 OpenCore EFI,5 个关键判断点讲清楚 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Sim… · 2026/11/4 19:09:32
LTX-2社区许可协议完全解读:商业使用与开源合规的终极指南 [特殊字符] LTX-2社区许可协议完全解读:商业使用与开源合规的终极指南 🚀 【免费下载链接】LTX-2 项目地址: https://ai.gitcode.com/hf_mirrors/Lightricks/LTX-2
LTX-2作为Lightricks公司推出的高效联合音视频基础模型,采用独特的LTX-2社区许可… · 2026/11/4 19:09:32
异构计算环境下的模型部署优化:Hermes Agent端到端量化方案深度解析 异构计算环境下的模型部署优化:Hermes Agent端到端量化方案深度解析
在AI应用开发中,模型部署的效率直接影响用户体验和资源消耗。Hermes Agent作为一款强大的AI代理框架,通过量化与剪枝技术可以显著提升部署性能,实现内存占用减少… · 2026/11/4 19:09:32
Zotero PDF 翻译插件:免费选中文本即译,支持 20+ 翻译服务 Zotero PDF 翻译插件:免费选中文本即译,支持 20 翻译服务 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.c… · 2026/11/4 19:09:32
SolidCraft 参数化 CAD 上手全解:改一个 24 mm,看整机箱如何自动重建 SolidCraft 参数化 CAD 上手全解:改一个 24 mm,看整机箱如何自动重建 【免费下载链接】solidcraft SolidCraft: an open-source parametric 3D CAD application built in pure Rust. Desktop, web, and automation through MCP. 项目地址: https://git… · 2026/11/4 19:09:32
3 分钟把 Win11 任务栏调回 Win10 样式:ExplorerPatcher 完整配置指南 3 分钟把 Win11 任务栏调回 Win10 样式:ExplorerPatcher 完整配置指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher
升级到 Wind… · 2026/11/4 19:08:31
双极步进电机控制实战: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/4 3:16:49
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/4 6:59:29
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/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战: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/4 3:16:49
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/4 6:59:29
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/4 7:02:38