FDCAN发送端实战:从经典CAN迁移到CAN FD的配置与避坑指南
简介这份资源面向使用STM32G0B1进行FDCAN通信开发的嵌入式工程师与学习者围绕HAL库实现CAN帧发送这一核心场景帮助解决FDCAN模块初始化、消息对象配置与总线参数设置等实际问题。压缩包共1215个文件以661个c源文件、259个h头文件为主辅以103个s汇编启动文件、24个icf链接脚本及uvprojx、ioc等工程配置整体约56.26MB构成一套可直接编译的完整工程。内容涵盖STM32G0B1的FDCAN外设特性、HAL库标准化接口调用、比特率与帧格式设定、错误检测机制并延伸至通过CAN总线与TFT_VCU显示终端交互的命令帧设计预览中可见数学库与HAL外设驱动文件说明工程同时集成了信号处理与多外设支持。已有1083人学习下载适合希望从零搭建FDCAN收发链路、理解HAL抽象层移植思路的开发者参考也可作为汽车电子、工业自动化等场景的通信代码模板。1. FDCAN_Send.rar 背后一个 CAN FD 发送端到底要解决什么问题如果你手里拿到一个叫FDCAN_Send.rar的压缩包大概率场景是这样的某块板子上跑着 CAN FD你需要让它周期性地往外发几帧报文或者按事件触发发一帧但手头的工程要么是经典 CAN 的旧代码要么是别人给的半成品收发都对不上。这个标题里的关键词拆开看就三件事——FDCAN 是外设控制器Send 是发送方向rar 说明它是一份可解压的工程或源码集合。它要解决的核心问题不是“CAN 是什么”而是“怎么让 FDCAN 外设真的把一帧数据按你想要的格式、时序、ID 发到总线上并且能被另一台设备正确收到”。适合读这篇的人有三类刚接触 CAN FD、需要从零把发送跑通的嵌入式新手手里有经典 CAN 代码、想迁移到 FD 的熟手以及做台架测试、需要写一个稳定发送端来喂数据的测试工程师。发送端看起来比接收端简单但实际踩坑一点不少——波特率配置、采样点、帧格式、邮箱分配、发送确认任何一处不对示波器上就是一片安静。下面按“先立住原理、再动手复现、最后讲坑”的顺序把这条链路走一遍。2. FDCAN 发送链路的原理与最小工程搭建2.1 从经典 CAN 到 CAN FD发送端多了哪些必须处理的参数经典 CAN 一帧最多 8 字节数据波特率全场统一。CAN FD 把这两点都改了数据段可以到 64 字节并且允许仲裁段和数据段用两个不同的波特率也就是常说的“双波特率”。发送端因此多出一组必须显式配置的参数仲裁段波特率、数据段波特率、采样点、以及数据段长度。很多人第一次配 FD 发送失败不是代码写错而是数据段波特率没使能或者采样点落在总线容差之外。仲裁段和数据段的分界点在 BRS 位。BRS 为隐性时切到高速数据段为显性时保持仲裁段速率。发送端要保证 BRS 位和实际配置一致否则接收端采样位置全乱。另一个容易忽略的是 DLC 编码FD 的 DLC 不再是线性对应字节数9 到 15 对应 12、16、20、24、32、48、64 字节。你写 DLC9 以为发 9 字节实际发的是 12 字节接收端长度校验直接失败。2.2 发送邮箱、优先级与触发方式的选择FDCAN 外设内部一般有多个发送邮箱也叫 Tx Buffer 或 Tx FIFO。发送端设计的第一步是决定用邮箱还是 FIFO。邮箱模式适合少量、需要区分优先级的报文每个邮箱独立配置 ID 和 DLCFIFO 模式适合批量、顺序发送按写入顺序出队。多数 MCU 的 FDCAN 支持“专用 Tx Buffer Tx FIFO/Queue”混合专用 Buffer 用于高优先级或周期帧FIFO 用于普通数据。优先级由 ID 决定ID 越小仲裁优先级越高。发送端如果同时塞多帧硬件按 ID 仲裁不是按你调用发送函数的顺序。这一点在台架测试里经常翻车你以为先发的帧先上总线实际低 ID 帧插队了。触发方式上周期帧用定时器触发发送事件帧在状态机里调用发送两者不要混在同一个邮箱里否则周期抖动会变大。2.3 用 HAL 库搭一个可复现的 FDCAN 发送最小工程下面以常见的 STM32 HAL 风格为例给出一段可抄的发送初始化与发送函数。不同厂商 API 名字不同但参数含义一致照着改即可。/* fdcan_send.c - FDCAN 发送端最小实现 */ #include fdcan.h FDCAN_HandleTypeDef hfdcan1; FDCAN_TxHeaderTypeDef TxHeader; uint8_t TxData[64]; /* 初始化仲裁段 500k数据段 2M采样点 80% */ void FDCAN1_Init(void) { hfdcan1.Instance FDCAN1; hfdcan1.Init.FrameFormat FDCAN_FRAME_FD_BRS; /* 使能 FD 与 BRS */ hfdcan1.Init.Mode FDCAN_MODE_NORMAL; hfdcan1.Init.AutoRetransmission ENABLE; /* 失败自动重传 */ hfdcan1.Init.TransmitPause DISABLE; hfdcan1.Init.ProtocolException DISABLE; /* 仲裁段 500k标称分频与段配置 */ hfdcan1.Init.NominalPrescaler 4; hfdcan1.Init.NominalSyncJumpWidth 4; hfdcan1.Init.NominalTimeSeg1 31; hfdcan1.Init.NominalTimeSeg2 8; /* 数据段 2M数据段分频与段配置 */ hfdcan1.Init.DataPrescaler 1; hfdcan1.Init.DataSyncJumpWidth 4; hfdcan1.Init.DataTimeSeg1 15; hfdcan1.Init.DataTimeSeg2 4; hfdcan1.Init.StdFiltersNbr 0; hfdcan1.Init.ExtFiltersNbr 0; hfdcan1.Init.TxFifoQueueMode FDCAN_TX_FIFO_OPERATION; if (HAL_FDCAN_Init(hfdcan1) ! HAL_OK) { Error_Handler(); } HAL_FDCAN_Start(hfdcan1); } /* 发送一帧id 为标准帧len 为实际字节数 */ uint8_t FDCAN1_Send(uint32_t id, uint8_t *buf, uint8_t len) { TxHeader.Identifier id; TxHeader.IdType FDCAN_STANDARD_ID; TxHeader.TxFrameType FDCAN_DATA_FRAME; TxHeader.DataLength len; /* HAL 内部会转成 DLC 编码 */ TxHeader.ErrorStateIndicator FDCAN_ESI_ACTIVE; TxHeader.BitRateSwitch FDCAN_BRS_ON; /* 数据段切高速 */ TxHeader.FDFormat FDCAN_FD_CAN; TxHeader.TxEventFifoControl FDCAN_NO_TX_EVENTS; TxHeader.MessageMarker 0; if (HAL_FDCAN_AddMessageToTxFifoQ(hfdcan1, TxHeader, buf) ! HAL_OK) { return 1; /* 入队失败通常是 FIFO 满 */ } return 0; }逻辑说明初始化里把FrameFormat设为FDCAN_FRAME_FD_BRS这是发送端能发 FD 帧且数据段变速的前提AutoRetransmission打开后仲裁丢失或错误帧会自动重发台架测试建议打开实时控制场景要评估重传带来的延迟。发送函数里DataLength直接填字节数HAL 负责映射到 DLC但你要清楚 9 到 15 的映射关系接收端长度校验才一致。参数说明NominalPrescaler和DataPrescaler分别决定仲裁段和数据段的时间量子。采样点由TimeSeg1和TimeSeg2决定公式是(1 TimeSeg1) / (1 TimeSeg1 TimeSeg2)。上面仲裁段采样点约 80%数据段约 80%这是 500k/2M 组合下比较稳的取值。实际项目里采样点要按总线长度和收发器延迟微调不能照搬。2.4 发送确认与总线错误状态怎么读发送函数返回成功只代表帧进了 FIFO不代表上了总线。要确认真正发出得看发送事件 FIFO 或中断标志。常见做法是开启TxFifoEmpty中断或轮询HAL_FDCAN_GetTxFifoFreeLevel再配合HAL_FDCAN_GetErrorCounters读发送错误计数 TEC。TEC 持续增长说明总线上没有其他节点应答或者波特率不匹配。发送端单独上电、总线上没有第二个节点时TEC 会累加到错误被动甚至总线关闭这是正常现象不是代码 bug。3. 把 FDCAN_Send 工程跑起来从解压到第一帧上总线3.1 解压后先看什么工程结构与依赖判断拿到FDCAN_Send.rar这类压缩包先别急着编译。解压后按顺序确认四件事有没有厂商 HAL/LL 库、有没有启动文件和链接脚本、有没有时钟配置、有没有收发器使能引脚的定义。很多发送失败案例的根因是收发器没使能——MCU 的 FDCAN 引脚出来了但外部 CAN 收发器的 STB 或 EN 引脚悬空总线一直是隐性示波器上看不到任何差分信号。工程结构上发送端通常包含fdcan.c、main.c、stm32f4xx_hal_msp.c这类文件。重点看 MSP 初始化里 GPIO 的复用功能有没有配对FDCAN1 一般映射到 PA11/PA12 或 PB8/PB9不同封装不一样。时钟树里要确认 FDCAN 的时钟源频率因为分频参数是按这个频率算的时钟源换了波特率全错。3.2 时钟与波特率参数的计算步骤波特率计算是发送端最容易出错的地方。步骤如下先确认 FDCAN 内核时钟fdcan_clk再定时间量子tq Prescaler / fdcan_clk然后bit_time tq * (1 TimeSeg1 TimeSeg2)波特率就是1 / bit_time。以 500k 为例若fdcan_clk 40MHz取Prescaler 4则tq 100ns需要 20 个 tq 组成一位即1 TimeSeg1 TimeSeg2 20取TimeSeg1 15、TimeSeg2 4采样点 80%。数据段同理只是用DataPrescaler和DataTimeSeg1/2。注意数据段波特率不能超过收发器和总线能承受的上限2M 在短总线上没问题长总线要降。计算完最好用厂商的配置工具交叉验证一遍手算容易在分频取整上差一个 tq导致采样点偏移。3.3 用回环模式先验证发送逻辑在接真实总线之前强烈建议先开回环模式自测。回环模式下发送端自己收自己不需要第二个节点能快速验证 ID、DLC、数据内容是否正确。/* 回环模式初始化片段只改 Mode */ hfdcan1.Init.Mode FDCAN_MODE_INTERNAL_LOOPBACK; /* 其余参数与正常模式一致 */逻辑说明内部回环把 Tx 直接接到 Rx发送的帧会进接收 FIFO。你可以在接收中断里打印 ID 和 DataLength确认发送端组帧没问题。这一步能排掉大部分“代码逻辑错”剩下的才是“总线物理层错”。参数上回环模式对波特率不敏感但建议仍按目标波特率配置保持和正式模式一致。3.4 接上总线后的第一帧验证方法回环通过后接真实总线。验证顺序先只上电发送端和接收端不接其他节点用示波器或 CAN 分析仪看差分信号确认接收端能收到且 ID、长度、数据一致再逐步加入其他节点观察仲裁和错误计数。如果接收端收不到先查终端电阻CAN 总线两端各 120 欧缺一个反射就严重高速数据段尤其明显。发送端这边用HAL_FDCAN_GetErrorCounters读 TEC 和 REC。TEC 为 0 且接收端有数据说明链路通。TEC 增长到 128 以上进入错误被动到 255 总线关闭这时要查波特率、接线、终端电阻。台架测试里我一般会先发一帧固定 ID、固定 8 字节的帧确认通了再上 64 字节和 BRS。4. FDCAN 发送端避坑五条血泪经验4.1 现象发送函数返回成功但总线上没有波形原因最常见是收发器没使能或 GPIO 复用没配对。MCU 内部 FDCAN 已经发出但引脚没切到 FDCAN 功能或者收发器 STB 引脚电平不对差分驱动器没工作。解决查 MSP 里 GPIO 的Alternate设置查收发器使能引脚原理图用万用表量 STB 电平。其次是时钟没使能FDCAN 外设时钟在 RCC 里要单独开。4.2 现象接收端收到的数据长度不对原因DLC 编码理解错。FD 的 DLC 9 到 15 不是 9 到 15 字节而是 12、16、20、24、32、48、64。你填 9 期望 9 字节实际发 12 字节。解决发送端按实际字节数填DataLength接收端按 DLC 映射表还原长度两边用同一张表。超过 8 字节的帧一定要确认接收端也支持 FD经典 CAN 控制器收到 FD 帧会报格式错误。4.3 现象数据段高速时误码率高、错误帧多原因采样点不合适或终端电阻缺失。数据段波特率越高对采样点和总线反射越敏感。2M 数据段在长总线或没终端电阻时采样点稍微偏一点就误码。解决把数据段采样点调到 75% 到 80%缩短总线或补终端电阻必要时降数据段波特率。用示波器看数据段眼图眼宽不够就是物理层问题不是代码问题。4.4 现象多帧发送顺序和预期不一致原因硬件按 ID 仲裁不按调用顺序。你连续调用发送低 ID 帧先上总线。解决需要严格顺序时用同一个邮箱且等上一帧发送完成再发下一帧或者把 ID 设计成递增。周期帧和事件帧分邮箱避免事件帧被周期帧插队。这个坑在协议栈开发里很常见表现是状态机时序偶发错乱。4.5 现象总线关闭后发送端不再恢复原因TEC 累加到 255 进入 bus-off没有自动恢复或恢复条件没满足。解决确认AutoRetransmission和自动恢复配置bus-off 后按协议需要检测 128 次 11 位隐性位才能恢复。有些 HAL 需要手动调用HAL_FDCAN_Start重新启动。台架测试时如果只上电一个节点必然 bus-off这是预期行为接上第二个节点再测。5. 让发送端更可靠周期调度与发送完成回调的配合技巧发送端跑通之后真正决定它能不能上项目的是时序稳定性和异常恢复。我一般会把发送分成两层上层是业务调度用定时器或 RTOS 任务按周期组织要发的帧下层是 FDCAN 发送完成回调用来做流控和统计。两层之间用一个发送请求队列衔接队列满时丢弃低优先级帧而不是阻塞避免拖垮整个任务。具体技巧上周期帧用专用 Tx Buffer每个 Buffer 绑定一个 ID定时器到点直接触发对应 Buffer 发送这样周期抖动只取决于定时器精度不受 FIFO 排队影响。事件帧走 Tx FIFO入队前检查HAL_FDCAN_GetTxFifoFreeLevel剩余空间不足就记录一次丢弃计数事后能定位是总线慢还是发送太猛。发送完成回调里更新每帧的发送时间戳和成功计数跑一段时间后看统计哪帧丢得多一目了然。验证方法上我会做一个简单的压力测试以总线带宽的 70% 持续发送 64 字节 FD 帧跑一小时同时用分析仪统计错误帧率和 bus-off 次数。错误帧率为 0 且 TEC 稳定在低位才算这个发送端可用。如果错误帧随负载上升先降数据段波特率或优化采样点再查终端电阻和线束。这个测试比单帧收发更能暴露问题。还有一个容易被忽略的点是发送完成中断的优先级。如果 FDCAN 中断优先级低于其他高频中断发送完成回调会被延迟流控判断就不准。我一般把 FDCAN 中断设成中等优先级高于普通任务但低于系统滴答保证回调及时又不抢占关键时序。回调里只做计数和置标志具体业务放到任务里处理避免在中断里做耗时操作。最后说个习惯每次改完波特率或采样点我都会先用回环模式跑一遍再上真实总线最后跑压力测试。这三步看着麻烦但比在总线上抓瞎省时间。FDCAN 发送端的玄学大多出在物理层和参数配置代码逻辑本身反而简单。把参数算准、把物理层查清、把异常恢复做全这个FDCAN_Send类的工程就能从“能发”变成“敢用”。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

