ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Keil5保姆级教程:C51与MDK安装、激活、Pack及高频报错解决

Keil5保姆级教程:C51与MDK安装、激活、Pack及高频报错解决 搞单片机的朋友几乎没有人绕得开Keil。不管你是刚入门学51还是准备上手STM32Keil5基本是装机清单里的第一项也是很多工作多年的工程师兜兜转转还会装回电脑的工具。这篇文章的起因是最近我接连帮几位新手朋友远程排障Keil5——有人把C51和MDK装混了有人下完安装包发现Pack装不上有人一烧录就报cannot access memory还有人对着灰掉的XTAL选项一头雾水。折腾一圈之后我才意识到很多你以为“应该会”的细节对新手来说全是坑。所以我决定把这几年积累的从C51到MDK的全版本下载、安装、激活、排错流程完整整理出来做成一份可以直接照着操作的保姆级指南也把那些网上碎片化教程没讲透的地方一次说清楚。1. Keil5是什么C51和MDK别再傻傻分不清1.1 Keil这个品牌的来龙去脉先花几分钟把Keil的来历捋顺因为这决定了很多问题能不能想通。Keil最早是一家德国公司专门做8051单片机的C编译器工具链所以它的名字很好记就是“Keil C51”。后来ARM公司收购了Keil并在此基础上推出了面向ARM架构的MDK-ARMMicrocontroller Development Kit。再往后到了Keil MDK 5时代整个工具链被拆成了两部分一部分是仍然独立的C51开发环境另一部分就是我们现在常说的MDK也叫MDK-ARM、Keil uVision。uVision是它们共用的集成开发环境外壳。换句话说你安装的所谓“Keil5”并不是一个安装包通吃所有芯片。它分成两个完全独立的安装程序C51版负责8051内核的单片机比如STC89C52、AT89S52MDK版负责ARM内核的单片机比如全系列的STM32、NXP的LPC、GD32等。很多新手第一次装的是MDK结果新建工程时找遍Device列表也找不到AT89C51这种型号反过来装了C51又发现选不到STM32——原因就是这两个工具链本身就是分开安装、分开激活的。也就是说如果你既要写51又要写STM32就必须把C51和MDK都装到同一台电脑上。这完全可以共存而且不影响彼此关键是不能把两者当成一个软件来看后续所有的激活、Pack、路径、配置都要分开处理。想明白这一点后面很多问题就已经解决一半了。1.2 常见版本对照与选型建议既然标题说“全版本”和“从C51到MDK”那就把目前比较主流的版本整理清楚。对于C51目前官方还在维护的版本基本是9.60、9.61这些界面和MDK的uVision长得几乎一样实际上C51的安装包在安装完之后也会显示成“uVision5”的样子。对于MDK从5.20一路迭代到5.37、5.38、5.39版本号一直在滚动更新。如果你是从官网下载建议直接下当前最新版本因为5.36之后对最新的CMSIS和ARM Compiler 6做了不少优化对新芯片的支持也更完整。但是这里有个很重要的观点不是版本越新就越好用。我接触过不少做产品维护的工程师还专门停留在MDK 5.23或5.26这种老版本上原因很现实——老项目用的芯片和库文件都是在老工具链下验证过的贸然升级编译器编译出的代码行为可能有细微变化甚至在同样的C语言代码下优化出来的目标码都有差异。所以如果你是要学习、做新项目装最新版没问题如果你要维护很久以前的老工程最好保留一个老版本或者先确认老工程在新版本下能一次编译通过再升级。为了直观我做个简单的版本对照表工具链典型版本适用芯片范围典型使用场景Keil C519.60 / 9.618051内核及兼容衍生STC、AT89等经典51单片机教学、小家电控制MDK-ARM5.36 / 5.37 / 5.38 / 5.39Cortex-M0/M3/M4/M7、Cortex-A部分STM32、GD32、NXP等嵌入式开发MDK 老版本4.x如4.72/4.74Cortex-M系列老芯片老项目维护、部分配套教材Keil C2515.6080251内核少见C251系列专用顺带提一句网上还经常看到“MDK 4.x”资源被标成“Keil4”如果你找的是MDK 4.72这类版本其实很少需要用到除非是老教材明确要求。平常学习STM32MDK 5的任一新版都够用别在版本选择上纠结太久。1.3 下载渠道的取舍与安全提醒下载渠道是本篇的重点也是我特别想提醒大家谨慎的地方。最稳妥的渠道肯定是Keil官网的下载中心。打开Software Downloads页面会看到MDK-ARM的下载入口往下翻还有一个“Legacy Support”区域里面有老版本下载包括C51、C251等多条工具链。官网下载速度不一定快但文件绝对干净不存在被二次打包、捆绑软件的问题。如果网络条件一般挂着让它慢慢下就行安装包通常一两百MB等待时间可接受。另一个渠道是各代理机构、教育平台或技术社区整理的镜像包有些会打成“全家桶”压缩包里面同时包含C51安装包、MDK安装包、常见芯片支持包确实方便。但我必须泼一盆冷水从非官方渠道下载的压缩包打开之前一定先做安全检查尤其是那些后缀带“激活工具”“注册机”的文件。网上很多所谓的注册机根本就是木马轻则广告弹窗重则盗取账号。License这块没有捷径走官方评估版或者正规授权才是最省心的。下载时还要注意“文件名”和“版本号”是否对得上。我遇过不止一次压缩包标题写的是“MDK 5.38”解压之后却发现是5.24的旧包。所以下载完看一遍文件名再比对一下安装包属性里的数字签名和版本号别装完才发现自己用了老掉牙的包。2. 全流程安装实操从安装包到能建工程的保姆级步骤2.1 安装前必须做的准备先别急着双击安装包有两点准备工作不做后面很容易踩坑。第一暂时关闭杀毒软件和Windows Defender的实时防护。Keil安装过程要往系统目录和注册表写入大量内容某些杀软会把这些操作误判为危险行为导致文件被隔离、安装目录不完整。我见过最典型的现象是安装过程“顺利完成”但打开软件后菜单里少一堆功能重装也没用最后发现是杀毒软件隔离了几个核心DLL。所以装的时候暂时关闭实时防护装完再打开问题基本不会出现。第二想好安装目录。Keil的默认目录通常是C:\Keil_v5C51版和MDK版的默认安装目录是同一个——这是因为C51和MDK共用uVision外壳安装时会把公共部分合并到同一个目录工具链的差异则在子目录里区分。如果自定义目录路径里尽量不要出现中文、空格和特殊符号。有些朋友习惯放D盘比如D:\Keil_v5这个没问题关键是路径要短、要纯英文。另外强烈建议把安装目录固定下来不要装完C51再装MDK时换一个目录否则两个工具链的公共组件容易各自为政启动时频繁弹错。2.2 C51和MDK装在同一个环境的最优顺序关于“C51和MDK能不能装在同一个环境里”答案是肯定的。网上有些老教程说必须按C51→MDK的顺序装不然会冲突这个说法在今天已经不太准确我自己两种顺序都试过正常装最后都能用。但为了减少不必要的麻烦我还是建议按“C51→MDK→Pack”的顺序来这个顺序最稳的原因在于C51安装完成后uVision公共外壳会先把基础环境建立好接着安装MDK时它检测到已有实例会把ARM相关的工具链合并进去最终形成同时支持两种内核的环境。安装过程基本都是点“Next”注意第一步会问“License Agreement”继续点同意然后会让你填用户名和公司名随意填就行不影响使用。中间还会有一个选择组件的界面一般全默认就好除非你要装到其他路径。安装完成后桌面会出现一个“Keil uVision5”的图标这就是共同IDE入口。有一种特殊场景值得提醒如果你电脑上以前装过别的版本比如老版MDK 4建议先把老版本卸载干净再装新的。因为MDK 4和MDK 5的目录结构完全不同老版本残留的配置文件和注册表项会干扰新版本的设备库加载典型表现是打开MDK 5后Project菜单找不到Manage Project Items或者Device列表异常。卸载后用系统自带功能清理一下必要时重启一遍再装。2.3 芯片支持包Pack的安装与路径管理到了Keil MDK 5之后最大的变化就是“芯片支持包”从安装包里抽离出来了。也就是说你装好MDK主程序并不代表你就能编译STM32工程还需要安装对应芯片厂家的Device Family PackDFP比如STM32F1系列对应Keil.STM32F1xx_DFPSTM32F4系列对应Keil.STM32F4xx_DFP。C51虽然也有Pack机制但老51芯片大多内置在标准包中所以C51装完基本就能直接用。装Pack有两个途径。第一个途径是打开Keil uVision后通过工具栏上的“Pack Installer”图标进入在线下载需要的DFP。进入后左侧会列出厂商和芯片系列找到STMicroelectronics下的STM32F1xx系列点Install即可。不过在线Pack仓库的服务器在海外国内下载有时比较慢甚至卡在一半这时候就适合用第二个途径手动下载.pack文件再导入。去Keil官网的“MDK5 Software Packs”页面下载对应.pack文件然后在Pack Installer右上角选择File→Import选中本地文件导入即可。这里分享两个小技巧第一Pack文件很大动辄一两百MB下载前先看一眼大小如果服务器太慢换个时段试试第二Pack安装好后尽量不要手动修改安装目录因为Pack的索引文件记录的是绝对路径一旦路径变了Pack Installer里所有已安装包都会变成未安装状态重装会非常崩溃。2.4 License激活的正确方式安装完主程序和Pack之后还有一个绕不开的环节License激活。Keil C51和MDK的激活是分开的。打开Keil uVision后菜单栏选择File→License Management弹出的窗口左侧有两栏一栏是“C51”相关License另一栏是“ARM”相关License。如果你有正规授权把收到的LICLicense ID Code填进对应栏下方的“New License ID Code (LIC)”框里点Add LIC即可。上面的CID码就是你的电脑识别码如果需要申请试用或者激活把这个CID码发过去就行。完全没有License的情况下软件也能用但处于评估模式MDK评估版代码大小限制在32KB以内C51评估版限制在2KB以内。这个限制对学习和简单实验影响不大但工程一大就会直接编译失败提示代码超限。这里我必须多一句嘴网上那些“注册机”帖子看着是捷径实际上是重灾区。我身边就有人下载所谓注册机后电脑中了木马文件被加密勒索。想长期用还是走正规渠道学生走教育授权工作用让公司买授权成本并不算高换来的是干净的环境和安心。3. 装好之后的高频问题排查3.1 Device列表里找不到STM32怎么办这是装完MDK后出现频率最高的问题。现象很简单新建工程时在Select Device对话框里翻遍整个芯片列表就是找不到STMicroelectronics下的STM32系列。出现这个情况90%的原因是DFP没装或者Pack装到了错误的位置。排查思路很直接打开Pack Installer看左侧Pack列表里有没有已安装的STM32 DFP。如果没有那就像前面说的去装Pack如果Pack显示已安装但新建工程时仍找不到设备那大概率是Pack路径错乱可以试一下把Pack Installer右侧窗口里的包卸载重新导入一次同时确认Pack安装目录没有被杀毒软件改写。另外还有一种隐蔽情况装的是老版MDK 4或者某个精简版的MDK这种版本默认不加载DFP机制Device列表里自然没有芯片。这时别折腾了直接换装MDK 5完整版。3.2 烧录失败与cannot access memory的排查思路烧录时报错是另一个劝退新手的高频问题。种类五花八门但最常见的主要是三类。第一类提示找不到设备比如“No Target Connected”或“Can not find ICE”。这种先查硬件连接目标板有没有供电下载器有没有识别驱动是否正常。用ST-Link的话在设备管理器里看有没有识别出“ST-Link Debug”设备用J-Link的话看有没有出现“J-Link”设备如果驱动有问题重装厂家驱动基本能解决。第二类能识别下载器但烧录时卡在擦除或编程阶段最后弹出“Cannot access Memory”。这个报错最常见的原因有三个目标板MCU进入了低功耗、Flash被读保护、调试引脚被复用。可以先试“按住复位键再点烧录”的办法或者把目标板复位电路上的电容临时断开如果还不行检查Flash Download配置里有没有选对Flash算法比如STM32F103C8T6应该选STM32F10x Med-density Flash选错算法也会报内存访问失败。第三类烧录时报“Error: Flash Download failed - Target DLL has been cancelled”这一般是Flash算法文件被查杀或者路径损坏重新安装对应DFP可以修复。排查这类问题的顺序很重要先物理连接再驱动再调试器设置最后Flash算法别一上来就怀疑芯片坏了。我见过不少“烧不进程序”最后发现只是杜邦线接触不良。3.3 Target选项卡里XTAL变灰是怎么回事很多人在Options for Target的Target标签页里发现“Xtal (MHz)”这个输入框是灰色的想改外部晶振频率却改不了。我第一次遇到也愣了半天软件怎么会不让改CPU晶振频率原因其实不难理解。在MDK 5中当你在Debug标签页选了某个调试器比如ST-Link之后Target标签里的XTAL字段在某些情况下会和调试器的时钟设置联动从而被锁定成灰色。也就是说这个参数在某个环节被接管了不再允许你在Target界面里直接改。实际解决办法是去Debug标签页在右侧的Use框选择对应的调试器比如ST-Link Debugger再点旁边的Settings按钮在弹出的窗口里找到调试时钟或系统时钟相关的设置在那里调整频率。调整后Target页的XTAL会跟着更新通常设置成和实际晶振一样的值即可。如果你是在仿真器环境下遇到的也可以检查一下是否勾选了“Use Simulator”并且选择了一个不带时钟模型的设备此时XTAL也常常变灰。3.4 C51的2K限制要怎么处理标题里特别提了“C51的2K限制”这个限制指的是Keil C51评估版未激活License编译产物最大只能到2KB。对于初学51写一个小LED流水灯可能刚好够用但只要代码稍多就会出现“LIMIT: 2K CODE”或者“C51 FATAL-ERROR: PROGRAM SIZE EXCEEDED”的报错导致很多新手以为是代码问题反复优化也没用。要彻底解除这个限制唯一的正规路径就是给C51工具链配置完整的License。激活之后的完整版C51编译上限是64KB这对绝大多数51芯片来说绰绰有余。如果你只是偶尔做点小实验又不想折腾License也可以考虑用开源的SDCC编译器它没有代码大小限制在部分学习场景下可以替代C51。但要注意两个编译器对C语言标准、关键字和中断声明的支持有差异直接把Keil工程代码拷到SDCC下经常要改动。最后贴心提示网上有些方法让你改文件或加链接选项来“绕过”2K限制这其实是把超出的代码塞到非法区域最终跑起来莫名其妙黑屏、飞针非常不建议尝试。正确思路就一个要么正规授权要么换工具。4. 让Keil5更顺手进阶配置与日常开发技巧4.1 一套环境同时搞定51和STM32装好C51和MDK后很多人的疑问是新建工程时怎么区分其实很简单新建工程对话框里的Device栏会列出所有已安装Pack支持的设备。写51时在Device栏搜索AT89C52、STC89C52RC等型号STC的型号需要从STC官网另装对应的Pack或者用通用8051型号代替。STM32的话在Device栏搜索STM32F103C8等选对应型号即可。两个工具链共用同一个uVision界面工程文件都是.uvprojx后缀但工程内引用的工具链会根据所选设备自动切换。有个建议给51和STM32分别建两套独立的目录结构比如“D:\Projects\51”和“D:\Projects\ARM”因为两套工程生成的Output、Object、List中间文件如果混在同一个目录偶尔会互相覆盖同名文件。另外在Options for Target的Output标签页里把“Select Folder for Objects”设置到每个工程自己的子目录这样能省掉很多不必要的“文件被占用”的烦恼。4.2 与Proteus联合仿真的设置要点很多学生党喜欢用Proteus做电路仿真那Keil和Proteus联合仿真就是一个绕不开的关卡。先说最简单的方式先用Keil把51或STM32程序编译出HEX文件然后在Proteus里双击芯片在Program File中选择这个HEX文件点运行仿真就能看到效果。这一步的前提是Keil的Options for Target →Output里必须要勾选“Create HEX File”否则编译不会生成HEX。如果你用的是Proteus里的“VSM Studio”直接调用Keil编译器流程会更复杂一些但原理一样Proteus负责画电路Keil负责编译代码中间通过一个仿真通道连接。常见问题是仿真时单步执行很慢、或者一运行就崩溃大概率是仿真时钟和芯片型号参数不匹配在Proteus里把晶振频率、供电电压改成和Keil工程一致即可。还有一个容易犯的错把Debug标签页里的Use设置成Proteus VSM Simulator然后直接用Proteus调试Keil工程这时候绝大多数人都会卡在“Cannot load driver”上。其实这个选项依赖专门的Proteus VSM Driver插件没有装对版本就别折腾先走“生成HEX→Proteus加载”的路线要多稳有多稳。4.3 工程模板、Git管理与汉化细节用好Keil5的另一个关键是从一开始就养成工程模板的习惯。建模板很简单把每个项目的基础配置——芯片型号、编译输出目录、Include路径、下载器设置等——全部配对好保存为模板工程下次新建工程时复制一份改个名字就能用。这能帮你把每次建工程都要花的十分钟省下来。Git管理Keil工程时要注意千万不要把中间文件都提交进去。推荐只提交.uvprojx、.uvoptx、源码、头文件以及必要的链接描述文件像Objects、Listings、DebugConfig这些目录里的内容都应该加到.gitignore里。不然每次编译后都会有大量二进制差异增大了仓库体积还干扰代码审查。关于汉化Keil官方本身没有中文界面网上流传的汉化包多半是替换.exe或.dll文件。这类汉化包的兼容性常常跟不上版本更新而且很容易被报毒。我的建议是尽量用原版英文界面。Keil的菜单也就那么几个用两天就熟了真需要中文帮助的话买本书或者查手册比折腾汉化包靠谱得多。5. 高频问题速查表与个人避坑记录5.1 高频问题速查表把前面提到的和没展开的高频问题整理成一张速查表遇到对应现象直接翻。现象可能原因快速解决新建工程找不到STM32DFP未安装装对应Device Family Pack新建工程找不到51芯片型号C51没装或未激活安装C51工具链并配置License编译报2K/32K超限评估版限制配置正规授权烧录时No Target下载器驱动或连接问题检查驱动、接线、供电Cannot access MemoryFlash算法错误或芯片读保护改Flash Download算法解除保护XTAL变灰调试器接管时钟设置在Debug→Settings里调整时钟左侧工程目录消失窗口被关闭菜单View→Project WindowPack Installer下载慢官方服务器慢手动下载.pack后Import老工程编译报错工具链版本不兼容换用老版本MDK或调整编译器版本打开Keil4工程异常多版本残留或格式不支持清理干净后重装必要时另存为新格式这张表是我多年“攒”出来的排查浓缩版不能说覆盖所有坑但覆盖了日常九成的问题。5.2 这些年我踩过的Keil5的坑最后说几个我自己的踩坑记录希望能帮你绕开。第一件事曾经图省事把一个网盘里打包的“Keil5全家桶”直接解压安装结果装完发现MDK版本是5.24C51是9.54而且两个版本都偏老后来还是花了半小时重装成官网版本。从那以后我学乖了安装包只认官方下载的文件名。第二件事有个同事的工程在编译时总是提示“Browse information of one or more files is not available”排查了很久最后发现是工程路径带了一个中文文件夹名把工程整体移到纯英文路径后问题消失。所以你的用户名和路径如果带中文遇到一些莫名其妙的软件问题优先考虑这个原因。第三件事我自己在给一块板子烧录时反复遇到“Cannot access Memory”试遍了网上说的各种设置和重启最后发现是ST-Link和板子之间的杜邦线太长靠近电机驱动后干扰严重。换了一根短屏蔽线后一次通过。硬件问题经常会让软件参数背锅排查时一定不要只顾着软件设置。还有一条经验Keil5的自动更新提示能关就关。新版发布初期可能不稳定而且Pack和编译器滚动更新后老工程的Warning甚至Error数量都可能发生变化。我一般只在自己明确需要新功能或新芯片支持时才手动升级平时的项目环境保持稳定这比追求最新版省心得多。我个人在实际操作中的体会是Keil5这工具本身不复杂复杂的是它同时挂着两套工具链和一套Pack机制只要理解了结构绝大多数问题都能顺着逻辑推出来。以后再有人问“C51和ARM能装在一起吗”“为什么找不到STM32”你可以直接把这篇扔给他。装完环境只是第一步后面写代码、调板子才是真正花时间的阶段把工具环境稳定住至少能让踩坑的概率少一半。
返回列表