ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

KEIL5安装C51芯片包与STM32共存完整指南

KEIL5安装C51芯片包与STM32共存完整指南 做单片机开发这些年有一款软件几乎绕不开就是 Keil µVision5 里的 C51 工具链。很多新手拿到开发板第一件事就是装 KEIL5结果一搜教程要么是旧版本界面对不上要么只讲了装软件没讲怎么加 C51 芯片包更麻烦的是一台电脑上还要同时兼容 STM32 的 ARM 开发环境。这篇文章我按自己实际踩坑整理过的流程来写目标很明确让你从零开始完整装好 KEIL5 的 C51 环境许可证能正常激活能编译烧录 51 单片机程序再顺手解决 C51 和 STM32 共存的问题。无论你是刚开始学单片机原理课的学生还是工作中从 ARM 转过来调试 51 项目的工程师这套流程都适用。1. 装之前先搞清楚几件事1.1 KEIL5、C51、MDK 到底是什么关系不少新手一上来就被这三个词绕晕。其实 KEIL5 的正式叫法是 Keil µVision5 IDE它是一个集成开发环境外壳。真正干活的是里面的工具链分为两大分支C51 工具链用于 8051 内核的单片机典型芯片有 STC89C52、AT89S52、W78E58 等这是国内单片机课程最常用的一类。MDK-ARM 工具链用于 ARM 内核的芯片比如 STM32 系列、NXP 的 LPC 系列等。所以 KEIL5 本身只是一个壳子装好之后需要往里面添加对应的芯片包和工具链才能真正编译对应单片机。网上常说的“KEIL5 兼容 C51 和 STM32 安装”指的就是在一台电脑上同时装好 C51 和 MDK 两套工具链通过同一个 µVision5 界面来切换使用。这里必须强调一个容易忽略的点装 C51 工具链和装 MDK 工具链安装顺序没有强制先后但如果你之前装过老版本的 Keil C51 V9.x跟新版 µVision5 可能会有兼容问题建议先彻底卸载干净再装。1.2 版本选择不要一上来就追最新KEIL5 的版本号一直在更新目前常见的有 5.38、5.39个别渠道还能找到 5.40 以上。我个人的建议是学习用途选 5.38 或 5.39 即可不要盲目追新。原因有三点太新的版本对老旧 USB 转串口下载器、仿真器的兼容性不一定好尤其是几十块钱的 STC 开发板自带的 USB 转 TTL 芯片驱动在新版本下有时会失效。新版默认的编译器版本可能升级有些旧工程直接打开会提示编译不通过需要额外配置。教材、实验指导书大多基于 5.20-5.38 版本操作界面和菜单位置差别不大但个别选项卡位置变了会误导新手。所以稳定优先版本够用就行。我自己目前主力用的就是 5.38日常工作完全没问题。1.3 安装包和芯片包需要分开准备这是 KEIL5 和早期版本最大的区别。老版本 KEIL4 安装完C51 编译器是内置的直接能用。但 KEIL5 需要额外安装 Device Pack芯片支持包没有对应芯片包你在新建工程时根本看不到 STC89C52 或 STM32F103 这些型号。需要准备的资源清单如下KEIL5 主程序安装包如 C51V9.61 安装包或 MDK5.38 安装包取决于你要先装 C51 还是 MDKC51 芯片支持包一般是 Keil.C51.9.60.x.exe 格式或者直接通过在线包管理器下载如果还要开发 STM32额外准备 Keil.STM32F1xx_DFP 系列芯片包STC 系列单片机需要 STC-ISP 烧录软件从 STC 官网下载即可USB 转串口驱动CH340 或 CP2102看你的开发板用的是哪颗芯片建议把安装包统一放到一个文件夹不要放在桌面上避免路径包含中文或空格。我见过不少同学把安装包放在“新建文件夹”结果 Keil 的包管理器识别路径出错折腾半天。2. 安装实操5分钟装好主程序2.1 安装前的系统准备KEIL5 官方支持 Windows 系统Windows 7 到 Windows 11 都能装。但在动手之前我需要你检查三件事第一关闭杀毒软件和 Windows Defender 实时防护。不是危言耸听Keil 的注册机、破解补丁经常被杀毒软件误删而且安装过程中的一些组件比如 USB 驱动、FlexNet 许可服务也可能被拦截。所以安装期间暂时关闭防护装完再加入白名单。第二确保电脑用户名为英文。如果 Windows 用户名是中文Keil 的默认工作目录会生成中文路径有些老版本的编译器会出现“找不到文件”的诡异问题。解决办法是新建一个英文管理员账户来安装。第三路径不要带空格。Keil 默认安装到C:\Keil_v5这个路径就很合理。千万不要自作主张改成C:\Program Files\Keil_v5带空格的路径在 make 工具解析时容易出错。2.2 主程序安装步骤以 C51 安装包为例双击运行安装程序界面会进入 Keil µVision5 Setup Wizard。这里按照我的操作习惯逐步走点击 Next 进入 License Agreement 界面勾选同意条款继续 Next。接下来会让你选择安装路径默认是C:\Keil_v5直接保留默认即可。然后进入个人信息填写界面这里有个坑First Name、Last Name、Company 这些字段必须全部填写但不能使用中文。随便填一个英文名即可比如 First Name 填 JavaLast Name 填 Dev。关键是不要留空否则安装无法继续。填写完成后点击 Next进入安装过程。等到进度条走完界面会提示 Installation completed。此时先不要勾选Launch Keil µVision5直接点 Finish 结束安装。注意这个安装过程只装了 µVision5 的 IDE 框架还没有 C51 编译器。这是很多新手误以为“装完 Keil5 就能写 51”的原因实际上你还需要安装 C51 芯片包。2.3 添加 C51 芯片包芯片包有两种安装方式。第一种双击前面准备的 C51 芯片包安装包格式类似 Keil.C51.9.60.exe。它会自动检测到已经安装的 Keil µVision5 目录然后提示 Install一路默认即可。安装完成后芯片包会自动解压到 Keil 安装目录下的相关文件夹。第二种通过 Keil 自带的 Pack Installer 在线安装。打开 µVision5点击工具栏上的 Pack Installer 图标一个绿色小盒子形状在打开的窗口中搜索 C51在 Keil::C51 那一项点击 Install。不过在线方式需要网络顺畅有时候服务器连接慢所以我不太推荐在首次安装时使用还是离线包更稳。装完芯片包之后可以用一个简单办法验证是否成功打开 Keil点击 Project - New Project在弹出的芯片选择窗口中左侧列表如果能看到 Aicent、Atmel、STC 等厂商的 8051 芯片型号说明芯片包安装成功。3. 许可证激活这一步绕不开3.1 为什么必须激活如果你不激活 Keil直接新建工程编译编译到一半会弹出一个对话框告诉你代码大小限制在 2K 或者 4K超过部分无法生成目标文件。C51 评估版限制是 2K 代码MDK 评估版限制是 32K。对于学习用的流水灯、按键扫描这类小程序2K 勉强够用。但一旦你开始写 1602 液晶驱动、DS18B20 温度传感器这类较大程序2K 瞬间就爆了。所以这个许可证激活就是绕不开的坎。很多人一听到激活就想到网上流传的破解补丁、注册机这里我先说一句实在话现在 Keil 官方对个人用户其实已经比较友好了它的评估模式虽然限制代码大小但足够入门学习而且很多高校实验室是购买了正版 License 的在校学生完全可以去学校实验室借用序列号。如果你确实需要长期做项目还是建议走正规渠道申请许可证或购买授权稳定性和安全性都有保障。不要随便下载来路不明的破解补丁容易中招木马到时候代码被盗、电脑被控哭都来不及。3.2 官方评估模式激活流程Keil 官方提供了一种评估版 License有效期一般是 30 天但到期后可以重新申请。流程如下打开 Keil µVision5点击 File - License Management打开许可证管理器。在 License Management 界面先复制你的电脑 CID 码Computer ID这串字符是安装环境生成的唯一标识。然后打开浏览器访问 Keil 官方网站的 License 申请页面按提示填写邮箱和 CID选择 Product 为 C51。官方会往邮箱发送一封包含 License ID 的邮件把邮件里的许可证号复制回 License Management 界面的 New License ID Code 输入框中点击 Add LIC。添加成功后下方的 Product 栏会显示 C51 的授权信息Single-User License 表示单用户授权此时再编译 51 程序代码大小限制就不存在了。这里要提醒一下每次重装电脑或更换硬件后CID 会变原来申请的 License ID 就失效了需要重新申请。3.3 关于网上各种“激活工具”的告诫网上大量教程会让你下载一个叫 Cracker 的工具生成一个 License ID 填入 Keil 来实现破解。我理解很多学生手里确实没有预算但这种做法有几个实际风险一是安全问题这些工具大多来历不明经常被杀毒软件报毒有些是被二次打包过的木马版本。二是稳定性问题破解版的 License 本质上只是绕过校验某些编译优化选项、调试功能会莫名其妙地失效。三是版权风险这不用多说。所以我这篇文章特意不贴那些工具的下载地址和操作步骤。如果你只是上课做实验评估模式完全够用如果你要参加竞赛、做毕业设计就老老实实向学校实验室申请正版授权。我身边好几个做嵌入式的朋友都是从“破解”开始入门的但工作之后无一例外都转正版了原因很简单公司不允许用盗版而且正版支持的文档、升级通道都是破解版享受不到的。3.4 同时激活 C51 和 ARM 的注意事项网上有个热搜词是“Keil license如何兼容arm和c51”。这里我说明白License Management 界面里New License ID Code 默认是加在 Current License 上的。如果你先加了 C51 授权又加 ARM 授权需要确认产品列表里是否分别存在两条记录。实操中C51 的 License ID Code 和 MDK 的 License ID Code 是两套互不影响。但如果两条授权都指向同一个 CID在 License Management 里会显示 C51 和 MDK 两行这是正常的。如果你的 License Management 界面里Product 列只显示 C51 而看不到 MDK说明你还没装 MDK 工具链或者 MDK 安装时没有被识别到。解决方法是先确认 MDK 主程序已安装再看 Pack Installer 中 MDK 的版本信息是否正常显示。4. C51 和 STM32 共存一台电脑两套工具链4.1 共存的核心思路老版本的 Keil 里C51 和 MDK 的安装目录是分开的两个版本的 µVision IDE 不能同时打开。到了 KEIL5 时代官方统一了 IDE 框架C51 和 MDK 共用同一个 µVision5 壳子工具链通过 DLL 文件共存。具体来说C51 安装包会把C51.dll这类编译器驱动放到 Keil 安装目录MDK 安装包会把ARMCC.dll或ARMCLANG.dll放到同样目录。µVision5 启动时会根据当前打开工程的芯片类型自动选择对应编译器。所以共存的核心就一句话先安装一个 µVision5 框架然后分别安装 C51 芯片包和 MDK 芯片包再确保两个工具链的 DLL 都在安装目录下。4.2 共存安装的最佳顺序根据我一台电脑装了三年的经验推荐的安装顺序是先安装 MDK-ARM 版本的主程序比如 MDK5.38安装完成后不要打开继续安装 C51 芯片包。然后安装 STM32 芯片包Keil.STM32F1xx_DFP 或 F4、F7 系列包最后打开 µVision5 验证。为什么推荐先 MDK 后 C51因为 MDK 安装包本身就能把 µVision5 IDE 框架装好C51 芯片包则是基于这个框架追加编译器驱动。如果你先装 C51再装 MDKMDK 安装程序会自动检测到已有框架但有时会出现 ARMLMD_LICENSE 文件被覆盖的问题导致 ARM 调试器和许可证校验异常。当然先 C51 后 MDK 也能共存只是踩坑概率大一点。我最终选择 MDK 优先的另一个原因是工作场景里 STM32 项目占多数C51 主要用于给学生调试课程设计所以从 ARM 到 C51 的流程我更熟悉。4.3 共存安装后的验证方法安装完成后做两步验证。第一步新建一个 C51 工程。在 Project - New Project 里选择 Atmel 下的 AT89C52如果能正常创建工程并且编译时提示用到 C51 Compiler说明 C51 工具链正常。第二步新建一个 STM32 工程。选 STMicroelectronics 下的 STM32F103C8点 OK 后会弹出一个 Manage Run-Time Environment 窗口直接点 OK 忽略。然后添加一个 main.c写一个最简单的空函数编译如果没有提示找不到编译器说明 ARM 工具链也正常。如果选择芯片型号时左边的列表里找不到对应厂商多半是芯片包没装好。这时候可以打开 Pack Installer在 Installed 标签页确认 C51 和 STM32 对应的 Pack 是否显示绿色勾。显示绿色对勾说明已安装显示黄色感叹号说明版本兼容有问题显示红色叉号说明安装失败需要重装。5. 实战从新建工程到烧录 51 程序5.1 新建 C51 工程的分步演示这一步我用 STC89C52RC 这颗经典芯片演示原因是绝大多数学生的开发板都是这颗芯片对应的头文件是 reg52.h教材里也常见。打开 µVision5点击菜单栏的 Project - New µVision Project。选择工程保存路径和文件名比如D:\51_Project\LED_Test注意路径不能有中文和空格。接下来在弹出的 Device 选择窗口中找到 STC 厂商。如果你只安装了 Keil 官方 C51 芯片包这里可能看不到 STC 系列因为 STC 的芯片支持包不在 Keil 官方默认包里需要从 STC 官网下载额外添加。解决方法是在芯片选择窗口里选择 Atmel 下的 AT89C52 作为替代型号。这颗芯片的内核和 STC89C52 基本一致头文件用到 reg52.h 时完全兼容。这一招是我当年从学长那里学来的简单有效不用额外装 STC 的库。选好芯片后系统会提示 Copy Standard 8051 Startup Code 是否加入启动文件。如果不清楚干什么用直接点 Yes。这个启动文件会往工程里添加一段 STARTUP.A51主要作用是初始化堆栈指针和清零内部数据区对新手来说加上它没有坏处。接下来在工程管理器中右键 Source Group 1选择 Add New Item to Group选择 C File文件名填 main然后点 Add。这样一个 C51 工程就搭建好了。5.2 最小代码示例和编译参数设置在 main.c 里输入以下代码#include reg52.h sbit LED P1^0; void delay(void) { unsigned int i; for (i 0; i 30000; i); } void main(void) { while (1) { LED 0; delay(); LED 1; delay(); } }这段代码实现了 P1.0 引脚控制的 LED 闪烁。输入完成后点击工具栏上的魔法棒图标Options for Target在 Target 选项卡里确认 Xtal(MHz) 填写的是 11.0592STC89C52 常见晶振频率 11.0592MHz 或 12MHz按实际开发板填写。要注意的是网上不少人反馈 Target 选项卡里 Xtal 是灰色的无法修改。这是因为 Keil 的 Target 界面里“Use On-Chip ROM”或者某些调试选项处于锁定状态导出原因是在 Debug 设置里选择了 Simulator 而不是 ULINK或者工程类型被误认成了受保护格式。解决方法是在 Debug 选项卡里把 Use Simulator 切换成 Use ULINK2/3 或者不选择任何调试器然后回到 Target 选项卡Xtal 就可以正常修改了。编译前还要确认 Output 选项卡里勾选了 Create HEX File这一步特别关键。如果没勾选编译生成的只有 AXF 文件烧录工具根本识别不了。勾选后点击工具栏的 Rebuild 按钮1 号图标编译输出窗口会显示Build target Target 1 linking... Program Size: data9.0 xdata0 code48 creating hex file from .\Objects\LED_Test...看到creating hex file这一行说明十六进制文件生成成功路径在工程目录下的 Objects 文件夹里。5.3 使用 STC-ISP 完成烧录51 烧录不能直接用 Keil 里的下载按钮。Keil 的 Download 功能主要配合 J-Link、ULink 这类仿真器而大多数学生开发板用的是 USB 转串口芯片加冷启动方式烧录所以烧录工作要交给 STC-ISP 软件完成。下载并安装 STC-ISPSTC 官网提供最新版通常叫 STC-ISP V6.9x打开后做四步设置第一步选择单片机型号为 STC89C52RC不要选错了。第二步点击 打开程序文件选择刚才生成的 HEX 文件路径是D:\51_Project\LED_Test\Objects\LED_Test.hex。第三步选择串口号。先插上开发板的 USB 线到设备管理器里看一下当前是 COM 几。如果你装的是 CH340 驱动会显示 USB-SERIAL CH340 (COM3) 这样的名称。第四步点击 Download/Program 按钮此时软件对话框会提示 正在检测目标单片机。这时候需要给开发板重新上电也就是把开发板电源断开再接通利用冷启动让单片机进入 ISP 下载模式。看到烧录进度条走完界面提示操作成功开发板上的 LED 就会开始闪烁。整个过程第一次操作的话大概需要三分钟熟练之后一分钟就能完成一次烧录。5.4 编译报错的常见情况与修复我这里把 C51 编译最常见的两种报错写一下。第一种*** ERROR C265: SYNTAX: expected a ]。这一般是数组定义时中括号写法问题或者引用了未定义的头文件导致解析错乱重点检查主文件里是不是漏了分号。第二种*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS。这个不是致命错误只是提示某个函数没有被调用不影响生成 hex可以忽略。还有*** ERROR C202: xxx: undefined identifier通常是变量或函数名拼写不一致比如你在文件开头定义了LED后面写成了LedC51 是大小写敏感语言这种笔误会直接报错。6. 安装和使用中常见问题速查6.1 芯片包明明装了但新建工程选不到型号这个问题几乎每周都有人问我。现象是在 Project - New Project 里看不到对应的芯片比如装了 STM32F1xx 芯片包新建工程时选不到 STM32F103C8。排查顺序如下第一检查 Pack Installer 里 Installed 标签页是否显示绿色勾。如果芯片包前面是灰色或者带感叹号说明安装不完整或者版本和 IDE 不匹配。第二确认你安装的芯片包版本和 Keil 主程序版本是否匹配。新版芯片包可能只兼容新版本 IDE老版本 IDE 装了新包也识别不了。比如 MDK 5.30 以前的版本就不支持部分新增芯片型号。第三检查是不是装错芯片包。C51 和 STM32 是完全不同的两组包如果你装了 C51 包却去找 STM32 型号自然找不到。6.2 Keil5 打开工程卡死或无响应这种情况经常出现在第一次把旧版本 KEIL4 的工程迁移到 KEIL5 时。原因是 KEIL4 的工程文件结构和 KEIL5 不完全兼容尤其是工程文件里面的工具链版本信息不一样。解决办法通过 Keil 的 Migration 功能打开旧工程也就是先打开 KEIL5再从 File - Open Project 选择 KEIL4 的.uvproj文件系统会弹窗提示是否迁移版本点确定即可。如果迁移后仍卡死直接新建一个工程把源文件和头文件手动加入工作量也不大。另外如果你开了多个 Keil 工程窗口内存占用过高也可能导致无响应。Keil 对多工程同时打开的支持并不好建议一次只开一个项目。6.3 Target 选项卡 Xtal 变灰无法修改前文已经提到一个解决办法就是在 Debug 选项卡切换调试器。我再补充一个场景如果当前打开的是别人发送的带保护工程Pack 里启用了 Restricted 模式Target 选项卡里的很多参数都是只读的Xtal 自然变灰。解决方案是关闭工程保护。在 Pack Installer 里找到当前芯片包的设置取消勾选 Read-only 相关选项或者直接把工程复制一份新建不要继承原来的保护属性。6.4 烧录失败或不稳定烧录失败是 51 开发里最让人头疼的问题常见现象有三种。第一种握手不成功也就是 STC-ISP 一直提示 正在检测目标单片机但开发板重新上电后还是失败。这个问题 80% 是串口选择错误或者开发板供电不足。先把串口号切换到正确 COM 口然后确认开发板用的是数据线而不是充电线充电线虽然能供电但没有数据传输能力。第二种烧录到一半进度条不动。可能是 USB 转串口芯片驱动不稳定重新插拔 USB或者换一个 USB 口最好是电脑后置 USB 口供电更稳定。第三种提示文件不存在。这是 HEX 路径填错尤其注意如果 Keil 工程放在中文路径下STC-ISP 可能无法正确识别把工程复制到英文路径重新编译生成 HEX 即可。6.5 许可证激活提示“Cannot add license”这是激活时常见的报错原因一般有三个一是 CID 复制有缺失。License Management 里的 CID 很长复制时容易漏字符建议使用 CtrlC 和 CtrlV不要手动输入。二是申请的 License 类型和当前工具链不匹配。举例来说你申请的是 ARM License却激活到 C51 上就会报错。申请时要选对产品系列。三是系统时间问题。如果电脑系统时间和当前时间差距过大许可证校验会异常先把系统时间同步正确再重新添加。这算是排查激活问题的一个冷门技巧但实际遇到的人还不少。7. 把 C51 环境的基础打牢后面会省心很多安装 Keil 本身不算难真正难的是一步一步排查问题时不急躁。我第一次装 KEIL5 的时候也是被芯片包、许可证、驱动这些流程绕得头大后来帮实验室的学弟学妹装了不下二十台电脑踩过的坑多了才慢慢总结出一套趁手的流程。这套流程其实就是在解决三件事IDE 框架装对、芯片包装全、许可证激活成功。把这三点理清楚C51 和 STM32 混用的需求自然就能满足。最后再分享一个我自己的经验装完环境后不要急着写大程序先用点亮 LED 的工程把编译、下载、烧录这一整条链路跑通。只要这一个流程通了后面再学定时器、中断、串口通信就只是软件层面的问题了。环境问题不解决写一千行代码也是在浪费时间。希望这篇文章能帮你少走点弯路。
返回列表