STM32开发环境搭建全攻略:Keil MDK、编译器选型与驱动配置详解
1. 项目概述搭建STM32开发环境的必经之路拿到一块STM32开发板第一件事不是急着写代码而是要把“战场”布置好。这个“战场”就是我们的开发环境。很多新手朋友包括当年的我都容易在这个看似简单的第一步上栽跟头。环境没配好后续的编译、下载、调试全是问题热情很容易被一堆莫名其妙的报错消磨殆尽。今天我们就来彻底搞定STM32开发环境的安装涵盖从代码编辑器、编译器到下载调试器的全套工具链。我会把每一步的原理、操作和可能遇到的坑都讲清楚让你一次配置长久受益。无论你是刚接触嵌入式还是从其他平台比如Arduino转过来这篇笔记都能帮你扫清障碍快速进入真正的开发阶段。2. 核心工具链解析与选型考量STM32开发不像Arduino那样有一个高度集成的IDE虽然现在也有STM32CubeIDE传统的、最主流的方式是使用Keil MDKMicrocontroller Development Kit这套工具。但仅仅一个Keil是不够的它就像一个大厨还需要厨房芯片支持包、灶具编译器和送餐员调试下载器驱动配合才能做出菜。下面我们来拆解这套工具链。2.1 集成开发环境IDE为什么是Keil MDK在STM32的生态里Keil MDK常被称为Keil5是市场占有率极高的商业IDE。它并非唯一选择IAR、STM32CubeIDE、甚至VSCode插件都是可行的。但对于初学者和大多数企业开发而言Keil的优势非常明显。首先生态成熟度。Keil被ARM公司收购后成为了ARM Cortex-M内核的“亲儿子”开发工具。它对ARM架构的支持是最原生、最稳定的。海量的STM32例程、教程、书籍都基于Keil社区资源极其丰富你遇到的绝大多数问题都能在网上找到答案。其次调试功能强大。Keil集成的µVision调试器功能非常全面实时变量查看、内存监视、性能分析、逻辑分析仪Logic Analyzer等功能对于深入理解程序运行和排查复杂问题至关重要。这些功能在免费或开源工具中往往不够完善或配置繁琐。最后工程管理便捷。Keil的工程结构清晰对于芯片支持包Device Family Pack、编译器版本、链接脚本等配置管理非常直观。虽然初期学习配置需要一点时间但一旦掌握对于管理大型项目或切换不同型号的STM32芯片非常高效。当然Keil是商业软件需要授权。对于学习和非商业用途其提供的代码大小限制版32KB Flash限制基本够用。这也是我们选择它的一个现实原因。2.2 编译器AC5与AC6的抉择Keil MDK本身不包含编译器它需要调用外部的编译器。ARM提供了两款主流的编译器ARM Compiler 5简称AC5和 ARM Compiler 6简称AC6。在安装Keil时或后续创建工程时你必须面对这个选择。ARM Compiler 5 (AC5)这是传统的编译器基于ARM最初的编译器工具链稳定性和兼容性极佳。几乎所有的老项目、库文件特别是那些包含汇编启动文件的都是为AC5设计的。它的编译错误信息相对“古老”但直接。如果你要使用大量现成的旧代码、第三方库如某些DSP库、RTOS的旧版本AC5是更安全的选择。ARM Compiler 6 (AC6)这是ARM基于LLVM/Clang技术构建的现代编译器。它的优势在于更优化的代码生成通常代码体积更小运行效率更高更符合现代C/C标准如C11、C14并且提供了更好的警告和错误信息。ARM官方也明确表示未来将主要支持AC6。注意很多新手遇到的经典报错“*** Target ‘XXX’ uses ARM-Compiler ‘Default Compiler Version 5’ which is not available.”就是因为工程默认配置了AC5但你的Keil安装时没有勾选或后续没有安装AC5组件导致的。我的建议是对于全新项目尤其是基于HAL/LL库或CubeMX生成的项目优先选择AC6享受更好的优化和现代特性。对于维护旧项目或使用特定旧库则使用AC5。好在Keil允许你在工程中方便地切换两者。2.3 调试下载器ST-LINK的江湖地位写好的程序需要灌入到STM32芯片里这个“灌入”的动作就需要调试下载器。STM32官方推出的ST-LINK系列是绝对的主流。它价格低廉性能可靠并且完全兼容Keil、IAR等IDE。ST-LINK有两个核心功能下载程序和在线调试。下载程序通过SWDSerial Wire Debug或JTAG接口将编译生成的二进制文件.hex或.bin写入芯片的Flash存储器。在线调试允许你在程序运行时暂停设置断点、单步执行、查看和修改变量/寄存器值。这是开发过程中排查逻辑错误的利器。你需要安装ST-LINK的USB驱动电脑才能识别并与之通信。通常安装Keil MDK时会自动安装一部分驱动但为了确保完整特别是使用独立的ST-LINK Utility工具时最好从ST官网下载并安装最新的ST-LINK驱动。2.4 串口通信助手与芯片对话的窗口除了调试串口UART是嵌入式开发中最常用、最简单的数据打印和通信接口。我们常常通过串口输出调试信息printf、接收上位机指令或传输数据。这就需要用到USB转串口芯片如CH340、CP2102、PL2303和对应的串口助手软件。开发板上通常集成了USB转串口芯片或者你需要一个独立的USB转TTL模块。无论哪种都需要在电脑上安装对应的USB转串口驱动如CH340驱动、PL2303驱动设备管理器中才会出现一个可用的COM口。串口助手软件选择很多有免费的如Putty、SecureCRT绿色版、MobaXterm、也有功能强大的商业软件。它们的作用就是打开指定的COM口设置波特率、数据位、停止位、校验位等参数然后接收和发送数据。3. 分步实操从零搭建完整环境理论说再多不如动手做一遍。下面我们开始一步步安装和配置。请严格按照顺序操作可以避免很多依赖性问题。3.1 Keil MDK的下载与安装获取安装包访问ARM Keil官网找到MDK-Arm的下载页面。你需要注册一个账号免费然后才能下载安装包和后续的芯片支持包。不建议从不明来源下载破解版官方的评估版足够学习使用。运行安装程序以管理员身份运行安装程序。安装路径强烈建议使用全英文路径不要包含空格或中文。例如D:\Keil_v5。这是避免后续一系列诡异问题的关键。组件选择在安装过程中会让你选择要安装的组件。这里至关重要Core核心文件必选。ARM Compiler 5务必勾选即使你打算用AC6也先装上AC5这是兼容性的保障。Device Family Packs芯片支持包。这里可以只装一个基础的或者先不装我们后面用包管理工具在线安装更灵活。ST-LINK Drivers务必勾选。安装ST-LINK的USB驱动。USB转串口驱动如果列表里有你需要的如Silicon Labs CP210x可以勾选。没有也没关系可以单独安装。完成安装按照提示完成安装。安装完成后先不要急着打开软件。3.2 芯片支持包DFP的安装Keil本身不认识具体的STM32F103、F407这些芯片需要通过Device Family Pack来添加支持。打开Pack Installer在开始菜单或Keil安装目录下找到Keil uVision5并打开。第一次打开可能会提示安装DFP点击确认。或者点击菜单栏的Pack-Pack Installer。在线安装在Pack Installer窗口你会看到一个列表。在Devices标签页你可以搜索“STMicroelectronics”然后展开找到你使用的芯片系列例如STM32F1 Series。选中你需要的具体型号如STM32F103ZE。安装Pack在右侧的Packs标签页会列出可安装的包。找到Keil::STM32F1xx_DFP版本号可能不同点击“Install”按钮。软件会自动下载并安装。这个过程需要网络且可能较慢。实操心得如果网络不好也可以去ARM官网或ST官网离线下载对应的.pack文件然后在Pack Installer里通过File - Import来离线安装。对于公司内网或网络不稳定环境这是必备技能。3.3 编译器配置与工程创建测试检查编译器打开Keil点击Project - Manage - Project Items或者点击工具栏的魔术棒图标Options for Target在Target标签页的ARM Compiler下拉框中你应该能看到“Use default compiler version 5”和“Use default compiler version 6”的选项。这说明AC5和AC6都已就绪。创建第一个工程Project - New uVision Project...选择一个英文路径的文件夹给工程起名。在弹出的Select Device for Target窗口选择你的芯片型号例如STMicroelectronics - STM32F103 Series - STM32F103ZE。点击OK。接下来会弹出一个对话框 “Copy STM32 Startup Code to Project Folder and Add File to Project?”这里要谨慎选择。如果你选择“是”Keil会为你复制一份基于AC5的启动文件.s汇编文件。如果你打算使用AC6这个启动文件可能不兼容。对于新手我建议先选“否”。我们可以用CubeMX生成更现代化的启动代码或者稍后手动添加兼容AC6的启动文件。配置基础选项在魔术棒选项里有几个关键点Target标签设置晶振频率根据你的开发板通常是8MHz外部晶振。Output标签勾选Create HEX File用于生成下载文件。C/C标签在Define框中根据你的芯片输入全局宏定义例如对于STM32F103ZE需要输入USE_STDPERIPH_DRIVER, STM32F10X_HD。如果你用的是HAL库则定义不同。这是告诉编译器我们用的是标准外设库且是大容量芯片。Debug标签选择你使用的调试器比如ST-LINK Debugger然后点击旁边的Settings。在Debug选项卡确认SWD接口被识别在Flash Download选项卡里勾选Reset and Run这样下载后程序会自动运行。3.4 驱动安装与硬件连接验证ST-LINK驱动验证用USB线连接ST-LINK到电脑。打开设备管理器在“通用串行总线控制器”或“libusb-win32 devices”下应该能看到“ST-LINK Debug”或类似设备。如果没有感叹号说明驱动正常。如果提示驱动问题可以运行Keil安装目录下的ST-LINKUpgrade.exe工具或去ST官网下载独立的STSW-LINK009驱动包进行安装。USB转串口驱动安装将开发板的USB转串口接口或独立的USB-TTL模块连接到电脑。在设备管理器的“端口COM和LPT”下会看到一个未知设备或有感叹号的设备。根据芯片型号看开发板原理图或模块上的芯片去官网下载驱动。CH340在国内开发板上极其常见搜索“CH340驱动”下载安装。CP2102/CP2104Silicon Labs出品稳定性好。PL2303老牌芯片注意有不同版本PL2303HX, PL2303TA等需要安装对应版本的驱动否则可能无法工作。 安装成功后设备管理器会显示一个具体的COM口例如“USB-SERIAL CH340 (COM3)”。记下这个COM口号。硬件连接检查确保开发板、ST-LINK、USB转串口线连接正确。通常需要四根线ST-LINK的SWDIO、SWCLK、GND、3.3V连接到开发板对应引脚。USB转串口的TX、RX、GND连接到开发板的USART1的RX、TX和GND注意TX接RXRX接TX。4. 常见问题深度排查与解决实录环境安装过程中90%的问题都集中在驱动、路径和配置上。下面我把这些年踩过的坑和解决方案整理出来。4.1 Keil相关报错与解决问题1编译时提示找不到头文件报错error: #5: cannot open source input file “core_cm3.h”原因分析这是最典型的路径问题。编译器在预定义的系统包含路径里找不到ARM Cortex-M内核的头文件。这些文件通常位于Keil安装目录下的ARM\Pack\ARM\CMSIS\xxx\Include或芯片支持包内。解决方案检查魔术棒选项里C/C标签的Include Paths。确保包含了芯片支持包和CMSIS的路径。一个简单的方法是点击输入框末尾的“...”然后添加.\当前目录和..\上级目录的相对路径以及Keil安装目录下的ARM\Packs\ARM\CMSIS\xxx\Include绝对路径。更根本的解决方法是在工程中正确添加了芯片支持包后这些路径应该是自动配置好的。如果报错可以尝试在Pack Installer中重新安装或更新对应的Device Family Pack。问题2工程编译正常但下载时提示 “ST-LINK connection error”原因分析通信失败。可能原因有驱动未安装、ST-LINK硬件故障、连线错误特别是SWDIO和SWCLK、目标板没供电、芯片进入了休眠/停止模式、或者SWD接口被复用为普通IO口即JTAG/SWD被禁用。排查步骤检查硬件确认ST-LINK的指示灯是否正常常亮或闪烁。用万用表测量目标板的3.3V和GND是否正常。检查四根连接线是否牢固。检查驱动在设备管理器中确认ST-LINK设备无异常。检查配置在Keil的Debug - Settings中看能否识别到ST-LINK的设备ID。如果识别不到肯定是硬件或驱动问题。如果能识别到ID但连接失败进入下一步。检查芯片状态如果之前程序错误地禁用了SWD接口例如将PA13, PA14, PA15配置成了普通输出ST-LINK将无法连接。这时需要复位启动。STM32芯片上通常有一个BOOT0引脚。将BOOT0通过跳线帽接到高电平3.3VBOOT1保持低电平然后给芯片重新上电。这样芯片会从系统存储器启动而不是用户Flash此时SWD接口是默认可用的。再用ST-LINK连接擦除整个芯片使用Target - Flash - Erase功能然后断开BOOT0的高电平重新上电芯片恢复正常启动模式SWD功能也就恢复了。问题3使用AC6编译器时链接阶段报错 “undefined symbol”原因分析AC6和AC5在链接规范、库文件格式上不完全兼容。特别是那些包含内联汇编或特定编译器指令pragma的旧库文件如某些DSP库、旧的RTOS移植层在AC6下可能无法直接链接。解决方案优先方案寻找该库的AC6兼容版本。很多现代库如STM32 HAL/LL库、FreeRTOS官方移植都已经支持AC6。兼容方案如果必须使用旧库可以在Keil的魔术棒选项C/C标签下找到Language/Code Generation将Use ARM Compiler改回Use default compiler version 5即切换回AC5。混合编译对于大型工程可以尝试只将不兼容的源文件用AC5编译其余用AC6。但这需要在工程中为特定文件组或文件单独设置编译器选项操作较复杂不推荐新手尝试。4.2 驱动与通信类问题问题4USB转串口设备识别为“未知设备”或COM口频繁丢失原因分析驱动不匹配或冲突。PL2303芯片的驱动版本混乱是重灾区。Windows系统更新也可能导致已安装的驱动失效。解决方案彻底卸载旧驱动在设备管理器中右键卸载设备并勾选“删除此设备的驱动程序软件”。然后重启电脑。安装正确版本去芯片原厂官网下载驱动。对于PL2303建议使用芯片表面印有“TA”字样的PL2303TA的驱动。如果找不到可以尝试知名的第三方驱动管理软件如Drivereasy自动识别安装但需注意软件来源安全。更换硬件如果条件允许CH340和CP2102芯片的驱动在Windows下兼容性更好更稳定可以考虑更换模块。问题5串口助手能打开COM口但收不到任何数据排查步骤确认接线TX接RXRX接TXGND接GND。这是最常犯的错误。确认波特率等参数在串口助手和你的STM32代码中波特率、数据位8、停止位1、校验位None必须完全一致。确认代码检查USART初始化代码是否正确特别是时钟是否使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE)。检查发送函数是否被正确调用。使用逻辑分析仪或示波器这是终极手段。用示波器探头测量单片机USART_TX引脚在程序发送数据时应该能看到清晰的数字波形。如果没有波形问题在代码如果有波形但串口助手没收到问题在接线、驱动或串口助手设置。4.3 工程与配置进阶问题问题6如何让Keil5兼容C51和ARM开发解决方案需要分别安装Keil C51和Keil MDK。安装时将它们安装到同一个父目录下例如D:\Keil_v5。先安装C51再安装MDK。安装MDK时它会自动检测到已存在的C51并将两者集成。最终桌面上只有一个Keil µVision5图标打开后通过Project - Select Device for Target选择51内核或ARM内核的芯片IDE会自动切换对应的编译器和环境。问题7从网络或他人那里拷贝的工程打开后左侧的Project窗口是空的原因分析Keil的工程信息保存在.uvprojx文件里但文件列表的显示依赖于本地的路径映射。如果工程被移动或者你打开的是别人工程里一个单独.c文件就会出现这种情况。解决方案不要直接双击.c文件打开。应该关闭所有Keil窗口然后双击工程文件.uvprojx打开整个工程。如果还不行尝试Project - Open Project...重新选择.uvprojx文件。环境搭建是STM32学习的第一道门槛也是检验你耐心和解决问题能力的试金石。这套工具链Keil ST-LINK 串口是后续所有学习、开发、调试的基础。配置过程中遇到问题不要慌按照“硬件连接 - 驱动识别 - 软件配置 - 代码检查”的顺序逐步排查绝大部分问题都能在搜索引擎和社区里找到答案。记住把这次环境搭建的每一步、每一个报错和解决过程都记录下来形成你自己的“避坑指南”这本身就是一项宝贵的学习成果。当你成功点亮第一颗LED在串口助手看到第一句“Hello STM32”时你会觉得这一切都是值得的。

