☰
Keil5 MDK与C51共存安装指南:芯片包导入及常见报错排查
2026/10/3 16:00:10 网站建设 项目流程

搞嵌入式这些年,帮人装 Keil 的次数比自己开工程还多。可能是实验室电脑被不同版本装太多次,也可能是新手总在“MDK、C51、Keil5 到底该下哪个”这件事上打转。其实 Keil 的安装过程本身只要十几分钟,难的是装完之后怎么把工具链理顺、芯片包备齐、烧录和编译不闹脾气。这篇文章就把 Keil5 MDK 从下载、安装、C51 共存、芯片包导入到常见报错全部捋一遍,按保姆级标准来写,跟着点下一步基本不会出大问题。

1. 安装前先把三件事搞清楚

1.1 MDK、C51、Keil5 到底是什么关系

很多刚接触单片机的人会被这一串名字绕晕。实际上,Keil5 是一个习惯称呼,严格说应该叫 MDK(Microcontroller Development Kit),它是由 ARM 公司(现在属于 Keil 品牌)推出的嵌入式开发工具,核心是基于 µVision 的集成开发环境(IDE)+ ARMCC/AC6 编译工具链。我们平时说的“装 Keil5”,绝大多数情况下就是在装 MDK。

而 C51 是另一套独立工具链,专门针对 8051 内核的单片机,比如 STC89C52、AT89C52、STC15 系列。MDK 面向的是 STM32、NXP、GD32 这类 ARM Cortex-M 内核芯片,C51 面向的是老牌 51 内核芯片。两者的 IDE 都是同一个 µVision 外壳,但是编译器内核完全不同,所以会出现“装完 MDK 发现 Device 列表里没有 51 芯片”的情况。

版本上还需要注意:MDK 5.x 的版本号一直在更新,从早期的 5.10 到后来的 5.36、5.37、5.38、5.39,越新的版本对 Win11 和新款 ST-Link、J-Link 固件支持越好,但也可能出现个别旧工程打开报错的情况。如果只是学习 C51 和 STM32,5.36 或者 5.37 已经够用到毕业。

1.2 安装前要准备的东西

安装 Keil 不像装个聊天软件那么简单,提前做好准备能少踩很多坑。

  • 操作系统:建议 Win10 或 Win11 的 64 位版本,32 位系统老版本还能跑,新版本基本不维护了。
  • 磁盘空间:系统盘预留至少 3GB,装完 Keil 主程序最多占 1GB 多,但芯片包和工程文件会越攒越多。
  • 管理员权限:安装过程中会写注册表、装 USB 驱动(比如 ST-Link 的驱动),普通用户容易权限不足,最好用管理员账户登录。
  • 下载工具:推荐 WinRAR、7-Zip 这类解压软件,有些安装包如果是压缩包形式,需要先解压。
  • 关闭杀毒软件:这个不是绝对要求,但很多病毒库会把 Keil 的和谐补丁或者激活工具误判为木马直接隔离,装到一半提示缺文件,很难排查。装完再打开杀软,不会影响日常使用。

提示:如果只是用学校实验室给的官方评估版,那不需要关闭杀毒。但如果你确实要用一些特殊激活手段,建议先把实时保护关掉,否则文件被吞了都不知道。

1.3 安装包去哪下载

下载渠道这块我多说两句。Keil 官方下载页面地址是 keil.com 的 Download 板块,在 Product Downloads 里能找到 MDK-ARM 和 C51 两个安装包。官方下载需要填写邮箱,提交后下载链接会发到邮箱里,速度不算快,但胜在包干净,不会被注入乱七八糟的东西。

网上各种“一键安装版”“破解合集版”确实能省事,但风险也大:一是可能捆绑推广软件,二是安装包可能被篡改,编译器被动手脚之后,将来工程出问题你根本不知道是代码问题还是工具链问题。我的建议是优先官网,官网下载慢就开个下载工具挂着,没必要去赌第三方包的干净程度。

