ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Keil5安装教程:C51与MDK共存及STM32开发环境配置指南

Keil5安装教程:C51与MDK共存及STM32开发环境配置指南 做嵌入式开发的人电脑里几乎都装过Keil5。特别是还在学校做课设、或者刚入门单片机的那段时间一台电脑里既想写老一代8051的C51工程又想写STM32的MDK工程这种需求我见得太多。网上关于Keil5的安装教程一抓一大把但大多只讲了“一路Next”没有解释C51和MDK到底是什么关系为什么装到一个目录里就能共用同一个界面以及装完之后遇到“2K限制”“XTAL变灰”“烧录失败”该怎么处理。这篇文章把我实际装机的完整过程、版本选择逻辑、双许可证注册方法以及踩过几次坑之后的排查经验全部写出来。无论是学生党还是刚转嵌入式开发的工程师按这个流程走一遍基本能在一台Windows电脑上把C51和STM32的开发环境一次配好。1. 先搞清楚Keil5、C51、MDK、芯片包到底是怎么协作的1.1 为什么一个IDE能同时写两种完全不同的单片机很多新手第一次接触“Keil5兼容C51和STM32”这个说法时会自然理解成“一个软件能写两种代码”。这个理解方向是对的但背后的机制比想象中要清晰得多。Keil5的完整名字其实是uVision5它本身只是一个集成开发环境外壳负责代码编辑、工程管理、编译输出和调试界面。真正干活的是背后的编译器工具链。C51工程用的是C51编译器包括A51汇编器和BL51/LX51链接器STM32工程用的是ARM编译器老版本是armcc新版本是armclang。这两套编译器互相独立但都能被同一个uVision5外壳调用。这个设计有点像Visual Studio里可以同时安装C和C#的开发组件。你打开的是同一个VS界面但新建项目时选不同的语言模板背后走的是完全不同的编译器。Keil的做法是把C51和MDK-ARM也就是MDK分别安装到同一套目录下uVision5启动时会检测注册表里已经安装的工具链然后把它们的器件数据库合并显示到Device选择窗口里。所以正确理解是你装的是“一个uVision5外壳 C51工具链 ARM工具链”。C51负责8051系列MDK负责所有ARM内核芯片STM32只是其中用得最多的一个分支。1.2 为什么STM32需要额外安装芯片包而C51不需要装完C51和MDK后你会发现在uVision5里新建工程时左边Device列表能直接看到Atmel 89C51、STC89C52之类的8051芯片但STM32那边往往看不到具体型号只有一个空的ARM目录。这就是芯片包Device Family Pack简称DFP的作用。C51工具链自带了一个覆盖面非常全的8051器件数据库常见型号基本都内置了。而MDK从5.0版本开始改变了芯片支持方式不再把芯片信息直接塞进安装包里而是通过Pack Installer下载对应的DFP。每一款芯片的SVD调试描述文件、Flash编程算法、启动文件模板都打包在DFP里。装STM32F1系列要装Keil.STM32F1xx_DFP装STM32F4系列要装Keil.STM32F4xx_DFP不同系列不能互相替代。理解了这层关系后面所有安装步骤就都能串起来了C51和MDK是编译器本体芯片包是芯片的“驱动程序”uVision5是操作界面。三者配合才形成一个完整的开发环境。2. 安装前准备版本选择、下载渠道与卸载旧版2.1 三大组件分别从哪里下载下载这件事看起来简单实际最容易出问题网上搜“Keil5下载”能出来一堆捆绑软件和广告站。我建议认准官方渠道。C51工具链安装包去Keil官网的C51下载页文件名类似c51v960.exe这是目前我见过比较稳定的版本。MDK-ARM安装包官网MDK下载页文件名类似MDK536.EXE对应版本5.36。芯片包有两条路一条是装完MDK后直接在Pack Installer里在线下载另一条是去Keil官网的Device Family Pack页面手动下载.pack文件再离线导入。官网页面加载慢是正常的你只要认准域名是keil.com或者类似www.keil.arm.com的官方地址就行。那些号称“打包好了C51MDK绿色版”的第三方资源我强烈不建议用。你完全不知道里面有没有被塞进奇怪的启动项或者注册表修改出了问题连排查方向都没有。2.2 版本选择建议别再纠结“越新越好”我遇到不少新手一上来就装官网最新版MDK装完发现和网上教程对不上尤其是注册、Pack路径、编译器选项这些地方。原因很简单MDK 5.37之后Keil更改了许可证验证和编辑器结构网上大量教程还是基于5.30到5.36版本写的。我的建议是如果你主要是为了学习、做课程设计、做中小型项目优先选择5.23到5.36之间的版本。我自己现在一直在用5.36这个版本同时保留老式经典界面对ARM Compiler 5的支持也完整网上问题解决方案最多特别适合新手。如果你需要用到最新的AC6编译优化或者新芯片支持可以后续再升级不要一上来就追新。2.3 旧版本残留导致的安装失败如果你电脑上已经装了旧版Keil想重装或者升级我强烈建议先卸载干净再装。很多安装失败的“玄学”问题源头都是旧版本残留。卸载时不要只删安装目录那样注册表里还留着大量指向旧路径的记录。正确做法是在Windows的“应用和功能”里找到Keil uVision相关的条目正常卸载然后手动清理C:\Keil_v5或者你自定义的安装目录的剩余文件夹再检查注册表里还有没有Keil相关的键值。我一般会使用注册表清理工具扫一遍但如果你不太熟悉注册表操作最稳妥的办法是把Keil相关目录整个重命名备份后用系统自带的卸载入口重装。有一点特别提醒安装路径中间不要带中文和空格比如D:\开发工具\Keil_v5这种路径后期编译某些旧工程时可能会因为路径编码问题报出匪夷所思的错误。3. 完整安装流程让C51和MDK在同一目录下共存3.1 先装C51规划好统一目录很关键先装C51还是先装MDK没有严格的先后要求但我的习惯是先装C51再装MDK顺序不容易混淆。安装包双击后一路点Next到选择安装路径这一步时特别注意。默认路径通常是C:\Keil_v5如果你没有特殊需求我建议就用这个默认路径。这里有两个原因第一后续MDK也装到C:\Keil_v5这样C51编译器和ARM编译器会分别落在C:\Keil_v5\C51和C:\Keil_v5\ARM两个子目录共用同一个UV4工作台第二很多国产芯片工具比如STC-ISP的“添加型号到Keil”功能默认也去C:\Keil_v5下找安装位置路径规整能少很多麻烦。安装完成后你可以打开C:\Keil_v5看一眼目录结构应该能看到C51、UV4等文件夹。C51安装包本身不包含ARM编译器所以这个时候打开uVision只能建8051工程。3.2 再装MDK同一个父目录不要另外建文件夹MDK安装包双击后同样是熟悉的安装向导。到选择安装路径这一步时务必把它指向上一步C51安装的同一个位置也就是C:\Keil_v5不要自作聪明改成C:\Keil_v5\ARM之类的子路径更不要再新建一个C:\Keil_MDK。装好之后C:\Keil_v5下面会出现ARM、Packs、UV4等目录。ARM目录里放着ARMCC和ARMCLANG编译器UV4里是主界面程序。这时候你打开uVision理论上已经同时具备C51编译器、ARM编译器以及C51的8051器件数据库。在设备选择界面里左侧已经能同时看到8051系列和ARM系列。这时候STM32的芯片还没有显示因为需要下一步安装芯片包。3.3 关于“两个软件装到同一个目录”的底层逻辑很多人第一次听到“把两个安装包装到同一个目录”会觉得不靠谱担心文件互相覆盖。我第一次接触时也有这个疑虑后来理清了目录结构才明白C51和MDK虽然共用C:\Keil_v5但子目录完全是分开的C51目录只放8051的编译器、库和头文件ARM目录只放ARM的编译器UV4目录是公共的IDE程序。也就是说两个工具链根本没有文件冲突只是共用了一个“门面”。如果你把C51和MDK装到了不同目录比如一个在C:\Keil_v5一个在D:\Keil_MDK通常会出问题后安装的那个uVision版本会覆盖系统默认关联启动时可能找不到另一个编译器路径导致Device列表变成只有C51或者只有ARM。所以统一目录不是强迫症是稳定共存的基础。4. 芯片包安装与双License注册让工具链“解锁”完整能力4.1 在线安装STM32芯片包第一次打开装好MDK的uVision5后建议先点工具栏上的“Pack Installer”按钮它通常和“Project”菜单里的“Manage”下入口是同一个东西。左侧面板选择“Packs”选项卡展开“Keel”厂商实际列表里就叫Keel展开后能看到各个厂商的Device Family Packs找到STM32F1xx_DFP、STM32F4xx_DFP这类条目点击Install。这里要注意STM32F1F103系列、STM32F4F407系列等之间的DFP是分开的。如果你只装F1的包那后面新建工程时选不到F4系列芯片别急着怀疑安装出问题回去把对应系列包装上就行。在线下载速度取决于网络情况有些公司或学校网络下载Pack特别慢甚至一直转圈。这时候可以用离线方式去Keil官网的Device Family Pack下载页手动下载.pack文件然后在Pack Installer窗口左下角选择File - Import选中下载好的.pack文件导入即可。导入完基本立刻就能用。另外Pack文件的默认存放路径在C:\Users\你的用户名\AppData\Local\Arm\Packs如果你把Keil装在C盘加上后续还可能装一堆厂商的Pack这里很容易吃掉好几个G空间。我建议你打开Pack Installer后在窗口底部的“Settings”里把Repository路径改到其他盘比如D:\Keil_Packs避免C盘越来越紧。4.2 用STC-ISP把国产STC单片机加进C51的Device列表C51工具链虽然覆盖了大量8051器件但国内用得特别多的STC系列默认情况下可能不在列表里。这时候用STC官方工具STC-ISP就能把STC单片机集成进Keil。打开STC-ISP软件找到“Keil仿真设置”或“添加型号和头文件到Keil中”这个按钮点击后软件会询问Keil安装目录你选择C:\Keil_v5然后它会自动把STC系列芯片的型号和头文件注册到C51的器件数据库里。完成后再打开uVision5新建C51工程时Device列表就会出现STC MCU Database这一大类。这个操作很多人不知道以至于有人直接在Device里选一个Atmel 89C52硬着头皮写STC的代码虽然不是完全不能用但头文件、寄存器定义和烧录型号对不上容易埋坑。4.3 C51和MDK的许可证是两套需要分别注册安装完C51和MDK后编译小工程没问题但如果你的C51代码超过2KB编译器就会提示“LIMIT 2K CODE”之类的错误然后拒绝继续编译。这就是未注册评估版的限制。STM32那边也有类似License过期报错的情况只不过显示方式不同。注册步骤其实不复杂但很多人卡在“不知道要注册两次”上。打开Keil uVision5选择File - License Management在弹出窗口的底部能看到Computer IDCID那一串编码和当前已安装的License列表。接下来你需要分别获取C51和ARM的许可证密钥。网上能找到对应版本号的注册机运行后注意Target那一栏要切换生成C51许可时Target选C51生成ARM许可时Target选ARM有的注册机里显示为ARM或MDK然后把生成的LIC复制回License Management里的“License ID Code (LIC)”输入框点击Add LIC。注意C51和ARM的License必须都添加只注册其中一个另一个工具链使用时照样受限。添加成功后License Management列表里会同时出现两行记录一行标注C51一行标注ARM。关于注册机的来源和使用我要多说一句。这类工具本质上是商业软件的授权绕过手段网上能找到但质量鱼龙混杂部分还会被杀毒软件报毒甚至木马风险都存在。如果你是在校学生很多高校有正版授权渠道优先用学校提供的许可证。如果你只是业余学习评估版2KB限制对于写一些小练习够用但真要写稍大的项目就建议购买正版。我在这里写注册逻辑只是为了让你理解为什么会有“双License”这个现象实际操作时请务必考虑安全与合规问题。4.4 注册后如何确认状态正常注册完成后建议做一个快速验证。打开License Management看到C51和ARM两行的状态如果是“Permanent”之类说明注册成功。再去编译一个超过2KB的C51测试工程和任意一个STM32工程只要不报许可证相关错误就说明双License已经生效。有些教程会让你去“Tools - Set Initial Folder”之类的菜单那个和注册无关不用管。真正判断标准就是两个工具链都能正常编译。5. 分别新建C51和STM32工程验证环境是否真的配好了5.1 先建一个C51工程确认8051器件可选验证环境最快的方式就是分别新建一个C51和一个STM32的工程哪怕只是空工程。新建C51工程Project - New uVision Project命名后进入Select Device窗口。左侧列表展开Atmel或者其他8051厂商能看到AT89C52、AT89S52这些型号如果之前用STC-ISP添加过还能看到STC89C52RC等国产型号。选中一个型号确定后会弹窗问“Copy Startup Code”复制启动文件选是。然后按F7编译编译输出里能看到C51编译器版本信息说明C51工具链工作正常。这里有个细节启动代码对8051来说可以选“是”也可以选“否”对基础工程没太大影响但建议选是养成统一习惯。5.2 再建一个STM32工程确认DFP芯片包和ARM编译器工作正常新建STM32工程同样Project - New uVision Project这次在Select Device窗口左侧展开STMicroelectronics能看到STM32F1系列、STM32F4系列等选项取决于你装了哪些DFP。以最常见的STM32F103C8为例一路展开到对应型号选中后确定Keil会提示是否添加启动文件这里一定要选“是”。启动文件对于STM32很重要它负责初始化堆栈和中断向量表没有它程序根本跑不起来。选完后工程里会多一个.BAT或者汇编启动文件具体名称取决于芯片系列。写一个最简单的main函数直接点编译。如果编译顺利输出窗口不会有报错信息说明ARM工具链和STM32芯片包都已经正常工作了。5.3 注意工具栏上编译按钮的变化细心的读者会发现打开C51工程和打开STM32工程时uVision工具栏上的编译按钮图标可能略有不同或者至少编译输出窗口里显示的编译器名称不同。这是uVision根据当前工程使用的芯片类型自动切换工具链的表现。我自己在给新手排查问题时经常说一句话“你在工程里点了51芯片就别指望Keil帮你调ARM编译器反之亦然。”如果想切换直接在工程目录里新建对应类型的工程或者修改Device选择而不是到处找按钮切换编译器。6. 常见问题排查与避坑实录6.1 编译提示2K代码限制现象用C51编译稍大一点的程序编译器直接报“LIMIT 2K CODE”工程无法继续。原因C51评估版未注册时代码空间限制为2KB。STM32那边的MDK评估版没有这个代码量限制但有“无法生成超过32KB的镜像”等限制或者试用期到期后无法编译。解决按4.3节的方式注册C51的License注册完成后2K限制自然消失。如果只是为了个人练手而且不想折腾授权也可以考虑开源SDCC做8051开发但那就是另一套环境和生态了。6.2 Device列表看不到STM32任何型号现象装完MDK后新建工程Device列表里STMicroelectronics要么没有要么展开后空白。原因几乎都是因为对应芯片的DFP没有安装。解决打开Pack Installer检查STM32F1xx_DFP、STM32F4xx_DFP等是否显示Installed。没有就在线安装在线失败就手动下载.pack文件再导入。要注意Pack有版本兼容性部分老版本MDK对新版Pack支持不好如果导入新版Pack后Device列表还是空白换个稍旧版本的DFP试试。6.3 Target选项卡里XTAL晶振频率变灰不可改现象在Options for Target - Target选项卡里Xtal这个输入框是灰色的没办法手动改晶振值。原因这个问题的成因比较分散最常遇到的是芯片包或工程文件把该值锁定为默认值。尤其是一些国产兼容芯片使用非官方Pack时器件定义里写死了时钟频率。解决首先确认你在Device里选中的芯片型号是官方Pack支持的比如STM32F103C8而不是某个兼容型号。其次可以直接用文本编辑器打开工程的.uvprojx文件搜索“Xtal”关键字找到类似Xtal8000000/Xtal的字段手动改成你需要的频率然后保存重新打开工程。这个方法绕过了IDE界面的灰色限制实测有效。如果你完全不需要软件仿真Xtal值对实际烧录影响不大真正上板跑时用的是代码里配置的时钟不用太过纠结这个魔改操作了解原理就好。6.4 烧录失败ST-Link识别不到、Flash Download Failed这是我见过最频繁的烧录报错几种情况分开说。第一种编译正常但点Download后提示“No ST-LINK detected”或者“Cannot find Target”。优先确认调试器线有没有插紧注意很多USB线只能充电不能传数据换个线试试。其次确认Options for Target - Debug选项卡里右边的下拉框选的是ST-Link Debugger不是默认的Simulator。第二种提示“Flash Download failed - Cortex-M3”或者“Cortex-M4”之类。这个问题通常是Flash算法没选对。在Debug选项卡里打开“Settings”切到Flash Download页把芯片对应容量的Flash算法添加进去。比如STM32F103C8是64KB Flash算法要选STM32F10x High-density或Med-density那种具体看型号容量。算法不对下载器就算识别到芯片也写不进Flash。第三种能擦除但校验失败大概率是接线太长或电源不稳定导致时序错误。把SWD线缩短或者换成杜邦线加粗问题往往就消失了。6.5 编译报“Undefined symbol”这类链接错误STM32标准库工程的附件里经常报“Undefined symbol SystemInit”或者“Undefined symbol GPIO_Init”之类的错误这多半不是安装问题而是工程缺少必要的源码文件。新建工程时选“是”复制启动文件后还要自己去工程里添加CMSIS和标准库相关文件。你可以用Keil的“Manage Run-Time Environment”图形化添加也可以手动复制库文件到工程目录再在工程里添加。相比之下手动添加虽然繁琐但能让你搞明白工程的组成结构锻炼价值更高。6.6 安装过程中弹出的“Failed to load driver”或“TOOLS.INI”报错这种情况多见于电脑上曾经装过其他版本的Keil卸载不干净。安装完成后首次启动uVision如果提示无法加载某个驱动或找不到TOOLS.INI建议把Keil彻底卸载清理注册表残留再重新安装。有条件的话换一台干净的机器或者新建一个Windows账户来装也可以快速避开这类问题。补充一句安装任何版本前都关闭杀毒软件和防火墙不是因为这些软件都是病毒而是杀软拦截注册表写入和文件覆盖确实会引发一些奇怪问题。装完确认无误后再开启防护。7. 环境配好之后下一步可以怎么走Keil5装好并成功跑通C51和STM32两个工程之后你的嵌入式开发环境搭建就算毕业了。这时候我建议不要急着去下载一大堆教程而是先整理一个自己的工程模板。C51的用AT89C52或者STC89C52STM32的用STM32F103C8都配好启动文件、工程选项和烧录配置复制一份备用。以后做项目直接在这个模板上改逻辑省去每次从头配置的时间。从Keil5再往下走还有几条常见路线可以看自己兴趣选。想深入理解单片机底层可以研究C51架构里boot和app的中断跳转处理做串口IAP升级这个方向的热度一直很高。想走现代嵌入式方向可以把STM32的内存管理、OTA升级流程和常用协议栈摸熟然后转向嵌入式Linux开发或者用VSCode配合交叉编译工具链替代Keil做日常编码。Keil5在这里只是一个入口真正的成长在于怎么用这套工具把想法变成能跑起来的固件。我个人在实际使用中有两个小习惯顺便分享出来。一是每次装完环境都会把Pack Installer里Repository路径改到非系统盘C盘真的会莫名其妙的满二是把C51和MDK的License Management页面截个图存起来等过期了或者换电脑时照着截图重新注册一遍省得再回忆Target到底该选C51还是ARM。这些小习惯看着不起眼等你用久了就知道能省多少折腾的时间了。
返回列表