相关新闻

2026年内容创作趋势与AI技术应用前瞻

2026年内容创作趋势与AI技术应用前瞻

1. 内容创作行业的现状与挑战2023年的内容创作领域正经历着前所未有的变革。作为一个在这个行业摸爬滚打了十年的老兵,我亲眼见证了从博客时代到短视频时代的完整变迁。现在的创作者们面临着三大核心挑战:首先是平台算法的不可预测性。去年还能轻松获得百…

2026/9/24 15:06:02 阅读更多 →
Elasticsearch安全加固实战:从单机部署到Spring Boot客户端集成

Elasticsearch安全加固实战:从单机部署到Spring Boot客户端集成

1. 项目概述:为什么Elasticsearch安全加固刻不容缓 如果你在生产环境用过Elasticsearch,大概率经历过那种“后背发凉”的时刻:某天心血来潮,用curl或者浏览器直接访问一下 http://你的服务器IP:9200 ,结果发现整个集…

2026/10/13 23:37:17 阅读更多 →
C++字符串处理实战:5道核心题掌握std::string标准库精髓

C++字符串处理实战:5道核心题掌握std::string标准库精髓

1. 项目概述:为什么我们要死磕这5道字符串题? 如果你正在学习C,尤其是刚啃完 std::string 的基础语法,感觉“懂了”,但一上手写代码就卡壳,或者面对面试官抛出的字符串处理问题大脑一片空白,那…