C51 的下载入口在官网同样能找到,文件名叫类似 C51V961.exe 这种,MDK 的则叫 MDK537.exe、MDK538.exe 这种,下载的时候注意区分。如果决定 C51 和 MDK 都装,最好把两个安装包都提前下好,放到同一个文件夹里,方便后面规划安装。

2. 保姆级安装步骤:C51 和 MDK 一次装好

2.1 推荐安装顺序

很多人在论坛上问“C51 和 MDK 哪个先装”,其实顺序不是关键,关键是安装目录必须完全一致。因为 C51 和 MDK 共用一个 µVision 外壳,谁后来覆盖,谁就把 IDE 的公共组件刷新一遍。

我个人的习惯是先装 C51,再装 MDK。这样做的原因是 MDK 的安装包通常会更新 µVision 公共文件,后装 MDK 能让 IDE 主程序版本更新,而 C51 的编译器文件还保留在同一个目录下,两边都不耽误。反过来先 MDK 后 C51 也可以,但有时候 C51 的老版本外壳会把 MDK 的设备数据库覆盖掉,导致 Device 列表里 ARM 芯片消失了,还得重装一次 MDK 才能恢复。

还有一个更稳妥的做法:两个都装完后,再运行一次 MDK 的安装程序,选择 Repair 修复一遍,让公共文件保持最新。

2.2 C51 详细安装过程

以 C51V961.exe 为例,双击运行后会先进入准备界面,点 Next。

第一页是 License Agreement,勾上 I agree to all terms of the preceding License Agreement,继续 Next。

然后是选择安装路径。这里必须敲黑板:安装路径不要带中文,不要放在 C 盘用户目录下那种带空格的路径,强烈建议直接用默认路径 C:\Keil_v5。注意,C51 和 MDK 都要指向这个目录,它俩会共存于同一个 Keil_v5 文件夹里。

接下来会弹出一个用户信息填写界面,随意填就行,比如名字填 admin、公司填 admin、邮箱填 admin@admin.com,不填过不去。填完继续 Next,等待进度条走完,C51 就装好了。

安装完成后桌面上会出现 Keil uVision5 的图标。这时候先双击打开看一眼,如果正常进入界面,说明 C51 部分已经成功,可以先关掉。

2.3 MDK 详细安装过程

MDK 的安装步骤和 C51 几乎一样,双击 MDK537.exe,一路 Next、I agree。

关键点依然在安装路径:必须手动确认安装目录是 C:\Keil_v5,而不是默认的 C:\Keil(有时候 MDK 会默认指到 Keil 而不是 Keil_v5,如果这里不注意,装完就会发现 C51 和 MDK 各装各的,完全不兼容)。

继续安装时,MDK 安装包会问你要不要在线下载芯片 Pack 并安装,这步建议选 Cancel 或者不勾选。原因很简单:在线 Pack 服务器在国外,国内网络经常下半天卡死,而且安装器内置的 Pack 下载器版本老,容易失败。Pack 我们等装完后通过 Pack Installer 单独搞,后面会细说。

MDK 主程序装好后,系统可能会提示安装 ST-Link 或 J-Link 的驱动。如果用的是 STM32,直接把 ST-Link 驱动勾上,后面烧录省事很多。如果是自己外接 J-Link,去 J-Link 官网装最新的驱动更好。

装完之后,同样先双击打开 µVision,确认能进主界面。

2.4 安装后怎么确认两个都能用

这一步非常重要。很多人以为两个装完就万事大吉,结果建工程的时候发现找不到 51 芯片,或者找不到 STM32,其实问题就出在公共组件被覆盖了。

打开 µVision,点菜单栏的 Project -> Manage -> Pack Installer,左侧会列出已经安装的设备 Pack。同时点 Project -> New uVision Project,在弹出窗口的设备列表里检查:如果能看到 Atmel、STC 这些 51 厂商,也能看到 STMicroelectronics 下的 STM32 系列,说明 C51 和 MDK 共存成功。

如果只看到 51 芯片没有 ARM,多半是 MDK 没有安装到 C:\Keil_v5,或者 MDK 被 C51 覆盖了公共文件。解决办法是重新运行 MDK 的安装包,选 Repair 修复,或者直接卸载重装,记住路径要统一。

注意:C51 和 MDK 不能通过“把两个安装包放在一起双击”这种操作合并安装,必须依次执行安装程序,并且路径一致。有些网友说“C51 兼容 MDK”是因为它俩共用 µVision IDE,但前提就是路径统一。

3. 芯片包(Pack)导入与第一个工程

3.1 为什么芯片包必须单独装

从 MDK5 开始,Keil 把芯片支持从主程序里拆出去了,变成一个个独立安装的 Pack 文件。这样设计的好处是主程序瘦身,用户想支持什么芯片就装对应包,但缺点也很明显——你光装 MDK 主程序,设备列表里空空如也,连 STM32F103C8 都找不到。

Pack 文件里包含了芯片的 SVD 描述文件、Flash 下载算法、启动文件模板等,是 MDK 能够识别和烧录芯片的基础。所以装完 MDK 之后最要紧的一件事就是安装芯片包。

3.2 在线安装和离线安装

在线安装最简单:打开 µVision,点 Project -> Manage -> Pack Installer,左侧选择芯片厂商,比如 STMicroelectronics,然后在右侧找 STM32F1 系列对应的 Pack,点 Install,等进度条走完就行。

但实际使用中,在线安装经常卡在下载阶段,尤其是网络条件一般的时候,进度条半天不动,最后报错。遇到这种情况别死磕,改用离线包:

  • 打开浏览器,进入 Keil 官网的 Pack 下载页面。
  • 搜索你要的芯片系列,比如 STM32F1,下载 Keil.STM32F1xx_DFP.2.3.0.pack 这样的文件。
  • 下载完成后直接双击 .pack 文件,Keil 会自动导入并安装。
  • 装完打开 Pack Installer,确认对应位置显示 installed。

离线包的好处是一旦下载成功,以后换电脑或者给队友装环境,同一个包可以直接复用,不用重新去官网折腾。而且去芯片原厂官网也能下载对应 Pack,比如 ST 官网就提供。

3.3 用 Pack Installer 检查依赖冲突

偶尔会遇到这种情况:装了 STM32F1 的 Pack,结果打开某个工程,提示缺少另一个 Pack。原因很简单,这个工程是别人用不同版本的 IDE 建的,用了和你不一致的软件组件包(比如 CMSIS 版本)。

解决办法是在 Pack Installer 的 Packs 页面看有没有报错或者缺失项,有就点 Install 补齐。还有一种情况是同一系列的 Pack 装了好几个版本,在 Manage Project Items -> Pack 里切换到项目需要的版本,别让它默认到最新版。

3.4 创建第一个工程验证环境

芯片包装好后,创建一个空工程验证环境是否正常。点 Project -> New uVision Project,选一个目录命名工程,然后在 Device 窗口里选目标芯片,比如 STM32F103C8。

选完芯片后,软件会弹窗问你是否添加启动文件,选是。然后点一下编译按钮(Build,快捷键 F7),如果能编译通过且生成 .axf 文件,说明 MDK 主程序、芯片包、编译器三个核心要素全部正常。这个时候环境才算是真正装好了。

4. 装好的 Keil 还有几件必须调的事

4.1 字体和界面基础配置

很多新手装上 Keil 后第一步就是写代码,结果看到默认字体不顺眼,好心情直接减一半。这里建议进 Edit -> Configuration -> Colors & Fonts,把 C/C++ Editor Font 改成 Consolas、字号 14 左右,看起来舒服很多。

另外这个窗口的 Editor 页签里还能设置 Tab 缩进,建议缩进改成 4 个空格,不要用 Tab 制表符。嵌入式工程的文件经常要跨 IDE 打开,用空格可以避免在不同编辑器里错位。

4.2 把工程编码从 GBK 改为 UTF-8

这是一个很多人踩过的坑。老工程(尤其是从别处拷贝来的)经常是 GBK/GB2312 编码,而新版 Keil 默认读取 UTF-8 编码。用新版 Keil 打开老工程后,中文注释全变成乱码,一改一保存,乱码就永久写进文件里了,非常折磨。

解决办法是统一编码格式。点 Edit -> Configuration -> Editor,找到 Encoding 选项,选 UTF-8。这一步改的是编辑器新建文件的默认编码,对老文件目前已有乱码的,需要手动在 File -> 打开时选择对应编码,或者用 VS Code 之类的编辑器把文件转成 UTF-8 后重新打开。

提示:如果你的同事还在用旧版 Keil(比如 MDK4),你改成 UTF-8 后他再用 GBK 打开可能又会乱码。团队协作时最好统一编码策略,最省事的方案是新建代码文件时全部用英文注释,彻底绕开编码问题。

4.3 C51 编译器的 2K 限制怎么解除

这个问题在热词里反复出现,也是 C51 新手最常碰到的“神秘报错”:编译时提示 LIMIT 2K BINARY CODE,意思是你写的代码超过评估版 2KB 大小限制。这其实是 Keil C51 评估版的限制,不是芯片不能跑超过 2K,也不是编译器坏了。

想解除限制,正规做法是安装一个有效的 License。打开 File -> License Management,里面可以看到当前授权状态。购买正版授权后,Keil 会给你一个 LIS 代码,在 License Management 里添加即可解除 2K 限制。学校实验室或者参加比赛可以用教育授权通道,价格和流程都比企业采购友好。顺带说一句,MDK 的 ARM 编译器也有类似的代码量限制,只是数值比 C51 宽松一些,烧录小工程不一定触发。如果 License 过期或失效,最常见的提示就是 target not created 或者 feature C51 has expired,同样在这里重新添加 LIS 就行。

4.4 顺手把编译输出配置优化一下

装完环境后,建议顺手改两个编译选项,后面能少折腾。在 Project -> Options for Target -> Output 页签里,勾选 Create HEX File,这样编译后会生成 hex 文件,方便用第三方下载器烧录(比如 STC 的 ISP 软件)。

在 Listing 页签里,如果不做代码覆盖率分析,可以把 Browse Information 关掉。这个选项会生成大量中间索引文件,开多了拖慢编译速度,对于小工程没什么意义。改完之后,无论后续写 51 还是 32,编译响应都会明显快一些。

5. 高频报错与排查技巧实录

5.1 Flash Download Failed 烧录失败排查清单

烧录失败是 Keil 最有代表性的报错,没有之一,报错信息通常长这样:Error: Flash Download failed - "Cortex-M4"。很多人一看就慌,其实九成是配置问题而不是芯片烧了。

  • Flash 算法没选对:Options for Target -> Debug -> Settings -> Flash Download 里,Programming Algorithm 必须添加对应芯片的 Flash 算法。比如 STM32F1 要选 STM32F10x High-density Flash,漏了或者选错都会报这个错。
  • Reset and Run 没勾选:同样是 Flash Download 界面,勾上 Reset and Run,烧录完自动复位运行,如果不勾,烧完后芯片停在调试状态,看起来像“没跑起来”。
  • 芯片锁死:调试时程序里开了读保护,再次烧录就会失败。解决方式是先用 ST-Link Utility 连接芯片,执行全片擦除(Erase All),清除读保护后再回 Keil 烧录。
  • 连接不稳定:很多便宜的 ST-Link 仿制板在 USB 供电不足时会丢包,换一个 USB 口或者加一个带供电的 HUB 能解决。

5.2 编译很慢怎么破

编译慢这个问题主要集中在老电脑和大型工程上。常见原因和解决办法:

  • 杀毒软件实时扫描:Windows Defender 或者其他安全软件会在编译时检查生成的中间文件,导致每次编译都慢。把 Keil 的安装目录和工程目录加入杀软排除名单,立竿见影。
  • 机械硬盘的随机读写瓶颈:编译过程会产生大量临时文件,机械硬盘的效率明显不如固态。预算允许就上固态,体验提升非常大。
  • Browse Information 开了:前面说过,Listing 页签里的 Browse Information 开着会生成大量 .crf 文件,编译速度会肉眼可见变慢,关掉能快不少。
  • 工程清理不够彻底:长时间开发后,中间 .o、.d 文件堆积,编译时要处理它们。可以定期点 Project -> Clean Target,只保留源码和库文件的干净状态。
  • 优化等级设太高:如果开了最高等级优化,编大工程时编译器在优化阶段会耗费大量 CPU 时间。调试阶段先用 -O0 或默认等级,发布前再拉高优化。

5.3 左侧工程目录栏不见了

这个属于小问题,但确实有人找不到。如果左侧的 Project 窗口不见了,在菜单栏 View 里点 Project Window,或者是按 View -> Project Window 的快捷键恢复。有些版本是在界面最左侧有个小图标,点它也能展开。恢复后试着把鼠标悬浮在窗口边缘,拖动调整宽度,别让它缩成一条线就行。

5.4 烧录提示 No Target Connected / 找不到调试器

这种报错常见于初次使用 ST-Link 或 J-Link:

  • 确认 USB 线是数据线而不是只充电的线,这种问题在廉价 TTL 线、ST-Link 线上非常常见。
  • 确认 Options for Target -> Debug 页签右侧下拉框选的是 ST-Link Debugger 或 J-Link,并点 Settings,能读到设备 ID 说明连接正常。
  • 如果 Settings 里扫描不到,去设备管理器看 USB 设备是否识别,驱动异常就重装驱动。
  • 调试器连接目标板时还要注意接线,SWD 四根线分别是 SWDIO、SWCLK、GND、3.3V,接反了或者虚接都会导致 no target connected。

5.5 装完一个另一个不能用怎么办

这是 C51 和 MDK 共存安装最容易出的问题。现象通常是:装了 MDK 之后,打开 µVision 发现 Device 列表里 51 没了;或者反过来,装了 C51 之后,新建工程找不到 ARM 芯片。

原因就是两个组件的公共 IDE 文件互相覆盖了。解决思路不是卸载重装,而是重新运行被吃掉那个的安装程序,路径还是指定到 C:\Keil_v5,让它重新覆盖写一次公共文件。比如 MDK 覆盖了 C51 的设备库,就跑一遍 C51 的安装包,Repair 或者直接重装,51 就会回来了。如果还不行,就把两个都卸载,按先 C51 后 MDK 的顺序重装。

5.6 其他杂病速查

症状可能原因处理办法
打开工程提示 Missing Device没有安装对应芯片 Pack 或版本不对装对应 Pack,或切换 Pack 版本
Pack Installer 下载卡住网络原因换离线 .pack 导入
中文注释乱码GBK 与 UTF-8 混用在 Configuration 里统一编码,用外部工具批量转码
编译报错 feature has expiredLicense 过期在 License Management 重新添加 LIS
Keil 启动崩溃显卡驱动或老版本不兼容新系统更新显卡驱动或换新版本 MDK
打开工程时软件卡死工程路径太长或含中文把工程移到短路径,例如 D:\Proj\Demo

写到这里,Keil 从下载、安装到用起来的常见坑基本都过了一遍。我个人装机的习惯顺序是:先 C51 后 MDK,路径固定 C:\Keil_v5,芯片包尽量用离线包导入,全部搞定后再开工程验证。装完先不做多余的偏好设置,直接建一个 hello 工程烧录一次,确认编译器、芯片包、下载器三条链路都是通的,再回头去调主题和编码。这套流程帮身边不少同学解决过“装完开不了 51”“合不上芯片包”的问题,如果你也卡在某个环节,按文章里的顺序重走一遍,大概率能一次过。

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

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

立即咨询