news 2026/9/27 5:48:20

STM32量产烧录脚本实战:用ST-LINK Utility命令行实现自动批量烧录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32量产烧录脚本实战:用ST-LINK Utility命令行实现自动批量烧录

第一次被安排做产品量产的时候,我还在用Keil傻乎乎地点Download按钮。一块板子点一次,一天点几百次,点到最后手指头都条件反射了,还担心漏烧、烧错固件版本。后来我发现ST-LINK Utility自带命令行工具ST-LINK_CLI.exe,配合Windows批处理脚本,可以把整个STM32烧录流程变成"放板子、按回车、换板子"的标准动作。这篇文章就聊聊我踩过的坑和最终沉淀下来的量产烧录脚本——整个过程拆开来看其实不复杂,5分钟能跑通一个最小可用版本,后面直接套用到产线也不心虚。

我默认你是做STM32开发的,手里有ST-LINK或者兼容调试器,熟悉基本的SWD接线。如果你想解决"几十块板子怎么快速烧录""怎么保证每片芯片都校验通过""怎么让产线工人也敢操作烧录"这类问题,这篇内容应该能帮到你。

1. 量产烧录这件事,为什么值得做一套批处理

很多工程师在样品阶段根本不会考虑批量烧录的问题,毕竟手头三五块板子,Keil点几下就完事。但到了小批量生产,哪怕只有二三十块板,痛点立刻就出来了。

1.1 手工烧录的三个痛点

第一个痛点是重复劳动带来的疲劳和误操作。你连续烧录十几块板子之后,很难保证每一次都盯着烧录进度条走完,有时候点击下载之前忘了切换工程,烧进去的还是上一个版本的固件,这种错误最坑——板子外观完全正常,功能却不符预期,排查半天才发现烧错固件。

第二个痛点是过程不可追踪。手工烧录没有日志,今天烧了多少块、烧的是哪个版本、哪几块校验失败,全靠脑子记或者纸上画正字。一旦换人操作、隔天继续,信息就断了,出了质量追溯问题根本没法查。

第三个痛点是校验环节容易被跳过。Keil下载完成默认显示"Flash Load finished",但很多人没注意到它并不总是执行完整CRC校验。量产环境下,连接接触不良、芯片异常、供电波动都可能让数据没写对,如果不主动校验,问题板子就流到下一道工序了。

1.2 为什么选ST-LINK Utility而不是Keil或J-Flash

能烧录STM32的工具不少,但量产场景下我的选择顺序是:能用命令行、免费、稳定、好部署。

Keil的ULINK或ST-LINK调试器当然能烧,但它的图形界面完全是给开发调试准备的,每个工程文件、每块芯片都要手动交互,无法做到"一键循环烧录"。而且Keil授权贵,产线电脑不能都装一堆开发工具。

J-Flash是Segger家的好东西,J-Link的烧录速度也确实快,但它需要J-Link硬件,配套授权费用不低,对于纯STM32场景性价比不佳。如果你公司只有ST-LINK设备,没必要为了量产多买一套J-Link。

OpenOCD是开源方案,命令行能力很强,但Windows下的驱动配置、脚本编写对产线维护人员不友好,适合懂Linux的技术人员折腾。

ST-LINK Utility是ST官方免费工具,界面里就内置了命令行CLI,支持SWD连接、Flash写入、校验、运行程序,参数简洁,一条命令就能完成整个烧录动作。对国内大多数用STM32做产品的团队来说,这是上手成本最低、落地最快的量产烧录方案。

2. 环境准备:先把命令行烧录跑通

刚接触这个方案的人最容易卡在第一步——不知道怎么从图形界面工具跳到命令行。其实ST-LINK Utility安装完之后,命令行工具就在安装目录里躺着,叫ST-LINK_CLI.exe。

2.1 安装与版本选择

去ST官网搜"STM32 ST-LINK Utility",下载安装包。安装时注意,新版工具会同时安装ST-LINK USB驱动,如果你的Windows之前装过其他版本的ST-LINK驱动,建议先卸载旧驱动再装新版,避免设备管理器里出现黄色感叹号。另外ST-LINK Utility不支持64位的命令行路径问题不大,但安装路径默认在Program Files (x86)下面,写脚本时要注意这个路径。

我习惯把版本固定在2.x的稳定版本,不追最新。量产工具追求的是稳定,ST-LINK Utility这种老牌工具更新频率不高,版本太新反而可能带来驱动兼容问题。装完后,打开安装目录检查一下这几个文件是否存在:

  • ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe
  • ST-LINK Utility\ST-LINK Utility\ST-LINK Utility.exe

如果能看到这两个文件,环境就没问题了。

2.2 手工执行一次完整的命令行烧录

先用USB连接ST-LINK和电脑,再连接目标板,然后打开cmd窗口,切换到ST-LINK Utility安装目录,执行一次最简单的烧录命令:

ST-LINK_CLI.exe -c SWD UR FREQ=4000 -p "D:\firmware\app_v1.2.0.hex" -V -Run -NoPrompt

逐段解释一下这条命令的含义,量产改脚本的时候你会反复跟这些参数打交道。

-c SWD UR FREQ=4000是连接参数。SWD表示使用SWD协议,这是STM32默认的调试/烧录接口,占用SWDIO和SWCLK两根线,比JTAG省引脚。UR是Under Reset,意思是连接时把目标芯片拉进复位状态再通信,对于已经跑着程序、可能禁用了调试口的芯片特别重要——如果程序里意外关掉了SWD引脚复用,不拉复位根本连不上。FREQ=4000表示SWD时钟频率4MHz,我习惯量产时用这个频率,稳定性和速度比较均衡。如果目标板走线很长、环境干扰大,可以降到2000甚至1000。

-p "固件文件路径"就是写入Flash。注意如果你的工程里既有Bootloader又有App,可以生成一个包含多个地址段的联合hex文件,路径用引号包起来,防止文件夹名带空格导致解析出错。

-V是Verify,烧录完成后自动回读Flash内容并和源文件比对。量产场景强烈建议开启,接触不良或者芯片异常时,这一步能兜住大部分质量风险。

-Run是烧录完自动运行程序,它会复位并运行用户代码,对产线来说少一个手工复位动作,效率更高。

-NoPrompt是关闭命令行交互确认弹窗,没有这个参数时烧录完可能卡在某个确认提示上,批处理循环就会中断。

执行完如果终端输出类似Programming completed successfully或者包含Verification... OK字样,说明整个链路已经跑通。

2.3 hex、bin、srec:烧录文件到底该准备哪种

ST-LINK CLI支持多种固件格式,我最常用的是hex和bin。新手最容易栽的坑是:烧hex不需要指定地址,烧bin必须指定地址。

hex文件内部每一行都带有地址信息,命令行直接写-p xxx.hex就行,它会自动把数据放到正确位置。而bin是原始二进制数据,没有地址信息,你得告诉工具从哪里开始放,比如-p xxx.bin 0x08000000。这个地址取决于芯片Flash起始地址,STM32大多数型号是0x08000000,但也有少部分型号或者你挂在外部Flash上时要改。

如果你的固件包含Bootloader和App两部分,推荐在Keil或IAR里直接把两个区域的代码合并生成一个hex文件,烧录时一条命令全解决。如果你需要在产线上顺便擦除整个芯片,可以在命令行加擦除选项,但日常量产我倾向于只擦固件占用的扇区,减少Flash擦写次数。

srec(.s19/.s28)也是带地址格式,和hex类似,偶尔遇到从其他平台转过来的固件会用到。至于ST-LINK Utility的.stldr加载器文件,那是给外部SPI NOR Flash用的,普通MCU量产用不上。

3. 批处理脚本的完整设计与实现

命令行手动执行通了,接下来就是把这套动作封装成bat脚本,让它变成一个"傻瓜式"的工具。

写脚本之前想清楚你需要它做什么:自动申请管理员权限、检测ST-LINK和固件是否就位、执行烧录、判断成败、写日志、支持连续循环操作、失败时重试或退出。

3.1 基础版脚本:固定固件一键烧录

先给一个最小可用版本,适合单板调试或者产量很小的场景:

@echo off rem 检查管理员权限,不是管理员就自动提权 net session >nul 2>&1 if %errorlevel% neq 0 ( echo 正在申请管理员权限... powershell -Command "Start-Process '%~f0' -Verb RunAs" exit /b ) set "CLI=C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" set "FIRMWARE=D:\firmware\app_v1.2.0.hex" if not exist "%CLI%" ( echo [ERROR] 找不到 ST-LINK_CLI.exe,请检查安装路径。 pause exit /b 1 ) if not exist "%FIRMWARE%" ( echo [ERROR] 找不到固件文件 %FIRMWARE% pause exit /b 1 ) echo 开始烧录... "%CLI%" -c SWD UR FREQ=4000 -p "%FIRMWARE%" -V -Run -NoPrompt if %errorlevel% equ 0 ( echo [OK] 烧录成功 ) else ( echo [FAIL] 烧录失败,错误码:%errorlevel% ) pause

这段脚本的核心逻辑就三步:提权、检查、执行。

提权那段用了net session命令判断当前是否有管理员权限,如果没有就用powershell带RunAs重新启动脚本。为什么要管理员权限?因为ST-LINK的USB驱动访问在某些Windows版本下需要更高权限,而且产线电脑经常有域策略限制,提前提权能省掉后面莫名其妙的权限报错。

检查路径和固件这一步千万别省。产线操作员不会去改脚本,一旦固件路径变了或者文件被误删,没有这个判断,命令行会刷一堆看不懂的英文然后闪退,体验极差。

执行那行就是前面手动验证过的命令。%errorlevel%是Windows批处理里获取上一条命令返回码的内置变量,ST-LINK_CLI正常返回0,失败返回非0。这里注意要在命令执行完立刻获取,中间不要插入其他命令,否则值就被覆盖了。

3.2 进阶版脚本:循环烧录、日志记录、失败重试

量产场景下,单个烧录按钮还不够,工人需要不断换板子、重复烧录。所以脚本要带一个循环,烧完一块自动回到等待状态,并且把每次烧录结果记录下来:

@echo off rem ============================================ rem STM32 量产烧录脚本 V1.0 rem 适用:单ST-LINK、人工换板、按键触发烧录 rem ============================================ net session >nul 2>&1 if %errorlevel% neq 0 ( powershell -Command "Start-Process '%~f0' -Verb RunAs" exit /b ) set "CLI=C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" set "FIRMWARE=D:\firmware\app_v1.2.0.hex" set "LOG=D:\firmware\burn_log.txt" if not exist "%CLI%" ( echo [ERROR] 找不到 ST-LINK_CLI.exe pause exit /b 1 ) if not exist "%FIRMWARE%" ( echo [ERROR] 找不到固件文件 %FIRMWARE% pause exit /b 1 ) echo ============================================ echo STM32 量产烧录脚本 echo 固件:%FIRMWARE% echo 启动时间:%date% %time% echo ============================================ :loop cls echo. echo 请将待烧录板卡连接到ST-LINK,然后按任意键开始烧录... echo 输入Q后回车可退出脚本 echo. set "key=" set /p key=按任意键烧录,Q退出: if /i "%key%"=="Q" goto :end echo [%date% %time%] 开始烧录... >> "%LOG%" "%CLI%" -c SWD UR FREQ=4000 -p "%FIRMWARE%" -V -Run -NoPrompt set "BURN_RC=%errorlevel%" if %BURN_RC% equ 0 ( echo. echo [OK] 烧录成功,请更换下一块板卡。 echo [%date% %time%] 结果:SUCCESS >> "%LOG%" ) else ( echo. echo [FAIL] 烧录失败,错误码:%BURN_RC% echo [%date% %time%] 结果:FAIL errorlevel=%BURN_RC% >> "%LOG%" echo 请检查连接后按任意键重试,或输入Q退出。 set "retry=" set /p retry=按任意键重试,Q退出: if /i "%retry%"=="Q" goto :end ) goto :loop :end echo. echo 批处理结束,日志已写入 %LOG% pause

说几个我在实际使用中觉得最重要的细节。

日志记录一定要带时间戳。%date% %time%能输出当前日期时间,但format和系统区域设置有关,中文Windows一般是2025/06/18 周三 14:30:25.55这种格式,够用了。如果你想用日期做日志文件名,比如burn_log_20250618.txt,可以这样取:set "LOG=D:\firmware\burn_log_%date:~0,4%%date:~5,2%%date:~8,2%.txt",但注意这个写法依赖日期格式,换到英文系统要改偏移量。

失败重试的逻辑很关键。量产现场经常碰到ST-LINK夹子没夹好、杜邦线松了、目标板供电没开这类问题,如果没有重试机制,工人就只能关掉窗口重新双击脚本,麻烦且容易误操作。我这里的做法是失败后留在原地,等操作员重新调整连接后按任意键再烧一次。

注意循环里用了cls清屏,让操作员每次看到的是干净的界面。如果不想清屏,想保留历史烧录记录,可以把cls删掉,但是窗口会越来越长,看实际情况取舍。

3.3 脚本里的坑:路径、返回值、弹窗确认

写批处理看起来简单,但有几个坑是只有跑到产线现场才体会得到的。

第一个坑是ST-LINK_CLI.exe的输出信息默认是英文,失败时打印的内容比较长,操作员看不懂。没关系,我们只要靠%errorlevel%判断成功失败就够了,不需要人工读英文。但有一种情况比较隐蔽:-NoPrompt在某些老版本工具里不支持,命令会卡在确认弹窗上。遇到这种情况,轻则脚本停在那里,重则烧录一半卡死。解决办法是升级ST-LINK Utility版本,或者用-NoPrompt参数前先用ST-LINK_CLI.exe -h看一眼帮助,确认当前版本支持哪些参数。

第二个坑是路径带空格。放在Program Files下的CLI路径一定带空格,所以引用时务必加双引号。固件路径如果放在带空格的目录下,同样要加引号。我见过有人把固件放在D盘根目录,结果换电脑后路径变了脚本直接报错,所以脚本里专门加了文件存在性检查。

第三个坑是权限问题。有些产线电脑装了安全软件,直接用net session判断管理员权限可能弹出UAC框,操作员如果点掉,脚本后续访问驱动就会失败。我现在的做法是脚本开头先申请管理员权限,UAC弹窗让操作员点"是",然后才开始干活,流程上可控很多。

第四个坑是防火墙或者杀毒软件拦截。命令行工具去访问USB设备,有些安全软件会弹出拦截提示,多的时候一天弹几次,特别影响效率。量产机建议把ST-LINK Utility目录加入杀毒软件白名单,这属于很容易被忽略但影响很大的细节。

3.4 高级玩法:一拖多、指定ST-LINK序列号

如果你一条产线有多台工位,每台电脑一个ST-LINK,那脚本完全不用改,反正每台只连一个设备。但如果出现一台电脑同时接两个ST-LINK的情况,比如调试工位临时兼职烧录,就得指定序列号了。ST-LINK Utility界面里可以看到每个ST-LINK的序列号,命令行可以用-h 序列号指定用哪一台:

"%CLI%" -c SWD UR -h 0x00420021 -p "%FIRMWARE%" -V -Run -NoPrompt

这个场景适合在研发调试座位上临时顶岗,不干扰正常调试任务。真正的量产工位,我建议还是一台电脑一个ST-LINK,问题排查最简单。

还有一种玩法是把脚本参数化,用%1接收外部传入的固件路径,这样同一条批处理可以烧不同固件。比如:

if "%1"=="" ( echo 用法:burn.bat [固件文件路径] exit /b 1 ) set "FIRMWARE=%~1"

这样你用burn.bat D:\firmware\app_v2.0.0.hex就能烧指定固件,版本切换不用天天改脚本。我自己在公司内部就是这么维护的,不同产品线各发一个bat快捷方式,参数不同而已。

4. 量产烧录常见问题与排查实录

脚本写得再好,最终还是要面对真实硬件。这几年我积累了不少烧录失败排查经验,很多问题在产线上一出现就能定位。下面的流水账是给各位一个排查思路,照顺序走一遍,大部分问题都能解决。

4.1 连接层面的故障:No ST-LINK detected

这个报错是最常见的,意思是电脑根本没识别到ST-LINK。先打开设备管理器,找"通用串行总线设备"或者"通用串行总线控制器",看有没有带感叹号的设备。有感叹号,多半是驱动问题,重装ST-LINK驱动。

设备管理器里一切正常但还是报No ST-LINK detected,那就换一根USB线试试。别看这是土办法,ST-LINK的USB线在量产工位上经常被拉来拉去,内部断芯的表象就是时好时坏。注意ST-LINK用的是标准Micro USB或Type-C线,但有些线只能充电不能传数据,这种线插上去百分百识别不了。

如果以上都查过没问题,把ST-LINK拔下来插到另一台电脑试试。ST-LINK本身有升级固件的功能,如果固件版本极老,新版Utility可能不识别。老款ST-LINK/V2可以通过ST官方工具升级固件,ST-LINK/V3一般没这个问题。

4.2 烧录中断、连接超时:目标板连接不稳

能识别到ST-LINK,但一执行-c SWD就报Connection error,这种情况90%是SWD四根线的问题。SWDIO、SWCLK、GND三根是必须的,有些板子不接NRST也能烧,但接上NRST会更稳,尤其当芯片跑着低功耗模式或者调试引脚被复用的时候。

常见的连接问题有:杜邦线太长导致信号质量差、SWCLK频率太高、目标板和ST-LINK供电不共地。产线建议直接用带探针的烧录夹具,比手工捏杜邦线稳定太多。如果非得用杜邦线,长度压到10cm以内,SWD频率从4000降到2000或1000试试。

目标板供电也要检查。如果目标板是电池供电或者外部电源供电,一定要确保ST-LINK和目标板共地。如果目标是脱机供电,也可以在烧录时用ST-LINK的3.3V输出给板子供电,但注意ST-LINK的输出电流有限,不能带大功耗负载,否则电压一掉烧录就失败。

4.3 校验失败:verify error和读保护问题

烧录命令返回错误但看着像烧了一半的情况,多半是verify error。这个错误跟前面"连接不稳"可能有关系,但更常见的坑是芯片本身处于读保护状态。很多从市场上回收的芯片或旧开发板,内部flash被设置过RDP(读保护),这时候ST-LINK能连上但读不出内容,校验必然失败。

解决办法是用ST-LINK Utility图形界面或命令行关闭读保护。但注意,解除读保护会擦除整个Flash,所以别指望先备份再解除。量产烧录前如果发现目标芯片有读保护,直接解除后重新烧录即可。这个操作可以通过ST-LINK Utility的Option Bytes界面里找到RDP选项,把它从Level 1改成Level 0,工具会提示将擦除芯片,确认即可。

还有一种是写保护。STM32的Option Bytes里可以对某些扇区设置写保护,如果固件想写的区域被保护了,烧录会报错。这种情况下同样要进Option Bytes把写保护关掉。这里提醒一句:如果你量产固件本身带保护功能,比如把RDP设成了Level 1,那么第二次想烧录就必须先解除,这个流程要写进作业指导书,不然工人们会卡在"为什么我这块板子烧不进"。

4.4 烧录成功但程序不工作:boot引脚和复位电路

有时候烧录一切正常,校验也过了,但板子不跑程序。不要慌,先看Boot引脚。STM32的BOOT0引脚决定了启动来源,如果BOOT0被拉高,芯片会进入系统存储器Bootloader而不是用户Flash,程序当然不跑。量产板子BOOT0一般通过10K电阻下拉到地,如果悬浮或者设计失误,就会出现这种吊诡问题。

复位电路也值得检查。有些板子复位电容设计得特别大,比如10uF,烧录完成后的复位信号有可能无法可靠复位芯片,导致程序没跑起来。用示波器抓一下NRST引脚的波形,或者手动按一下复位键看看程序跑不跑,基本就能定位。

还有一种情况是芯片的Option Bytes配置异常,比如看门狗没关但程序里初始化太慢,上电没来得及喂狗就被复位了。这个跟烧录关系不大,但在产线表现为"烧完不亮灯",排查时容易被带上弯路。

5. 一些量产工艺上的补充经验

脚本和硬件都跑通以后,你会发现真正的量产难点其实不在烧录本身,而在流程的严谨性和可维护性。下面这些经验是我后来慢慢补上的,效果非常明显。

5.1 固件文件的版本管理

产线烧录最怕烧错版本。我见过某次产线用了昨天的测试固件烧了两百片板子,最后全部返工。从那以后我强制所有量产固件文件名带版本号和日期,比如app_v1.2.0_20250618.hex,脚本里固定引用这个文件,同时在脚本启动时打印固件名称和SHA256哈希值,方便核对。

批处理里计算SHA256很简单:

for /f %%i in ('certutil -hashfile "%FIRMWARE%" SHA256 ^| findstr /r "[0-9a-f]"') do set "SHA=%%i" echo 当前固件SHA256:%SHA%

把这个值打印出来,和编译产物比对,基本能杜绝固件被误替换的问题。文件服务器或网盘同步出错导致固件损坏的情况,也能提前发现。

5.2 与产线配合:防呆设计与人工确认

产线工人不关心固件版本和技术细节,他们需要的是"哪个灯亮说明什么"。我改造过脚本,在烧录成功时用msg命令弹个提示框,同时让蜂鸣器响一声。你可以用以下几种方式增强反馈:

  • 用color 2F和color 4F改变窗口颜色,绿底代表成功,红底代表失败
  • 用echo命令配合pause让工人必须看一眼结果才能继续
  • 在电脑上加一个外置的USB蜂鸣器,成功和失败的声音不同

这些细节看着不起眼,却能极大减少产线上的误操作。人一旦疲劳,必然依赖视觉和听觉反馈,而不是读屏幕上的英文日志。

我特别建议在烧录成功和失败后都加一个"按任意键继续"的停顿。有些工程师为了让工人操作快,把停顿都去掉,结果失败信息一闪而过,工人根本不知道自己烧失败了。量产追求的不是单板时间极致短,而是整体良率和可追溯性。

5.3 硬件小技巧:烧录夹具与线缆选型

工位上最影响烧录成功率的硬件因素,不是电脑不是ST-LINK,而是那根连接ST-LINK和板子的线。杜邦线用一两天就会接触不良,表现就是时好时坏,浪费大量排查时间。建议直接上带排针母座的SWD烧录线,或者用Pogo Pin探针夹具,一次压接到位。

SWD信号线的长度也直接影响稳定性和烧录速度。如果夹具线长超过20cm,SWD频率别超过2000kHz,不然容易出现烧录一半失败。如果线长超过30cm,老老实实用1000kHz,多烧一秒但稳定得多。

还有一个容易忽略的点:ST-LINK长时间连续工作会发热,特别是在量产高强度烧录下。过热会导致连接不稳定,所以工位上的ST-LINK不要堆在密闭盒子里,给它留点散热空间。如果一天烧几百片,可以准备两个ST-LINK轮换用。

5.4 效率优化:软件层面的额外细节

如果你追求极限效率,除了脚本本身,还可以优化几个软件层面的细节。第一,把固件文件放在本机固态硬盘上,不要放在共享网络路径里,读取快且不会因为网络波动导致文件访问失败。第二,关闭杀毒软件的实时扫描,至少把烧录工具目录加入白名单。第三,系统电源选项设为高性能,阻止USB设备挂起,避免ST-LINK在长时间空闲后USB通信失败。

这些优化单看很小,叠加起来在一天几百片的产量下,节省的时间和避免的故障非常可观。

6. 写在最后的一个小经验

这套批处理烧录方案用了这么久,我最深的体会是:量产工具的设计原则不是"功能最全",而是"最不容易出错"。当初给脚本加管理员权限自动提权、失败自动重试、日志记录这些功能时,我图的是省事,后来才意识到它们真正解决的是人的问题——让一个不熟悉嵌入式的人也能安全操作烧录过程。

如果你也准备在产线上引入ST-LINK Utility批处理方案,我的建议是从最简脚本开始跑通,再加循环、加日志、加反馈,一次加一点,每加一点都在现场试几下。不要一上来就想写一个万能脚本,产线环境千奇百怪,稳定压倒一切。

脚本本身没什么高深技术,真正值钱的是你对自己产品和产线流程的理解。希望这篇文章能帮你少走点弯路,早日摆脱"人肉烧录机"的身份。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 5:45:17

KV Cache 原理与工程实践:大模型推理加速与显存优化

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

作者头像 李华
网站建设 2026/9/27 5:42:14

从0到8192:基于期望搜索与启发式评估的2048游戏AI实战

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

作者头像 李华
网站建设 2026/9/27 5:37:41

引用抽检别只会扫一眼:同一条文献可勾选四项核验骨架

参考文献最常见的假完成是扫一眼:列表格式整齐、作者年份齐全、期刊名看着眼熟,于是整页放行。可答辩或外审真正追问的往往是另外几件事:这条能不能当场找到原文?列表写的年份和原文是否一致?正文那句「已有研究表明」…

作者头像 李华
网站建设 2026/9/27 5:31:27

用I2C获取的数据经常卡死的原因

1.I2C时序容易被程序中的中断给打断,并且程序中多个任务同时运行,对时序要求高,I2C数据就可能卡死时序的概念:通信的时候,什么时间发信号,什么时间发数据,谁先谁后,这一整套先后顺序…

作者头像 李华
网站建设 2026/9/27 5:30:21

Jetson Orin NX稳定接入联适R70M-GNSS串口调优全指南

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

作者头像 李华