LWIP TCP状态机详解与嵌入式网络优化实践

LWIP TCP状态机详解与嵌入式网络优化实践

1. LWIP TCP连接状态机概述TCP协议作为传输层核心协议,其状态机设计直接决定了连接的可靠性和健壮性。LWIP作为嵌入式领域广泛使用的轻量级TCP/IP协议栈,其TCP状态机实现既遵循RFC标准又针对资源受限环境做了特殊优化。在实际嵌入式网络开发中&#xff0…

2026/10/15 12:16:50 阅读更多 →
XXL-JOB容器化部署实战:K8S集群落地与避坑指南

XXL-JOB容器化部署实战:K8S集群落地与避坑指南

简介:面向需要在Kubernetes集群中快速部署XXL-JOB定时任务调度平台的运维与开发人员,这份经过验证的YAML部署文件可省去自行编写配置的繁琐过程,直接应用到集群即可完成基础环境搭建。资源包内共1个文件,为YAML格式清单&#xff0…

2026/10/15 12:16:50 阅读更多 →
ABAP报表时间戳与时区转换实战:根治全球用户时间错乱问题

ABAP报表时间戳与时区转换实战:根治全球用户时间错乱问题

1. 项目背景与现实痛点做ABAP开发的朋友,十有八九都遇到过这样的需求:“报表里的时间不对,国外用户看到的时间和本地时间差了8个小时”。这问题看起来简单,真上手排查,往往会牵扯出一连串关于时间戳、时区、夏令时、服…

2026/10/15 12:15:49 阅读更多 →

最新新闻

Hyper-Frames:无标签视频+里程计自监督预训练,实现低成本运动预测

Hyper-Frames:无标签视频+里程计自监督预训练,实现低成本运动预测

做自动驾驶、移动机器人、无人机导航的同行,应该都有一段被数据集标注反复折磨的经历。最近 Waymo Research 放出的 Hyper-Frames 框架,让我终于看到一条不太一样的路:不用一开始就堆人天去标框、标轨迹、标地图,用无标签视频加里…

2026/10/15 12:59:25 阅读更多 →
Wand图像批处理实战:ImageMagick的Python绑定与PIL替代方案

Wand图像批处理实战:ImageMagick的Python绑定与PIL替代方案

1. 为什么我要认真聊聊Wand这个模块 第一次接触Wand是在处理一批商品图的时候。运营那边丢过来三百多张图片,要求统一裁成正方形、加白色边框、压缩到指定体积以下,还要把每张图的平均色提取出来做配色统计。我当时第一反应是用PIL,但写着写着…

2026/10/15 12:59:25 阅读更多 →
轴承行业竞价内卷加剧,杭州巨宇科技GEO优化让品牌被AI看见

轴承行业竞价内卷加剧,杭州巨宇科技GEO优化让品牌被AI看见

当空压机设备厂商向豆包提问"空压机轴承生产厂家哪家靠谱",向DeepSeek询问"精密轴承供应商推荐、高速轴承哪个品牌好",向Kimi搜索"轴承型号怎么对应、P4级精度是什么水平"时,AI给出的专业回答里,你…

2026/10/15 12:59:25 阅读更多 →
CHAN、Taylor、AOA定位算法实战:从公式到融合避坑指南

CHAN、Taylor、AOA定位算法实战:从公式到融合避坑指南

简介:这份资源围绕无线通信与导航系统中的经典定位算法展开,面向从事物联网、雷达、卫星导航及无线网络定位开发的学习者与研究人员,重点讲解CHAN、Taylor与AOA三种基本方法的原理与实现思路。压缩包共37个文件,以m脚本与mat文件为…

2026/10/15 12:59:25 阅读更多 →
Logstash数据入库MySQL/PostgreSQL:logstash-output-jdbc在线与离线安装全攻略

Logstash数据入库MySQL/PostgreSQL:logstash-output-jdbc在线与离线安装全攻略

Logstash的数据要写进MySQL或者PostgreSQL,很多人在第一步就卡住了:官方自带的输出插件只有elasticsearch、file、stdout这些,偏偏没有关系型数据库。社区里用得最多的补位方案就是logstash-output-jdbc。这个插件本身不难装,但“…

2026/10/15 12:59:25 阅读更多 →
C++结构体详解:定义、使用与最佳实践

C++结构体详解:定义、使用与最佳实践

1. 结构体基础概念解析在C编程中,结构体(struct)是一种将不同类型的数据组合成一个整体的复合数据类型。它允许我们将多个相关的变量打包成一个逻辑单元,这在处理复杂数据时特别有用。比如要记录一个班级的学生信息,每个学生有学号、姓名、成…

2026/10/15 12:58:24 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

2026/10/14 16:30:29 阅读更多 →
影刀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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →