☰
MDK版本选择与Pack安装实战:从5.29到5.37的全流程指南
2026/9/25 10:03:22 网站建设 项目流程

搞嵌入式开发这些年,MDK可以说是我电脑里装得最勤、也删得最勤的软件。每次接一个新项目,不是版本对不上就是Pack装不上,光一个下载安装的折腾就能耗掉半天。尤其是到了2024年,网上资料东一块西一块,有人还在用5.29,有人已经升到5.37,Pack Installer还时不时抽风,国产芯片的Pack更是得自己到处找。今年我干脆把自己从MDK 5.29到5.37各个版本、以及各类Pack的下载安装经验系统整理了一遍,包括官网渠道、离线备份、手动装Pack、卸载清理这些坑,一次性全写出来,给还在纠结的兄弟们一个能直接照抄的参考。

这篇东西适合谁看?刚入行的学生、做产品维护的工程师、以及需要给团队统一工具链的技术负责人,都能在这里找到对应问题的解法。我尽量不说废话,所有内容都是自己实测过或者替客户远程排障时验证过的方案。

1. 版本差异与选型:5.29到5.37,别再做“最新版”的奴隶

1.1 这几年MDK到底改了什么

很多人下软件有个习惯,官网放什么就装什么,觉得越新越好。但MDK这玩意儿恰恰不是这样,不同大版本之间,编译器组件、默认行为、Pack路径都有可能变化,盲目升级老工程,轻则编译报几个warning,重则直接起不来。

从我个人的使用记录和官方发布说明来看,MDK 5.29到5.37这几年,最大的变量有两个:一个是Arm Compiler 6(简称AC6)的逐步普及,另一个是CMSIS-Pack体系越来越重。

  • MDK 5.29、5.30这个阶段,AC5还是绝对主力,AC6属于“你可以用,但很多老库没跟上”的状态,新内核支持也在不断完善。
  • 到5.31、5.32左右,AC6基本稳定,不少新工程已经能切过去,但AC5依旧默认存在。
  • 5.35之后,AC6的应用明显增多,新工程默认编译器逐渐向AC6倾斜。
  • 到了5.37,AC5已经变成“可选安装项”,默认安装包甚至不包含AC5,需要手动勾选。

如果你的老工程一直用AC5编译,升到5.37之后一看,编译器找不到了,这种情况我遇到不下十次。所以版本选择真不是越新越好,得看你的工程底子。

1.2 老工程与新工程,怎么选版本最稳

我个人的建议很简单,而且特别适合团队协作:

  • 老工程、老库、稳定量产项目:继续守5.29到5.32,编译器锁AC5。这些版本经过大量项目验证,网上资料也多,遇到问题随便一搜就有解法。
  • 新项目、新芯片、新库:直接上5.36或5.37,用AC6。AC6对C99、C11的支持更好,编译器诊断信息更清晰,代码体积和优化效果也普遍更好。
  • 中间版本(5.33、5.34)不是不能选,而是没必要。除非你的某个Pack明确要求,否则选两头永远是最优解。

还有一点容易被忽略:MDK同一个电脑上其实可以共存多个版本,比如装在C:\Keil_v5.29和C:\Keil_v5.37两个目录下,互不干扰。我自己的电脑就是5.29和5.37并行,老项目用老的,新项目用新的,省去频繁卸载重装的痛苦。

1.3 关于License与评估模式的几个常识

许可证方面也说几句。MDK安装完没有License时,默认进入评估模式,代码有大小限制(编译产物超过一定容量就过不了),很多人第一次用以为是装坏了,其实不是。

  • 正版License通过官网购买,拿到序列号后在菜单License Management里添加,电脑需要联网。
  • 添加License前,务必用管理员身份运行Keil MDK,否则写入授权文件时容易权限不足。
  • 公司的浮动License,还需要确保防火墙允许Keil和License服务器的通信。

这里不展开破解之类的操作,我的态度一直是:做产品用正版,出了问题有技术支持,这点钱不该省。学习评估阶段用官方评估版完全够你跑通一个完整的单片机项目。

2. 下载路径实测:官网、历史版本与离线备份

2.1 官方下载入口到底有几个

MDK官方的下载入口其实有两条线。

第一条是Keil官网的Download页面,上面会放最新版安装包。第二条是Arm的开发者站点,提供MDK的历史版本归档。很多人只看到第一条线,不知道历史版本怎么找,所以只能在搜索引擎里碰运气。

实际操作中,两个入口都可能遇到一个恼人的问题:国内直连下载速度不稳定,尤其安装包动辄几百MB,下到一半断掉就要从头再来。我的做法是:

  1. 先用浏览器打开下载页面,把安装包的直链地址复制出来。
  2. 换用支持断点续传的下载工具,多开几个线程,通常能比浏览器默认下载快不少。
  3. 下载完成后,第一时间记录版本号和安装包大小,条件允许的话再算一下哈希值。

2.2 历史版本下载与本地归档

历史版本为什么重要?因为Pack和工具链之间有兼容性。比如某个国产芯片厂商的Pack,只验证过5.33,你非要拿5.37去用,可能就有各种奇怪问题。这时候手头有历史版本安装包,就能快速回退。

关于历史版本的获取,官方的历史版本归档页面是首选。如果官网访问不顺畅,也可以在一些开发者社区或网盘分享里找到老版本,但一定要核对签名和文件大小,防止下载到被改动过的文件。我在帮客户恢复老环境时,甚至遇到过网上流传的所谓“5.29安装包”实际是旧版广告软件的情况。

所以强烈建议团队维护一个内部软件归档目录,把常用的MDK版本、Pack安装包、芯片离线包都放进去,标注好版本号和适用项目。换电脑、招新人、现场复现客户问题的时候,这套本地归档是救命的东西。

2.3 下载慢、断流的通用解法

关于下载慢的问题,还有几个行之有效的土办法:

  • 换网络环境试。家庭宽带、手机热点、公司网络,很多时候只是某一条线路不稳定,换一条就好。
  • 避开上网高峰。国内访问海外站点,晚高峰和周末通常更慢,凌晨反而好很多。
  • 不要把安装包放在中文路径或带空格的目录里下载,某些下载工具有时候会把文件名处理乱。
  • 用电脑自带的断点续传比较弱,建议用支持多线程的工具,遇到中断可以从断点继续。

另外提醒一句:不要从各种“高速下载站”下载MDK,那些站点经常捆绑一堆全家桶软件,装完你会收获一个浏览器首页劫持和一堆弹窗。

3. Pack软件包:从原理到手把手安装

3.1 Pack机制是怎么工作的

Pack是MDK体系里绕不开的东西。简单说,Pack就是一个“芯片+组件”的软件包,里面包含了芯片的器件描述文件、Flash烧写算法、启动文件、外设库、CMSIS组件等,类似给MDK装的“设备驱动”。

Pack安装后不是活在安装目录深处吗?不同版本路径还不一样,这是很多人找不到Pack的根源。老版本MDK会把Pack放到MDK安装目录下的ARM/PACK文件夹;新版则放到系统用户目录下的AppData\Local\Arm\Packs。如果某天你发现C盘被塞满了,大概率就是Packs目录里堆了一堆旧包。

.Pack文件本身其实是个压缩包。把后缀改成.zip,用压缩软件解压,你就能看到里面的PDSC描述文件和芯片支持文件。这个特性方便我们手工检查Pack内容和排查问题。

3.2 官方Pack仓库与离线包获取

Pack的获取方式有在线和离线两种。

在线方式是打开Pack Installer,从仓库列表里找到芯片厂商,点Install。但这种方式有两个毛病:一是仓库列表加载慢,二是一不小心点了Install All,能把几百个Pack全拉下来,硬盘瞬间爆炸。

离线方式就是主动去Keil官网的Pack列表页面下载对应芯片的DFP(Device Family Pack)。页面上每个Pack都标注了版本号和适用芯片型号,下载后是一个.pack文件,双击即可安装。

我推荐的做法是:不管在线安装多方便,都优先去官网把.pack下载到本地再安装。好处是可以自己控制版本、方便归档、也方便给同事离线传。尤其在公司网络管控比较严的环境,离线包几乎是唯一可靠方案。

3.3 手动安装Pack:双击、Import与路径避坑

手动安装Pack其实很简单,但细节里有几个坑必须注意:

  1. 双击.pack文件,会弹出Pack Installer并自动安装。这个方式最简单,但前提是文件关联没被改过。
  2. 如果双击没反应,就在Pack Installer里选File -> Import,手动浏览到.pack文件。
  3. 安装路径不要有中文,也不要有特殊符号。用户名如果是中文,我建议在Installer设置里手动指定一个纯英文的Pack安装目录。
  4. 安装完成后,要注意右上角有没有红色感叹号。如果显示“Plugin not installed”之类的信息,通常是Pack依赖的其他组件缺失,而不是Pack没装上。

装完之后怎么验证?新建工程时,在Device选择框里能搜到对应芯片,说明Pack生效;如果搜不到,多半是路径不对或者安装过程被安全软件拦截。

3.4 国产芯片Pack指南:GD32/AT32/CH32实例

国产芯片的Pack,是这几年大家问得最多的。以GD32F407ZGT6为例,这是一颗非常流行的Cortex-M4芯片,很多项目都在用。

  • 在Keil官网Pack搜索页,搜“GigaDevice”或“GD32F4xx”,就能找到对应DFP。
  • 下载对应版本后,直接安装。装完新建工程,Device列表里应该出现GD32F407系列的完整型号列表。
  • GD32的Pack里还带了一些官方例程的工程模板和SVD外设描述文件,对调试查看寄存器很有帮助。

类似的,雅特力AT32系列搜ArteryTek,沁恒CH32系列搜WCH,灵动MM32系列搜MindMotion。这些国产厂商的Pack维护节奏不一,有的更新很快,有的老版本可能长期不更新。遇到新版MDK装不上旧Pack的情况,可以先试试用兼容模式安装,或者直接联系厂商FAE要适配包。

4. 重装、换机与残留清理,这些坑我替你踩过了

4.1 卸载顺序不对,重装必翻车

MDK这软件最邪门的地方在于,它装的时候很顺利,卸载的时候却经常留一堆尾巴。直接控制面板里点卸载,删掉主目录,然后立刻装新版本,大概率会出现各种诡异报错——某DLL找不到、License信息丢失、Pack列表一片空白。

正确顺序是这样的:

  1. 先把所有打开的Keil工程退出,包括后台的FLEXnet服务(如果有License服务的话)。
  2. 在控制面板的“卸载程序”里找到MDK,正常卸载。
  3. 手动删除整个安装目录,比如C:\Keil_v5。
  4. 到AppData目录下删掉残留的Arm文件夹。
  5. 用注册表编辑器搜索“Keil”“ARM”和“MDK”关键词,删除相关残留项。注意注册表操作前一定要先备份。
  6. 重启电脑,再做新版本安装。

4.2 清理脚本与注册表残留

为了减少重复劳动,我写过一个简单的清理脚本,思路就是上面那几步的自动化。核心逻辑是:先杀进程,再删目录,最后提示手动清理注册表。

@echo off echo 请以管理员身份运行本脚本 taskkill /f /im UV4.exe 2>nul taskkill /f /im Uv4.exe 2>nul rmdir /s /q "C:\Keil_v5" rmdir /s /q "%LOCALAPPDATA%\Arm" rmdir /s /q "%APPDATA%\ARM" echo MDK目录已清理,请手动打开注册表编辑器检查Keil残留项。 pause

这个脚本我建议在重装前使用,但别指望它解决所有问题。因为每台电脑的杀毒软件、系统环境、安装位置都可能不同,注册表里的残留依然要人工确认。

4.3 换电脑、团队协作时的Packs目录迁移

很多人换电脑最头疼的就是Pack重装。虽然Pack Installer可以一键装,但几百个Pack重新拉一遍,等得人绝望。

这里有一个技巧:直接把旧电脑%LOCALAPPDATA%\Arm\Packs目录整个拷贝到新电脑,只要新电脑已经装了对应版本的MDK,Pack就能被自动识别。需要注意的是,不同MDK版本的Pack目录结构可能有差异,跨大版本迁移时不一定100%兼容,建议拷贝后逐个验证设备列表。

团队协作场景下,我还建议在共享盘里放一个“标准Pack集”,约定版本号,所有成员统一安装。这样可以避免“我这能编译你那不行”的经典协作问题。

5. 常见问题排查速查表

5.1 Pack Installer空白、卡死、下载不了

Pack Installer经常抽风,很多人一打开就遇到空白列表。

常见原因和解决顺序:

  • 网络问题。先等1分钟,Pack仓库列表有时候加载慢,不是真卡死。
  • 缓存问题。把%LOCALAPPDATA%\Arm\Packs里的.Download缓存目录删掉,重新打开Installer。
  • 杀毒软件拦截。加白名单,或者暂时关闭实时保护再试。
  • 防火墙设置。某些企业网络会拦截Pack仓库的域名,这种情况就得用离线Pack方案。

5.2 编译报“找不到器件/头文件”

这种报错十有八九是Pack没装对。

  • 在魔术棒(Options for Target)里的Device选项卡,确认芯片型号真的能从下拉列表选到。
  • 如果选了型号但编译时找不到头文件,检查工程里Include Paths是否包含Pack安装目录里的对应芯片头文件路径。
  • 确认芯片厂商Pack版本和MDK版本匹配,旧Pack配新MDK有时会提示缺少CMSIS组件。

5.3 AC5/AC6编译器丢失

前面提过,5.37里的AC5是可选安装项。如果你从5.37安装包装完,发现老工程报“compiler not found”之类的错误,基本就是AC5没装。

解决办法:重新运行MDK安装包,选择Modify,在组件列表里勾上AC5编译器,等待安装完成即可。同理,如果你某个新库需要更高版本AC6,也要在这里检查。

5.4 中文路径、杀毒误删、防火墙拦截

这三个问题容易被忽略,但实际上手率极高。

  • 中文路径:MDK和Pack的安装路径,以及工程路径,都别用中文。Keil内部对非ASCII路径处理一直不力,编译时各种找不到文件,就是这个原因。
  • 杀毒误删:UV4.exe、licence工具等文件经常被杀毒软件误报。请在杀毒软件里把MDK安装目录和Packs目录加入信任区。
  • 防火墙拦截:在线下载Pack、在线激活License时被拦截,表现就是进度条永远不动。到防火墙设置里放行Keil相关程序即可。

我自己在实际使用中还有个习惯:每次把MDK安装包和涉及项目的Pack压缩包放到同一个文件夹里,标注上日期和版本号,这个文件夹会同步到网盘和共享盘。等哪天公司来了个新人要搭环境,直接把整个文件夹发给他,半小时内就能把环境复刻出来。如果你现在还在纠结下载哪个版本,我的建议很简单:老工程继续守5.29到5.32,新工程直接上5.36或5.37,Pack永远是缺哪个装哪个,千万别一股脑全勾。版本、Pack、License三位一体锁定,你后面的开发日子会轻松很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询