ARTICLE DETAIL

资讯详情

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

Keil5 C51与MDK-ARM双环境安装指南:51与STM32共存配置

Keil5 C51与MDK-ARM双环境安装指南:51与STM32共存配置 做嵌入式开发的估计都遇到过这么一幕搜“Keil5安装教程”跳出来一堆五花八门的帖子跟着教程装完之后能建51单片机8051内核的工程却找不到STM32Cortex-M内核的芯片或者反过来装了MDK-ARM版本打开以前的51工程直接提示找不到编译器。这其实是Keil5这个IDE最典型的“坑”——我们嘴上说的“Keil5”根本不是同一个软件它至少包含C51版和MDK-ARM版两条产品线编译器、芯片库、授权License全是独立的所以“装一次就万事大吉”这种想法从一开始就不成立。这篇博文我就把Keil5的C51与STM32双环境安装彻底讲清楚不绕弯子直接从安装包选择、目录规划、注册授权、下载器驱动配置到装完必踩的几个高频问题一次说透。适合刚入门单片机开发、准备从51转入STM32、或者系统重装后要重建开发环境的同学。只要你跟着操作把环境配好后面无论是跑点灯实验还是做温湿度计、数字电源、鱼缸控制这类项目都不会再被IDE问题卡脖子。1. 先搞清楚Keil5的两个“马甲”1.1 C51和MDK-ARM到底差在哪Keil5这个称呼本身就有历史包袱。Keil公司早期是做8051单片机开发工具的后来被ARM收购之后产品线被拆成两条一条叫Keil C51专门服务8051内核的单片机比如经典的STC89C52、AT89C51、N76E003这些另一条叫MDK-ARMMicrocontroller Development Kit for ARM专门服务ARM内核的芯片比如STM32全系列、GD32、NXP的LPC系列等。两个产品共用一个外壳界面就是我们看到的µVision5但内里完全是两套东西。C51用的编译器是C51编译器加A51汇编器链接器是BL51/LX51MDK-ARM用的则是ArmCCAC5或ArmClangAC6编译器链接器也完全不同。换句话说51的工程文件里的启动代码、寄存器定义、中断向量写法和STM32工程完全是两个世界编译器必须分家。这就好比你手机里装的微信和支付宝它们都叫“应用”都能扫码付款但底层账号体系、支付通道、依赖库全是分开的。Keil5的C51和MDK-ARM也是这个关系——界面长得一样干活的全是独立员工。1.2 为什么需要“装两个”装一个不行吗这个问题的答案取决于你做什么。如果你这辈子只写51单片机那装C51版一个就够如果你只做STM32那装MDK-ARM版一个就够。但绝大多数初学者和高校实验室的路径都是先学51、再转STM32这样一台电脑就必须同时支持两套工具链。偏偏Keil的授权机制规定一个License只能用于一条产品线。C51版的评估License和MDK-ARM版的评估License互不通用你花真金白银买的授权也是分开计价的。所以网上常有人问“为什么我激活了MDKC51还是2K限制”原因就在这——两套授权是独立结算的别指望一份授权通吃。两个版本可以共存但有个大前提不能安装在同一个目录。因为两个安装包都是µVision壳都要往TOOLS.INI文件里写编译器路径如果目录相同后安装的那个会把前一个的工具链路径覆盖掉结果就是Keil启动后找不到其中一种编译器工程一编译就报错。1.3 先装谁、装到哪顺序很关键结合我自己的经验和帮实验室新同学排查环境的经历安装顺序建议是先装C51再装MDK-ARM。理由是MDK安装时能检测到已有的C51工具链自动把两条编译器路径都登记进µVision的配置里。如果你已经先装了MDK-ARM也别慌后面再装C51版装完打开µVision如果新建工程时找不到51系列芯片可以手动去Project - Manage - Project Items - Folders/Extensions里把C51的编译器目录添加进来具体方法在后面第5章会说这里先记住“能修不用重装系统”。目录规划上我强烈建议两个版本分开装比如C51版装到D:\Keil_C51MDK-ARM版装到D:\Keil_MDK不要图省事全默认扔C盘。一个是C盘空间占用大另一个是Win10/Win11的UAC权限偶尔会抽风导致Keil写某些文件失败。更重要的是整个安装路径不能有中文、不能有空格否则后期配合STM32CubeMX、烧录工具、脚本编译的时候会出现各种莫名其妙的问题。2. 安装前需要准备的工具与安装包2.1 安装包清单四样东西一个都不能少把安装过程需要的文件全部列出来你可以照着准备Keil C51安装包常见版本V9.60、V9.61文件名类似C51V960.exe。Keil MDK-ARM安装包常见版本MDK5.36、MDK5.38、MDK5.39文件名类似MDK538.exe。STM32芯片支持包也就是DFPDevice Family Pack比如Keil.STM32F1xx_DFP.2.4.1.pack、Keil.STM32F4xx_DFP.2.17.1.pack这类后缀是.pack用来让MDK认识具体型号的寄存器、Flash算法、启动文件。USB转串口驱动CH340、CP2102等这是给51单片机下载程序用的因为STC系和很多国产51都走串口下载。ST-Link驱动部分MDK版本安装时自带但有些开发板插上后设备管理器还是黄色感叹号需要额外装一次驱动。最后建议再装一个STM32CubeProgrammer官方免费软件。平时Keil烧录不依赖它但遇到芯片锁死、读保护、SWD连不上的情况这个工具能一键全片擦除救回来属于“平时用不上、用上救大命”的工具。2.2 版本选择C51 9.60和MDK 5.38怎么选先说C51版。C51工具链已经非常成熟最近几年版本号基本停在9.60、9.61功能上没有本质区别选新一点的9.61问题不大。MDK-ARM的版本选择要稍微讲究一点。从MDK 5.37开始Keil默认只装Arm Compiler 6AC6把老的Arm Compiler 5AC5从默认安装里移除了。AC6对C标准的支持更严格很多用标准外设库或者老寄存器工程的代码在AC6下会报出一大堆警告甚至错误对新手特别不友好。所以我的建议是新手或者要打开别人的旧工程的话选MDK 5.36或5.38比较稳妥装完后再单独补装一个AC5编译器工程编译选项里就能在AC5和AC6之间切换。不要盲目追求最新的MDK 5.39新版本往往意味着pack库兼容性调整旧工程很可能编译不过。2.3 安装目录规划别让系统盘和杀毒软件坏事安装前还有几个提醒。一个是要临时关闭杀毒软件包括360、电脑管家、Windows Defender。Keil装的时候要写注册表、安装USB驱动、生成license相关文件杀毒软件经常把驱动DLL或者注册工具当病毒删掉删完之后你编译、烧录全都会出问题而且很难排查。另一个是尽量以管理员身份运行安装程序。右键点安装包选“以管理员身份运行”让程序有权限往Program Files、系统驱动目录里写文件。否则有些环境变量和驱动装不进去Keil能打开但烧录时总报找不到设备很恶心。再就是路径别带中文。我知道很多人习惯建一个“软件安装”文件夹但Keil这个老古董对中文路径的支持一直不怎么样哪怕现在勉强能编译也要考虑以后导入STM32CubeMX生成的工程、调用命令行工具时会不会踩雷。建议全英文绝对路径一劳永逸。3. 一步步装好C51与MDK双环境3.1 安装C51版包含51单片机的编译工具先把C51安装包准备好双击C51V960.exe。我建议路径直接改成D:\Keil_C51注意目录名别带空格。安装过程就是一直Next中间的组件选项保持默认就行不需要手动勾选什么。装完之后第一次打开µVision5菜单栏会看到Pack Installer图标。C51版对51芯片的支持不是靠额外装pack而是内置了大量8051厂商的设备数据所以在新建工程时Device窗口里能直接看到Atmel、Intel、NXP这些传统51厂商。如果你用的是国产STC系列单片机还有一个额外步骤去STC官网下载STC-ISP软件。这个软件不仅是下载工具里面还有一个“添加STC设备到Keil”的功能点了之后会自动往Keil的数据库里注入STC的芯片型号。有了它新建工程时才能直接选STC89C52RC、STC12C5A60S2这些型号否则即使装了Keil也找不到STC的设备选项。3.2 安装MDK-ARM版接下来装MDK-ARM双击MDK538.exe安装路径建议D:\Keil_MDK。安装过程中会弹窗询问是否安装ST-Link驱动、J-Link驱动、ULINK驱动这些建议全部勾选。虽然有些驱动你暂时用不上但装了的坏处只是多占几十MB空间万一以后换开发板就不用再折腾驱动了。装完之后打开µVision此时新建工程时Device列表里只能看到ARM系列芯片的通用列表具体到STM32F103C8这种型号还搜不到。原因很简单——MDK本体只是提供一个空壳它不认识任何具体芯片必须靠后面要说的“芯片支持包”来认识。3.3 通过Pack Installer安装STM32芯片支持包这一步是STM32环境能否正常工作的关键。打开Pack Installer在Pack选项卡左侧找到STMicroelectronics这个Provider展开后会看到STM32F0、STM32F1、STM32F4、STM32H7等不同系列的Device Family Pack勾选你需要的系列点Install就行。如果你在公司或者校园网环境在线下载可能很慢甚至断连。这种情况建议直接去Keil官网的Pack下载页面或者ST官网找到对应系列的.pack文件离线下载然后直接双击这个.pack文件Pack Installer会自动解析并导入省去在线安装的等待时间。这里特别提醒STM32F1和STM32F4是两套独立的pack不是装了一个就能通吃所有STM32。建议你按手里的开发板型号选择别一口气把M0到H7全装了没必要而且pack之间偶尔还有依赖关系装太多反而容易冲突。3.4 两个环境的注册与授权CID与License的关系这是新手最容易困惑的一个环节。打开File - License Management你会看到“Computer IDCID”一栏这是一串跟当前电脑绑定的唯一标识。License本质上是一段基于CID生成的加密字符串Keil启动时拿它校验当前机器有没有对应产品的授权。C51评估版限制代码大小2KB超过就报错MDK评估版限制32KB所以网上才会流传“2K限制怎么解除”这种问题。解除方式只有一个获得合法License。操作流程是复制CID把这个CID交给授权工具生成对应的License字符串粘贴回去点Add License就完成激活。需要特别强调的是Keil的授权是按产品线分开的。C51的License和MDK-ARM的License不能混用哪怕你是正版用户只买了MDK授权C51一样是2KB限制。网上确实有很多“注册机”之类的工具原理就是离线生成CID对应的授权串但正规商业项目强烈建议支持正版避免版权风险。学习评估阶段官方评估授权配合小规模实验代码其实能应付大部分作业和毕设了。4. 下载器驱动与基本配置4.1 ST-Link驱动安装与Keil下载配置STM32开发板最常用的下载方案是ST-Link不管是板载还是独立的小盒子插上USB后打开设备管理器应该能看到“STM32 STLink”设备。如果设备管理器里是黄色感叹号或者未知设备说明驱动没装上。这时候去ST官网下载ST-Link驱动或者装一个STM32CubeProgrammer安装时勾选驱动组件基本就能解决。驱动识别正常以后在Keil里配置下载Options for Target - Debug右侧下拉选“ST-Link Debugger”点旁边的Settings如果配置正确SW Device区域能看到你目标板的芯片ID。接着切到Utilities选项卡选“Use Debug Driver”再点SettingsFlash Download里勾选“Reset and Run”。这个勾选很关键不勾的话程序能下载进去但下载完不会自动复位运行很多新手以为程序没烧进去其实只是没跑起来。4.2 51单片机通过STC-ISP串口下载程序51单片机主流下载方式不是SWD也不是J-Link而是串口。现在大多数51开发板都板载CH340或CP2102芯片用USB线连电脑先装好对应的串口驱动设备管理器里能看到COM口编号。在Keil里写好程序后先勾选Output选项卡里的“Create HEX File”重新编译会生成一个.hex文件这个文件就是单片机要烧录的机器码。然后打开STC-ISP软件选择芯片型号比如STC89C52RC选择串口号和波特率导入HEX文件点“下载/编程”这时需要给开发板重新上电冷启动。STC下载器的一大特点就是必须“先点下载、再上电”经常有人忘了这一下点击下载后一直卡住其实就是上电时序没对上。4.3 首次建工程验证环境是否装通环境装完、驱动配好先别急着写业务逻辑我建议立刻建两个测试工程一个51点灯、一个STM32点灯。这两个工程不用写复杂代码点灯的完整流程能跑通就说明安装环境、编译器路径、pack、下载器、调试器全链路OK。51的测试工程新建工程Device里选AT89C52或者STC89C52RC写一个P1口的流水灯勾选Create HEX File编译用STC-ISP下载。STM32的测试工程新建工程Device里选STM32F103C8如果是纯寄存器代码就自己写启动文件如果不想折腾可以用STM32CubeMX先生成工程然后打开编译ST-Link下载。这两个工程跑通之后你才算真正把Keil5的双环境彻底征服了。以后重装系统、换电脑直接把这份流程复制一遍20分钟恢复全部开发环境。5. 安装与使用中的高频问题排查5.1 Target选项卡里XTAL是灰色的怎么办很多人在Options for Target - Target页面发现“XTALMHz”这个晶振输入框是灰色的改不了就开始怀疑是不是安装有问题。其实这个字段的意思是“当前芯片的默认外部晶振频率”它来自Device数据库里的默认配置。如果你在Device窗口没有选择具体的芯片型号或者选择了“Generic”这种通用条目Keil不知道该给你默认多少晶振就把输入框锁死了。解决办法也很直接回到Device窗口重新选择具体的STM32型号比如STM32F103C8再回到Target页XTAL就能编辑了。如果列表里找不到你的型号说明对应的pack没装或者没生效重新装一遍pack再打开工程就好了。5.2 代码补全Text Completion不出提示代码补全不工作这个问题装了双版本之后尤其常见。首先要确认Edit - Configuration - Text Completion里的“Symbols after 2 Characters”这类选项是勾选状态很多人新装完Keil默认配置没打开补全。如果勾选没问题补全还是不出多半是编译器路径没有正确配对导致µVision的代码解析器不知道当前用的是什么工具链语法分析整个罢工代码标签自然建立不起来。这时候去Project - Manage - Project Items - Folders/Extensions检查当前默认语言是否和工程匹配必要的时候把C51和ARM的工具链路径都添加进去。实在不行还有一个屡试不爽的土办法完全关闭Keil把工程目录下的.scvd、.uvguix等临时文件删掉重新打开工程让IDE重新索引一遍。这个方法我帮实验室同学修过很多次基本都能救回来。5.3 C51的2K代码限制怎么解除C51评估版的2KB代码大小限制是新手最常见的坎。你写个小灯实验没问题但稍微上点规模比如加点按键扫描、数码管显示、逻辑复杂一点编译就会报错提示超过LIMIT 0200H。这个问题不是bug是授权等级决定的。解除只有一条路拿到有效的C51 License。前文说过CID和License的关系你复制CID生成了对应授权后代码大小限制就会消失。如果只是学校作业老实说2KB对很多演示类项目够用如果你想完整做一个串口升级、boot和app分区这种有架构的处理2KB绝对不够该激活就激活。5.4 烧录失败的常见原因与处理思路烧录失败是另一个高发问题。我把典型错误现象和排查方向整理成一个表方便你对照错误现象可能原因处理办法No ST-Link detectedUSB线是充电线、驱动没装好换数据线重装ST-Link驱动Error: Flash Download failed芯片型号选错、Flash算法缺失在Utilities-Settings的Flash Download里添加对应算法Cannot Access TargetSWD线序接错、BOOT0被拉高、芯片读保护检查接线BOOT0接GND用STM32CubeProgrammer全片擦除STC下载卡在“正在检测单片机”串口号选错、波特率太高、没有冷启动重新拔插USB选对COM口降低波特率先点下载再上电这些错误有相当一部分不是代码问题而是环境配置问题。养成习惯烧录失败先看设备管理器、再看Keil的Utilities配置、最后才怀疑代码能省下大量排查时间。5.5 中文路径、注册表残留等环境问题最后说一个最容易被人忽略的环境问题路径和系统残留。Keil老用户都知道工程路径和安装路径带中文就是给自己埋雷。很多时候编译能过但烧录工具、外部脚本调用时碰到中文路径就会挂得莫名其妙。尤其你现在装了C51和MDK两个版本路径复杂程度更高请务必把“全英文路径”当成铁律。另外如果你之前装过旧版Keil比如Keil4或者老版Keil5没卸载干净就装新版有可能出现打不开、License失效、找不到编译器这类怪问题。建议控制面板卸载后手动删除残留安装目录、AppData\Roaming\Keil清理注册表里HKEY_LOCAL_MACHINE\SOFTWARE\Keil相关的旧键值然后再重装。最后分享一个我自己的习惯装完这套双环境后第一件事不是写业务代码而是建一个专门的“体检工程”包含一个51点灯、一个STM32点灯编译下载全跑通。之后每次重装系统、换电脑我都把这份模板工程直接复制过去验证环境。好处很明显——出问题时你能快速判断是环境坏了还是代码问题而不是被各种教程和僵尸版本带着在整个系统里翻来覆去找不到原因。这个方法帮我避开了很多坑建议你也照做。
返回列表