{"id":17048799,"url":"https://github.com/armink/hackstlinkupgrade","last_synced_at":"2026-02-23T04:14:12.672Z","repository":{"id":72173556,"uuid":"199677127","full_name":"armink/HackSTLinkUpgrade","owner":"armink","description":"暴力升级你的 ST-Link 及 STM32CubeIDE","archived":false,"fork":false,"pushed_at":"2022-12-04T06:30:34.000Z","size":30844,"stargazers_count":103,"open_issues_count":1,"forks_count":28,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-23T04:12:37.256Z","etag":null,"topics":["cubeide","st-link","stcubeide","stm32"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/armink.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-30T15:18:18.000Z","updated_at":"2025-03-21T17:50:56.000Z","dependencies_parsed_at":"2023-05-31T15:15:41.902Z","dependency_job_id":null,"html_url":"https://github.com/armink/HackSTLinkUpgrade","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/armink/HackSTLinkUpgrade","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armink%2FHackSTLinkUpgrade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armink%2FHackSTLinkUpgrade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armink%2FHackSTLinkUpgrade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armink%2FHackSTLinkUpgrade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/armink","download_url":"https://codeload.github.com/armink/HackSTLinkUpgrade/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armink%2FHackSTLinkUpgrade/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29737233,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T02:24:00.660Z","status":"ssl_error","status_checked_at":"2026-02-23T02:22:56.087Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cubeide","st-link","stcubeide","stm32"],"created_at":"2024-10-14T09:53:04.814Z","updated_at":"2026-02-23T04:14:12.644Z","avatar_url":"https://github.com/armink.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# 暴力升级你的 ST-Link 及 STM32CubeIDE \n\n## 背景\n\n一些 ST-Link 在使用最新的 IDE 时，经常提示需要升级其固件，但是升级始终失败，提示容量不足。\n\n在 Keil MDK 上可能就提示一下升级失败，但仍然可以继续下载调试。可是当使用 ST 最新推出的 CubeIDE 时（这是一款 ST 新推出的基于 Eclipse 集成 CubeMX 的 IDE），情况就非常糟糕，你如果不升级成功，就没法让你继续使用，仿佛陷入了死循环，导致一些开发板完全无法使用 CubeIDE。\n\n## 问题原因\n\n这些开发板包括 RT-Thread 和 正点原子 联合推出的 [潘多拉 IoT 开发板](https://item.taobao.com/item.htm?spm=a230r.1.14.4.381759c10S57Js\u0026id=583527145598\u0026ns=1\u0026abbucket=9#detail) 。[![iot_board](docs/images/iot_board.png)](https://item.taobao.com/item.htm?spm=a230r.1.14.4.381759c10S57Js\u0026id=583527145598\u0026ns=1\u0026abbucket=9#detail)\n\n该开发板上的 ST-Link 用的是 **STM32F103C8T6** ，C8T6 只有 64KB flash，在早期 ST-Link 固件比较小的时候，64KB 完全是够用的。但随着 ST-Link 的功能升级后，固件大小正好超过了 64KB ，导致了现在提示的升级错误，如下图所示。提示信息为：`The up-to-date firmware is too big for this board (4960 bytes in excess). Can't update `。就差这么 4K 多的空间了。\n\n![upgrade_error](docs/images/upgrade_error.png)\n\n## 解决思路\n\n### 方案1：更换主控\n\n最彻底的解决方法当然是更换 ST-Link 用的 MCU ，比如更换为 pip to pin 兼容的 CBT6（128KB  Flash） ，价格也没有差多少，但需要采购，手工拆卸下来，再焊接上一片新的，焊接完成后还得折腾一番才能烧入 ST-Link 固件，有些麻烦。大家如果有精力可以折腾下，一劳永逸。\n\n### 方案2：修改 CubeIDE 软件\n\n涉及到的 exe 主要有这两个：\n\n- STM32_Programmer_CLI.exe （负责下载）\n- ST-LINK_gdbserver.exe （负责调试）\n\n这两个 exe 都有版本检测功能，将其反编译，找到版本号检测功能，简单修改下，应该也可行。\n\n这里使用的工具是 IDA 7.0，在 [吾爱破解](https://www.52pojie.cn/thread-675251-1-1.html) 上可以下载到绿色版本。将其装载后（这里以 ST-LINK_gdbserver.exe 举例），搜索版本号检测提示相关的字符串 ( firmware version )，追踪相关代码流程，可以追踪到类似如下图代码：\n\n```c\nThe detected STM32 firmware version (V%d.J%d) is compatible with PC software but is not the most recent one\n```\n\n![cmp_ver](docs/images/cmp_ver.png)\n\n左边是汇编代码，右边是反汇编为 C 的代码，先看右边的代码。很明显这里在进行两个数值对比，当 (a1+248) 地址指向的数值（推测其 ST-Link 固件主版本号）等于 2 时，后再继续对比（a1+250）地址指向的数值（推测其为子版本号），当子版本号 `\u003c=0x1D` 即十进制 29 时，条件成立。\n\n当前出厂的潘多拉 ST-Link 版本号为 `V2J24S11` ，V2J27 再往后版本就无法升级了。条件里的 29 正好大于潘多拉的 J24  ，所以提示版本过低。\n\n回到左边的汇编视图，记下 `cmp a1, 1Dh ` 代码左下角对应的偏移量 `0x00027453` 。使用 hex 工具打开 `ST-LINK_gdbserver.exe` ，找到 `0x00027453`  后面的 `0x1D` 位置，将其修改为你想要的版本号即可。比如这里修改为 `0x14` （十进制20），这样只要版本号大于 `V2J20` 的 ST-Link 都可以使用这个 exe 了。修改后进行了简单测试，发现限制确实被取消了。\n\n ![hack_gdb_exe](docs/images/hack_gdb_exe.png)\n\nSTM32_Programmer_CLI.exe 类似，版本号检测提示相关的字符串 ( firmware version )，追踪相关代码流程，可以追踪到类似代码：\n\n```c\nOld ST-LINK firmware version. Upgrade ST-LINK firmware\n```\n\n![cmp_ver_two](/docs/images/cmp_ver_two.png)\n\n#### STEP1：找到 STM32CubeIDE 安装路径，确定待替换 exe 路径\n\n也可以直接使用 everything 之类的搜索软件，快速地位下面两个 exe 的路径\n\n- STM32_Programmer_CLI.exe  一般位于 `STM32CubeIDE_1.0.0\\STM32CubeIDE\\plugins\\com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_1.0.0.201904021149\\tools\\bin`\n- ST-LINK_gdbserver.exe 一般位于 `STM32CubeIDE_1.0.0\\STM32CubeIDE\\plugins\\com.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.win32_1.0.0.201904160814\\tools\\bin`\n\n\u003e 注意：上面路径的日期标识可能与你的实际路径略微不同\n\n#### STEP2：替换 exe \n\n将项目目录下 `STM32CubeIDE` 对应的 exe 替换过去即可，如果不放心记得提前备份下旧版本 exe 。\n\n此时你的 CubeIDE 即可放心使用类似潘多拉等集成旧版本 ST-Link 的开发板了。\n\n\u003e PS：当前破解的这两个 exe 只能用于固件版本大于 V2J20  的 ST-Link ，暂不支持更低版本\n\n### 方案3：修改 ST-Link 升级器软件（部分用户升级失败，不推荐）\n\n这里要首先讲一个常识，一般的 STM32 芯片片内都会在末尾预留一部分 Flash 空间出来，只是这部分 flash 空间 ST 不保证 Flash 质量。如果能将末尾预留 Flash 利用起来，`C8T6` 也许也能当 `CBT6` 来用。所以问题的重点就聚焦在如何让升级器软件 **取消 Flash 容量检查的限制**。\n\n搜索一番，果真就有。这个方案出自这位老外：https://lujji.github.io/blog/installing-blackmagic-via-stlink-bootloader/ 。思路还是挺新颖的，大家如果有精力可以深入看一下。\n\n虽然是两年前的方法了，但是也适用于笔者用的 STLinkUpgrade V3.3.0 。\n\n#### 重要提示\n\n方案 3 的实际测试结果来看，虽然规避了升级器的容量检查，但存在一定几率的升级失败，此时 ST-Link 就会变砖。不过文档末尾也有很简单的救砖教程，升级失败后可以尝试救砖。愿意折腾的还能继续升级，至少我有一个开发板是重复升级了2次，最后也终于成功了。\n\n#### STEP1：安装 Java 运行环境\n\n如果电脑上没有 Java 运行环境，可以看这里：https://jingyan.baidu.com/article/4e5b3e1909043f91911e2464.html\n\n#### STEP2 ：双击打开 STLinkUpgrade/STLinkUpgradeHacked.jar\n\n![step2](docs/images/step2.png)\n\n#### STEP3: 进入升级模式\n\n![step3](docs/images/step3.png)\n\n#### STEP4：开始升级\n\n点击 `Upgrade` 即可。\n\n#### STEP5：确认升级成功\n\n升级后复位下，打开 Keil MDK 看一下，如果能够正常的找到 ST-Link 并连接芯片，恭喜你，升级成功了。\n\n如果提示：`ST-Link in DFU mode. Restart it or upgrade it.` 如下图所示\n\n![upgrade_failed_in_dfu](docs/images/upgrade_failed_in_dfu.png)\n\n很遗憾，本次升级失败了，不过不要害怕，下面还有救砖教程，保证 ST-Link 还能被还原。\n\n还原后，想继续折腾的也可以重新升级试试，没准这次就成功了。实在不行，那也就只能更换主控了，祝大家好运。\n\n### 方案4：摆烂！使用ST-LINK Utility烧录bin文件到STM32\n\n请到 `STLinkUtility` 文件夹安装 `STM32 ST-LINK Utility v4.0.0 setup.exe` （注意，不可使用其他比v4.0还新的版本）。\n\n先将ST-Link的版本退回到Utility V4.0内置的版本：\n\n![utility-upgrade-framework-1](docs/images/utility-upgrade-framework-1.png)\n\n![utility-upgrade-framework-2](docs/images/utility-upgrade-framework-2.png)\n\n用Keil、IAR、RT-Thread Studio编译出来的bin文件，直接拖入Utility软件中，按照如下图所示的顺序点击即可：\n\n![utility-open-file](docs/images/utility-open-file.png)\n\n![utility-open-bin](docs/images/utility-open-bin.png)\n\n![utility-program-1](docs/images/utility-program-1.png)\n\n![utility-program-2](docs/images/utility-program-2.png)\n\n## 救砖指南\n\n### SETP1：打开 recovery 文件夹下的 ST-LinkUpgrade_V2.J27.M15.exe\n\n这是一个旧版本的 ST-Link 升级器，可以将我们的固件还原。\n\n### STEP2：执行升级\n\n点击 `Device Connect` 后，再点击 `Yes` 即可\n\n![recovery](docs/images/recovery.png)\n\n## 致谢\n\n- 感谢大法师 [@lymzzyh](https://github.com/lymzzyh) 及 小白 [@Zero-Free](https://github.com/Zero-Free) 的支持，在他们的帮助下完成了 ST-Link 固件更换测试工作\n- 感谢 [@lujji](https://github.com/lujji) 这位老外的修改教程，大家有兴趣也可以去他的 GItHub 逛逛 https://github.com/lujji\n- 感谢 [@enkiller](\u003chttps://github.com/enkiller\u003e) 在 exe 破解给予的一定指导，以及正点的小石头兄弟先前做的一些破解工作\n\n-----\n\n## 注意\n\n- 仅在 ST-Link V2.1 上做过测试，其他版本慎用；\n- 请勿用于商业用途；\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmink%2Fhackstlinkupgrade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farmink%2Fhackstlinkupgrade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmink%2Fhackstlinkupgrade/lists"}