2026/10/9 7:11:40 阅读更多 →

最新新闻

PS5游戏兼容层技术解析:系统调用翻译与图形API转换实战

PS5游戏兼容层技术解析:系统调用翻译与图形API转换实战

1. 这个项目到底在解决什么问题 第一次看到“让PS5游戏跑在PC上”这个说法,我第一反应是:又来了,每隔一段时间就会有类似的标题冒出来。但点进去仔细看完这个17.2K Star的项目之后,我发现它跟以前那些“模拟器”路子完全不一样&am…

2026/10/14 8:51:30 阅读更多 →
五级分支流道自动生成算法与工程优化

五级分支流道自动生成算法与工程优化

1. 项目背景与需求解析 在精密加工和流体控制领域,多级分支流道系统是许多工业设备的核心部件。这类结构常见于注塑模具、液压阀块、微流控芯片等场景,其设计质量直接影响流体传输效率和系统稳定性。传统设计流程中,工程师需要手动计算每个分…

2026/10/14 8:51:30 阅读更多 →
基于SSM框架的企业知识库管理系统开发实践

基于SSM框架的企业知识库管理系统开发实践

1. 项目概述与核心价值这个知识库管理系统是我去年为一家中型科技公司实施的内部文档协作平台。当时他们正面临技术文档分散在多个同事电脑、版本混乱、查找困难等问题。基于JavaWeb技术栈开发的这套系统,最终实现了公司近3000份技术文档的集中管理和高效协作。SSM&…

2026/10/14 8:51:30 阅读更多 →
五级分支流道系统参数化设计与算法实现

五级分支流道系统参数化设计与算法实现

1. 项目背景与核心需求在精密加工和流体控制领域,多级分支流道系统是常见的基础结构。这类系统通常用于分配液体或气体介质,要求各分支的流量均衡且压力损失可控。传统设计方法依赖CAD软件手动绘制,效率低下且难以保证参数化精度。这个项目的…

2026/10/14 8:51:30 阅读更多 →
代码出片:用Claude Opus 5.5和开源图形库生成视觉大片

代码出片:用Claude Opus 5.5和开源图形库生成视觉大片

1. 为什么选择“代码出片”,而不是视频模型1.1 视频生成模型的两道坎:可控性弱与风格迁移难这两年“文字生成视频”确实火,不用摄影棚、不用演员,一句话就能出一个看起来挺唬人的镜头。但真把它当生产力工具用,你会发现…

2026/10/14 8:51:30 阅读更多 →
Unity编辑器底层机制与运行时原理详解

Unity编辑器底层机制与运行时原理详解

1. 别被“基础”两个字骗了:为什么Unity新手常在第3小时就卡死在编辑器里很多人点开Unity安装包时,心里想的是“不就是拖拖拽扭、放放模型、点点播放键吗”,结果三小时后盯着控制台里一串红色报错发呆——“NullReferenceException: Object r…

2026/10/14 8:50:30 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →