基于PCA9422与STM32F205RB的便携设备低功耗电源管理设计
1. 项目缘起与整体设计思路1.1 为什么偏偏选中 PCA9422 这颗 PMIC做嵌入式时间久了的兄弟都有个共识MCU 跑得稳不稳一半看电源。我手上这个项目是一块便携式数据采集终端主控用 STM32F205RB外设包括一颗高精度 ADC、一片 SPI Flash、一个段式 LCD 屏还有一路低功耗无线模块。整机靠一块单节锂离子电池供电要求是待机功耗压到微安级、充电时能边充边用、还要能实时读到电池电量。这种需求如果拿分立器件去搭光是充电管理、升压、多路 LDO、电量计这几块就能铺满半张板子BOM 成本和调试时间都受不了。所以我把目光转向了集成 PMIC。PCA9422 这颗芯片是我对比了好几款之后定下来的核心原因有三点。第一它把线性充电器、多路可调输出、电量计前端和 I2C 控制逻辑全塞进了一颗 QFN 里外围只需要少量电感和电容PCB 面积能省一大截。第二它的输出轨可以软件配置电压和上电时序这对 STM32F205RB 这种需要 3.3V 内核加 1.8V 模拟参考的 MCU 来说太友好了不用再额外挂 LDO。第三它支持 I2C 读写寄存器MCU 可以直接查询充电状态、电池电压、故障标志省掉一颗独立的电量计芯片。这里要强调一个选型逻辑很多人选 PMIC 只看输出电压和电流够不够其实上电时序和关断时序才是隐藏的坑。STM32F205RB 的 VDD 和 VDDA 如果上电顺序不对或者 VDDA 先于 VDD 建立内部模拟部分可能出现闩锁或者参考电压漂移。PCA9422 的可编程时序恰好能解决这个问题这是分立方案很难做到的。1.2 整体电源架构是怎么划分的整机电源树我分成三层来理解。第一层是输入与充电层USB 5V 或者适配器进来经过 PCA9422 的充电器给电池充电同时系统可以从输入取电。第二层是电池到系统层电池电压经过 PMIC 内部的升压或者直通路径产生系统主供电。第三层是系统到负载层PMIC 输出多路稳压轨分别喂给 MCU、模拟部分、数字外设和无线模块。具体到电压域我规划了这么几路输出轨目标电压供给对象备注BUCK13.3VSTM32F205RB VDD、SPI Flash主数字轨电流需求最大LDO11.8VSTM32 VDDA、ADC 参考模拟轨噪声敏感LDO23.0VLCD 偏压、无线模块可关断以省电SWITCH电池直通充电指示、按键背光简单开关控制这个划分不是拍脑袋定的。STM32F205RB 的数据手册明确写了 VDD 范围 1.8V 到 3.6VVDDA 必须与 VDD 同电位或在其范围内且 VDDA 的纹波要控制得很低。所以我把模拟轨单独用 LDO 拉出来和数字轨的开关噪声隔离开。无线模块那一路做成可关断是因为它在待机时完全不需要供电关掉能省下几百微安。1.3 低功耗目标倒推的设计约束这个项目最硬的指标是待机电流。整机在休眠模式下要求小于 50 微安这意味着 PMIC 自身的静态电流必须压到 10 微安以内MCU 进入 STOP 模式外设全部断电。PCA9422 在 PFM 模式下的静态电流数据手册标称是几微安级别这是它能胜任的关键。但光靠芯片低功耗不够系统级漏电才是真正的杀手。我踩过的坑是某些 GPIO 在 MCU 休眠后如果还保持输出高电平会通过外设的输入保护二极管形成漏电通路。所以设计阶段我就把 MCU 所有未使用引脚配置成模拟输入使用中的引脚在休眠前统一拉低或者设为高阻。这个约束反过来影响了 PMIC 的使能引脚设计——我特意把 LDO2 的使能接到 MCU 的一个 GPIO 上休眠时由软件主动拉低而不是依赖 PMIC 默认状态。2. 核心细节解析与硬件实操要点2.1 PCA9422 外围元件选型与计算PCA9422 的 BUCK 部分需要外接电感这个电感选不好轻则效率低重则输出纹波大到 MCU 复位。我选的是 2.2 微亨的屏蔽功率电感饱和电流按峰值电流的 1.5 倍留余量。计算过程是这样的假设 BUCK1 输出 3.3V、最大负载 500 毫安开关频率按芯片典型值 2 兆赫兹算纹波电流取负载电流的 30% 即 150 毫安那么电感量 L 等于输出电压乘以1 减占空比再除以纹波电流乘以频率。占空比约等于 3.3 除以 3.7 电池电压约 0.89代入算出来大概 1.2 微亨取标准值 2.2 微亨留足余量。输出电容我用了两颗 22 微法陶瓷电容并联ESR 要低。这里有个经验陶瓷电容的直流偏压效应会让实际容值大幅缩水标称 22 微法在 3.3V 偏压下可能只剩 12 微法。所以宁可多并一颗也别卡着最小值设计。输入电容同样重要我放了 10 微法加 0.1 微法组合大电容储能、小电容滤高频。I2C 总线的上拉电阻我选 4.7 千欧因为总线走线不长、速率用 400 千赫兹标准模式。如果走线超过 10 厘米或者挂多个从机建议降到 2.2 千欧但要注意静态功耗会增加。这个取舍在低功耗项目里很关键上拉电阻越小总线空闲时的漏电流越大。2.2 STM32F205RB 电源引脚的处理细节STM32F205RB 是 LQFP64 封装VDD 引脚有多个VDDA 单独一个还有 VBAT 和 VREF。我的处理方式是所有 VDD 引脚就近放 0.1 微法去耦电容再在电源入口放一颗 4.7 微法钽电容做储能。VDDA 通过一个磁珠或者 0 欧电阻从 1.8V LDO 引入旁边配 1 微法和 0.1 微法组合。VREF 如果不用外部基准就通过 0 欧电阻接到 VDDA。VBAT 引脚我接的是纽扣电池用于 RTC 备份。这里要注意如果不用备份电池VBAT 必须接到 VDD不能悬空否则可能引入干扰。我见过有人 VBAT 悬空导致 RTC 走时不准的案例排查了半天才发现是这个小细节。还有一个容易忽略的点是复位引脚 NRST。它内部有上拉但外部还是建议放一颗 0.1 微法电容到地滤掉电源上电时的毛刺。如果 PMIC 上电时序里有任何一路电压建立缓慢NRST 上的干扰可能导致 MCU 反复复位。我在调试初期就遇到过这个问题后来在 NRST 上加了电容才稳定。2.3 I2C 通信链路与地址规划PCA9422 通过 I2C 和 MCU 通信7 位地址由芯片的 ADDR 引脚电平决定。我把 ADDR 接地地址就固定下来了。总线上还挂了另一颗 I2C 器件一个温度传感器所以地址不能冲突选型时就核对过。通信速率我配置成 400 千赫兹STM32F205RB 的 I2C 外设支持这个速率。初始化时要注意先配置 GPIO 为复用开漏模式再配置 I2C 时钟和控制寄存器。顺序反了可能出现总线锁死。另外PCA9422 的寄存器读写需要遵循它的协议格式通常是先写寄存器地址再读或写数据中间不能插入停止条件。我在驱动里加了一层超时保护每次 I2C 操作如果超过 10 毫秒没完成就强制复位 I2C 外设重新初始化。这个保护在实际运行中救过我好几次尤其是电池电压偏低、PMIC 响应变慢的时候。3. 软件驱动与电源管理实现3.1 I2C 底层驱动的编写要点底层驱动我用的是寄存器级操作没有依赖 HAL 库的 I2C 模块原因是 HAL 库在某些边界情况下会产生总线死锁而且代码体积偏大。自己写的驱动核心就三个函数起始条件、发送字节、接收字节加上超时计数。关键实现细节是时钟拉伸的处理。PCA9422 在某些操作比如充电状态转换时会拉低 SCL 线告诉主机它还没准备好。如果主机不支持时钟拉伸就会误判为通信失败。STM32F205RB 的 I2C 外设硬件支持时钟拉伸但需要确保在初始化时使能相关位。我在调试时用逻辑分析仪抓过波形确认了拉伸行为正常。写寄存器时我封装了一个函数参数是寄存器地址和要写的值。读寄存器则是先写地址不带停止再重启读数据。这个写地址-重启-读数据的序列是很多 I2C 器件的标准操作但初学者容易漏掉重启步骤导致读出来全是 0xFF。3.2 充电管理与状态机设计充电管理这块我设计了一个状态机状态包括未充电、预充、恒流充电、恒压充电、充电完成、故障。状态迁移的依据是读取 PCA9422 的充电状态寄存器。预充阶段是电池电压低于某个阈值时用小电流唤醒防止深度放电的电池被大电流冲击。恒流阶段电流最大也是发热最严重的阶段。恒压阶段电压固定电流逐渐减小。当电流降到设定值的十分之一左右判定为充电完成。这里有个实操心得充电电流的设定要结合电池容量和散热条件。我用的电池是 2000 毫安时按 0.5C 充电就是 1 安培但板子空间小、散热差实际我只设到 500 毫安充电时间长了点但温度可控。如果强行上 1 安培PMIC 和电池都会烫手长期可靠性堪忧。状态机里我还加了去抖逻辑连续三次读到同一状态才确认迁移避免寄存器瞬时值波动导致状态乱跳。这个技巧在读取任何模拟量相关的状态位时都适用。3.3 低功耗模式与唤醒路径STM32F205RB 的低功耗模式我用的是 STOP 模式因为要保留 SRAM 内容且唤醒时间短。进入 STOP 前软件要做几件事关闭所有外设时钟、把 GPIO 配置成模拟输入或低电平输出、通过 I2C 告诉 PCA9422 关闭不需要的输出轨、最后执行 WFI 指令。唤醒源我配置了两个一个是 RTC 定时唤醒用于周期性采集另一个是外部中断来自按键或者无线模块的中断引脚。唤醒后第一件事是重新初始化时钟和 I2C因为 STOP 模式下这些外设的状态会丢失。实测下来整机休眠电流在 35 微安左右满足小于 50 微安的目标。其中 MCU 本身约 5 微安PMIC 静态约 8 微安剩下的主要是电池保护板和漏电流。这个数据是用高精度电流表串在电池回路里测的比估算靠谱得多。4. 常见问题与排查技巧实录4.1 上电后 MCU 不启动的排查思路这个问题我遇到过两次第一次是 PMIC 的 BUCK1 输出没起来原因是使能引脚的配置电阻焊错了导致芯片一直处于关断状态。第二次是 BUCK1 起来了但 MCU 不跑用示波器看 NRST 引脚发现一直在振荡最后定位到是 VDDA 的上电时间比 VDD 慢了太多MCU 内部复位电路反复触发。排查这类问题的顺序我总结成一张表现象优先检查项工具完全无输出PMIC 输入电压、使能引脚电平万用表输出偏低反馈电阻、负载是否过重万用表、电子负载输出振荡电感电容选型、补偿网络示波器MCU 反复复位NRST 波形、VDDA 时序示波器I2C 不通上拉电阻、地址、时钟拉伸逻辑分析仪提示上电时序问题用示波器多通道同时抓 VDD、VDDA、NRST 三路波形一眼就能看出顺序对不对。别用万用表万用表反应太慢看不到瞬态。4.2 充电异常的典型原因充电异常最常见的是插上充电器但电流为零。我排查下来有几个原因一是电池温度检测引脚NTC没有正确接电阻PMIC 判定温度异常拒绝充电二是充电使能位没写对三是输入电压低于欠压锁定阈值。还有一个隐蔽的坑是充电完成后的再充电阈值。电池充满后电压会缓慢下降如果再充电阈值设得太高会出现频繁的充满-再充循环既伤电池又发热。我把再充电阈值设在比满电电压低 0.15V 左右实测循环次数明显减少。4.3 I2C 通信失败的速查方法I2C 不通是嵌入式调试的高频问题。我的速查流程是先用逻辑分析仪看有没有起始条件再看从机有没有应答最后看数据对不对。如果没有起始条件说明主机没发出来检查 GPIO 配置和 I2C 使能位。如果有起始但没应答检查从机供电、地址、上拉电阻。如果应答了但数据错检查时钟速率和时序参数。注意I2C 总线如果被某个从机拉死比如从机复位时正好在传输中间SCL 或 SDA 会一直保持低电平。这时候需要主机发送 9 个时钟脉冲来解锁或者直接给从机断电重启。我在驱动里加了总线恢复函数检测到总线异常时自动执行。4.4 低功耗不达标的排查清单休眠电流超标是最让人头疼的问题因为它往往是多个小漏电叠加的结果。我的排查清单是这样的先断开所有外设只留 MCU 和 PMIC测基础电流然后逐个接回外设看哪个接上后电流跳变最后检查每个 GPIO 的状态特别是那些接了上拉电阻的引脚休眠时如果输出低电平上拉电阻上就会有持续电流。我踩过的一个坑是某个状态指示 LED 的限流电阻另一端接在 3.3V 上MCU 休眠时引脚输出低电平LED 虽然不亮因为电压不够但漏电流一直存在。后来改成引脚输出高电平、LED 接地的接法休眠时引脚设为高阻漏电才消失。这种细节数据手册不会告诉你只能靠实测和经验积累。5. 实测数据与优化经验分享5.1 各工作模式下的功耗实测我把整机在几种典型模式下的电流都测了一遍数据如下工作模式实测电流主要耗电项全速运行85 毫安MCU 全速、无线发射、LCD 亮采集模式22 毫安MCU 运行、ADC 工作、无线待机空闲模式6 毫安MCU 降频、外设部分关闭休眠模式35 微安MCU STOP、PMIC 低功耗、漏电关机模式2 微安仅 PMIC 关断漏电这组数据是用源表测的精度到微安级。从数据能看出来无线模块和 LCD 是耗电大户所以软件策略上采集间隙尽量关掉它们。休眠模式的 35 微安里我后来通过优化 GPIO 配置又压到了 28 微安左右主要就是把几个悬空引脚从浮空输入改成了模拟输入。5.2 效率优化与发热控制BUCK 的效率我实测在 3.7V 输入、3.3V 输出、300 毫安负载下大约 88%这个数字在同类 PMIC 里算中上水平。效率损失主要来自开关损耗和电感直流电阻。如果想再提升可以换更低直流电阻的电感但体积和成本会上去我权衡后没换。发热控制方面充电时 PMIC 表面温度最高到 45 摄氏度左右环境温度 25 度。这个温升在可接受范围内但如果夏天高温环境使用建议降低充电电流或者增加散热铜箔面积。我在 PCB 上把 PMIC 底部的散热焊盘连了一大片铜并通过过孔连到背面地平面散热效果明显。5.3 长期运行稳定性观察这块板子我连续跑了两个星期每天充放电循环两次没有出现死机或者充电异常。唯一一次异常是某天发现充电电流偏低排查后发现是 USB 线材质量差线阻大导致输入电压跌落PMIC 自动降流保护。换了根好线就正常了。这个经历告诉我电源项目的稳定性不只取决于板子本身外部供电质量同样关键。软件层面我加了看门狗和电源异常日志每次复位后可以读取上次复位原因。这个日志帮我定位过一次偶发的欠压复位最后发现是电池老化内阻增大大电流瞬间把电压拉低了。后来在软件里加了电池内阻估算电压过低时主动降频问题就没再出现。6. 后续可扩展的方向这套电源管理框架搭好之后其实还有不少可以深挖的地方。比如把电量计功能做完整通过库仑计算法精确估算剩余电量而不是只看电压。再比如加入温度补偿充电根据 NTC 读到的温度动态调整充电电流低温时减小电流保护电池。这些功能 PCA9422 的寄存器都支持只是软件工作量的问题。硬件上如果想进一步压缩待机功耗可以考虑把 PMIC 的 I2C 总线在休眠时也断开用 MCU 的一个 GPIO 控制总线开关。不过这样唤醒后需要重新初始化 I2C唤醒时间会增加几毫秒。这个取舍要看具体应用对唤醒速度的要求。我个人在实际操作中的体会是电源管理项目最忌讳想当然。每一个电压、每一个时序、每一个电流路径都要用仪器测过才算数。数据手册给的是典型值实际板子上的表现受布局、元件、负载影响很大。多测、多记、多对比才能把电源这块硬骨头啃下来。

相关新闻

【单片机毕业设计】基于单片机的学生宿舍大气环境安全监测与 WIFI 远程报警系统设计 基于单片机的多传感器融合室内环境参数采集与联动控制装置设计(030110)

【单片机毕业设计】基于单片机的学生宿舍大气环境安全监测与 WIFI 远程报警系统设计 基于单片机的多传感器融合室内环境参数采集与联动控制装置设计(030110)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/10 6:04:47 阅读更多 →
Spring Boot嵌入式容器启动与端口绑定原理源码深度拆解

Spring Boot嵌入式容器启动与端口绑定原理源码深度拆解

1. 为什么会问"嵌入式容器启动与端口绑定":八卦背后的真实考点有个段子说得好,京东面试官不爱直接问"Redis集群脑裂怎么处理",更爱从你简历上最不起眼的一句话开始深挖。那次朋友面试回来跟我复盘,第一轮就被…

2026/10/10 6:03:47 阅读更多 →
【MT32F006】MT32F006之读写内部EEPROM

【MT32F006】MT32F006之读写内部EEPROM

本文最后修改时间:2024年04月19日一、本节简介本文介绍如何使用MT32F006读写内部的eeprom。二、实验平台库版本:V1.0.0编译软件:MDK5.37硬件平台:MT32F006开发板(主芯片MT32F006)仿真器:JLINK三…

2026/10/10 6:03:47 阅读更多 →

最新新闻

Java集合框架底层原理与性能优化:从ArrayList到HashMap

Java集合框架底层原理与性能优化:从ArrayList到HashMap

Java里的集合框架,很多开发者从学习第一天就开始用,ArrayList存数据、HashMap做缓存,写着写着就成了肌肉记忆。但真正问你几个问题——ArrayList扩容到底怎么扩的?HashMap在JDK 8里引入红黑树是为什么?遍历的时候删元素…

2026/10/10 6:35:57 阅读更多 →
USACO白银组真题解析:BFS、序列DP与边界陷阱

USACO白银组真题解析:BFS、序列DP与边界陷阱

2008年2月的USACO白银组,是很多早期选手在 usaco.org 或 POJ 上反复刷的一套题。那年白银组一共三道题:Meteor Shower(流星雨)、Eating Together(一起吃饭)、Dining Cows(奶牛排队)&…

2026/10/10 6:35:57 阅读更多 →
微软DCU英国法庭首战:从技术溯源到司法打击黑产链

微软DCU英国法庭首战:从技术溯源到司法打击黑产链

事情得从微软数字犯罪部门第一次以原告身份走进英国法院说起。对圈外人来说,这可能只是一条关于“网络黑产被告上法庭”的新闻;但对做安全运营的人来说,这条消息传递的信号其实非常重:科技巨头开始从“受害者保护者”的位置&#…

2026/10/10 6:35:57 阅读更多 →
开发团队如何评估链助手内测分发的实际价值

开发团队如何评估链助手内测分发的实际价值

开发团队如何评估链助手内测分发的实际价值在移动应用快速迭代的背景下,许多技术负责人和开发者开始关注链助手内测分发服务的性价比怎么样。其核心价值并非单纯体现在价格层面,而在于如何在降低部署成本与提升测试效率之间找到最佳平衡点。链助手通过简…

2026/10/10 6:35:57 阅读更多 →
PCA9422+STM32电源管理:从分立LDO到可编程策略

PCA9422+STM32电源管理:从分立LDO到可编程策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 6:35:57 阅读更多 →
nano代替vim:Linux新手与运维的终端编辑新选择

nano代替vim:Linux新手与运维的终端编辑新选择

1. 别再被vim劝退了:聊聊nano代替vim这件事先说说我自己的经历。刚接触Linux那会儿,我听到最多的一句话就是“你必须学会vim,因为你迟早要在终端里改配置”。于是我硬着头皮看了不少教程,记住了i进入插入模式、Esc退出、:wq保存&a…

2026/10/10 6:34:57 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →