首页 / 资讯中心 / 文章详情

Keil5安装与配置全攻略:MDK-ARM与C51共存及STM32开发环境搭建

Keil5安装与配置全攻略:MDK-ARM与C51共存及STM32开发环境搭建 ★ FEATURED ARTICLE
1. 环境准备与安装前必读1.1 为什么安装Keil5之前要先做系统检查很多人拿到Keil5安装包就直接双击结果装到一半报错、装完打不开、或者编译时找不到器件。这些问题九成以上都出在安装前的环境检查没做到位。我在帮同事排查问题时发现最常见的三个坑是系统缺少运行库、安装路径带中文或空格、以及杀毒软件拦截了驱动安装。这三件事花五分钟提前处理能省下后面两小时的折腾。先说系统运行库。Keil MDK-ARM基于较老的开发框架构建依赖Microsoft Visual C运行库和.NET Framework的部分组件。虽然Windows 10和Windows 11通常自带这些但如果你用的是精简版系统或者长期没更新就可能缺失。判断方法很简单打开“控制面板→程序和功能”看看有没有Microsoft Visual C 2015-2022 Redistributable。如果没有去微软官方下载安装即可注意x86和x64两个版本都要装因为Keil的部分组件是32位的。再说安装路径。这是新手最容易忽略的问题。Keil5的默认安装路径是C:\Keil_v5这个路径本身没问题但很多人喜欢改成D:\我的软件\Keil5或者C:\Program Files\Keil。前者包含中文字符后者包含空格都会导致后续编译时出现莫名其妙的路径错误。我的建议是直接用默认路径或者改成D:\Keil_v5这种纯英文、无空格的短路径。别小看这一点我见过太多因为路径问题导致pack安装失败、编译器找不到头文件的案例。最后说杀毒软件。Keil安装过程中会安装USB驱动用于ST-Link、J-Link等调试器部分杀毒软件会把这个行为判定为风险操作并静默拦截。表现就是设备管理器里能看到调试器但Keil里就是连不上。安装前临时关闭杀毒软件的实时防护装完再打开这是最稳妥的做法。注意如果你用的是Windows 18-HD19这类较新的系统版本系统自带的Windows Defender可能会更积极地拦截未签名驱动。安装时如果弹出“Windows已保护你的电脑”提示点击“更多信息→仍要运行”即可。1.2 Keil5、MDK-ARM、C51三者的关系梳理很多初学者被这几个名词搞晕我在这里一次性说清楚。Keil是一家公司的名字后来被ARM收购了。Keil公司出过很多开发工具其中最有名的就是Keil μVision这个集成开发环境IDE。μVision本身只是一个壳它需要配合不同的编译器才能工作。MDK-ARM全称是Microcontroller Development Kit for ARM是专门用来开发ARM架构单片机的版本比如STM32、GD32、LPC系列等。它内置的编译器是ARMCC现在叫Arm Compiler支持C和C。C51则是针对8051架构单片机的版本比如经典的STC89C52、AT89S52等。它用的编译器是C51编译器只支持C语言。关键问题来了Keil5能同时装MDK-ARM和C51吗答案是能但需要一点技巧。因为MDK-ARM和C51的安装包是分开的默认安装路径也不同。如果你先装MDK-ARM再装C51C51的安装程序可能会提示“检测到已安装Keil”然后要求你选择安装目录。这时候如果你把C51装到MDK-ARM的同一个目录下两者就能共存μVision启动时会根据你打开的工程类型自动切换编译器。但如果你装到不同目录就会出现两个独立的μVision图标用起来很别扭。我的建议是先装MDK-ARM记住安装路径比如C:\Keil_v5然后装C51时手动把路径改成同一个C:\Keil_v5。安装程序会提示目录已存在问你是否合并选择“是”。这样装完之后你打开μVision新建工程时选择器件如果是STM32就自动用ARM编译器如果是AT89C52就自动用C51编译器无缝切换。1.3 安装包与芯片包的获取思路安装包和芯片包的获取渠道我这里不提供具体链接但可以告诉你思路。Keil的官方安装包可以从其官网下载需要填写一些基本信息。芯片包Device Family Pack简称DFP则有两种获取方式一种是通过Keil自带的Pack Installer在线下载另一种是去芯片厂商官网下载离线包。在线下载的好处是方便坏处是速度慢尤其是ST的STM32芯片包动辄几百兆网络不好的时候能下一整天。离线包的好处是快坏处是需要你自己找。我的习惯是常用芯片STM32F103、STM32F407的包提前下载好离线版存着不常用的再用Pack Installer在线装。这里有个细节要注意芯片包的版本要和你的Keil版本匹配。比如Keil MDK 5.38版本对应的STM32F1系列芯片包建议用2.4.0以上的版本。版本太低可能缺少新器件的支持版本太高可能要求更新的Keil。判断方法很简单在Pack Installer里看芯片包详情会标注“Required MDK Version”。2. 安装过程详解与关键配置2.1 MDK-ARM主程序的安装步骤双击安装包后第一个界面是欢迎页直接点Next。第二个界面是许可协议勾选“I agree to the terms of...”然后Next。第三个界面是选择安装路径这里就是我前面强调的重点保持默认的C:\Keil_v5或者改成D:\Keil_v5千万别带中文和空格。接下来是填写用户信息随便填就行不影响使用。然后安装程序会开始复制文件这个过程大概需要三到五分钟取决于你的硬盘速度。安装完成后会弹出“Pack Installer”的自动启动选项先别急着勾选我们还有后续步骤。安装完成后桌面上会出现“Keil uVision5”的图标。先别急着打开我们还需要处理许可证问题。Keil MDK-ARM是商业软件未注册版本有32KB的代码大小限制。对于学习和小型项目来说32KB其实够用但如果你要开发带USB、文件系统、网络协议栈的项目32KB肯定不够。许可证的获取方式有两种一种是购买正版会得到一个License ID CodeLIC另一种是使用社区版MDK-Community功能完整但仅限非商业用途。社区版的申请需要去Keil官网注册账号然后下载专门的安装包。我建议学生和个人开发者直接用社区版省事且合法。如果你已经有LIC打开Keil后点击“File→License Management”把LIC复制进去点击“Add LIC”即可。这里有个常见问题很多人复制LIC时不小心多复制了空格导致提示“Invalid License”。解决办法是先把LIC粘贴到记事本里确认没有多余空格和换行再复制到Keil里。2.2 C51的安装与共存配置C51的安装包和MDK-ARM是分开的安装过程类似。关键点在于安装路径的选择。如果你已经装了MDK-ARM在C:\Keil_v5那么C51也装到这个路径。安装程序会提示“The folder already exists. Do you want to install to this folder anyway?”选择“Yes”。然后它会问你是否覆盖某些共享文件选择“No to All”或者“Yes to All”都可以实测下来选“No to All”更稳妥避免覆盖掉MDK-ARM的某些配置文件。安装完成后打开μVision你会发现工具栏上多了一个“Project→Manage→Components”的选项里面能看到C51的器件库。新建工程时在“Select Device for Target”界面如果你选的是“Microchip”或“Atmel”的8051系列编译器会自动切换成C51。如果你选的是“STMicroelectronics”的STM32系列编译器就是ARMCC。这里有个坑要注意如果你先装C51再装MDK-ARMMDK-ARM的安装程序可能会提示“检测到旧版本Keil”然后要求你卸载C51。这时候千万别卸载选择“保留”或者“合并”即可。如果安装程序强制要求卸载那就先卸载C51装完MDK-ARM后再重新装C51顺序不能乱。2.3 芯片包的安装与验证芯片包DFP的安装有两种方式。在线方式打开Keil点击“Pack Installer”图标一个绿色的小盒子在左侧找到“STMicroelectronics”展开后选择你需要的系列比如“STM32F1 Series”然后点击右侧的“Install”。安装过程中底部会显示进度条装完后状态变成“Up to date”。离线方式去ST官网下载.pack文件然后双击安装。安装程序会自动识别Keil的安装路径一路Next即可。装完后在Pack Installer里能看到已安装的包。验证芯片包是否安装成功的方法新建一个工程在器件选择界面搜索“STM32F103”如果能找到“STM32F103C8”等具体型号说明包装好了。如果搜不到说明包没装成功或者Keil的Pack路径配置有问题。Pack路径可以在“Project→Manage→Pack Installer→File→Settings”里查看和修改。提示如果你用的是Windows 18-HD19系统Pack Installer的在线下载可能会因为系统防火墙设置而失败。解决办法是在防火墙里给Keil的Pack Installer放行或者直接用离线包。3. 工程创建与烧录实操3.1 从零新建一个STM32工程打开Keil点击“Project→New uVision Project”选择一个纯英文路径的文件夹给工程起个名字比如“STM32_LED”。点击保存后会弹出器件选择窗口。在搜索框输入“STM32F103C8”选中“STM32F103C8”后点击OK。接下来会弹出“Manage Run-Time Environment”窗口这是Keil5的新特性可以让你方便地添加中间件比如CMSIS、HAL库。对于初学者我建议先不在这里勾选任何东西直接点OK。因为自动添加的库可能和你的代码风格不匹配手动添加更可控。工程创建完成后左侧的Project窗口会显示“Target 1”和“Source Group 1”。右键“Source Group 1”选择“Add New Item to Group”然后选择“C File”命名为“main.c”。这样就有了一个空的C文件。接下来需要配置编译器的头文件路径。点击“Options for Target”魔术棒图标在“C/C”选项卡里点击“Include Paths”右侧的按钮添加你的库文件夹路径。如果你用的是标准库需要添加STM32F10x_StdPeriph_Driver\inc和CMSIS\CM3\CoreSupport等路径。如果你用的是HAL库路径又不一样。这一步是新手最容易出错的地方路径加错了就会提示“cannot open source input file”。3.2 编译配置与常见报错处理编译配置里有两个关键选项一个是“Target”选项卡里的“Use MicroLIB”另一个是“Output”选项卡里的“Create HEX File”。MicroLIB是ARM的简化版C库占用空间小适合单片机。如果你用了printf函数勾选MicroLIB可以避免一些链接错误。Create HEX File则是生成可烧录的HEX文件必须勾选。编译时常见的报错有这么几类第一类是“undefined symbol”意思是某个函数或变量没有定义。原因通常是源文件没加到工程里或者头文件路径不对。解决办法是检查左侧Project窗口里有没有对应的.c文件以及Include Paths里有没有对应的.h文件路径。第二类是“cannot open source input file”意思是找不到头文件。原因就是Include Paths没配好。解决办法是找到那个头文件的实际路径加到Include Paths里。第三类是“L6218E: Undefined symbol”这是链接错误通常是某个库文件没加进来。比如你用了标准库的GPIO函数但没把stm32f10x_gpio.c加到工程里。解决办法是把对应的.c文件加进来。第四类是“Flash Download failed”这是烧录错误原因可能是调试器没连好、芯片没供电、或者Flash算法没选对。解决办法是先检查硬件连接然后在“Options for Target→Debug→Settings→Flash Download”里确认Flash算法是否正确。3.3 烧录与在线仿真烧录之前先确认调试器驱动装好了。ST-Link的驱动可以去ST官网下载装完后设备管理器里会出现“STMicroelectronics STLink dongle”。J-Link的驱动去SEGGER官网下载装完后会出现“J-Link driver”。在Keil里配置调试器点击“Options for Target→Debug”在右上角的下拉框里选择你的调试器比如“ST-Link Debugger”。然后点击右侧的“Settings”在“Debug”选项卡里确认能识别到芯片的ID号。如果识别不到检查一下调试器的线有没有接反SWDIO和SWCLK以及目标板有没有供电。烧录时点击“Flash→Download”或者直接点工具栏上的“Download”按钮。如果一切正常底部的Build Output窗口会显示“Programming Done. Verify OK.”。如果提示“Flash Download failed”先检查Flash算法。在“Options for Target→Debug→Settings→Flash Download”里看看“Programming Algorithm”列表里有没有你的芯片型号。如果没有点击“Add”添加对应的算法。在线仿真时点击“Debug→Start/Stop Debug Session”进入调试模式。这时候可以设置断点、单步执行、查看变量值。我常用的一个技巧是在“Watch”窗口里添加你要观察的变量然后在“Memory”窗口里查看数组的内容。如果程序跑飞了先看“Call Stack”窗口能快速定位到出问题的函数。注意如果你用的是J-Link克隆版Keil可能会弹出“所连接的探头似乎是J-Link克隆产品”的警告。这个警告不影响使用点击“OK”继续即可。但如果频繁弹出建议换正版调试器或者用ST-Link。4. 常见问题与排查技巧实录4.1 安装类问题速查表问题现象可能原因解决办法安装到一半报错退出杀毒软件拦截关闭杀毒软件后重装装完后打不开提示缺少DLL运行库缺失安装VC 2015-2022运行库编译时提示找不到头文件Include Paths未配置在C/C选项卡里添加路径烧录时提示找不到设备调试器驱动未装安装ST-Link或J-Link驱动提示“Invalid License”LIC复制有空格用记事本清理后重新复制Pack Installer下载失败网络或防火墙问题用离线包安装中文注释乱码编码格式不匹配在Edit→Configuration里设置UTF-8编译速度慢未开启并行编译在Options for Target里勾选Parallel Build4.2 编译与烧录中的独家避坑经验第一个坑中文路径导致的诡异错误。我遇到过好几次工程放在“D:\单片机学习\STM32”下面编译时提示“cannot open source input file”但路径明明是对的。后来发现是Keil对中文路径的支持不好把工程移到纯英文路径下就正常了。所以从今天开始所有嵌入式工程都放在纯英文路径下这是铁律。第二个坑芯片包版本不匹配。有一次我用Keil 5.36打开一个用5.38创建的工程提示“Device not found”。原因是那个工程用的芯片包版本要求Keil 5.38以上。解决办法要么升级Keil要么降级芯片包。我建议保持Keil和芯片包都更新到较新的稳定版避免这种兼容性问题。第三个坑ST-Link固件过旧。ST-Link调试器本身也有固件如果固件太旧可能无法识别新的STM32芯片。解决办法是用ST-Link Utility或者STM32CubeProgrammer升级固件。升级过程很快一分钟搞定但能解决很多莫名其妙的连接问题。第四个坑Flash算法选错。STM32F103C8的Flash是64KB但如果你选了128KB的算法烧录时可能会提示“Verify failed”。解决办法是在Flash Download里选对型号比如“STM32F10x Med-density Flash”对应64KB或128KB“High-density”对应256KB以上。第五个坑中断向量表偏移。如果你用了BootloaderAPP程序的中断向量表需要偏移。在Keil里需要在“Options for Target→Target”里设置“Read/Only Memory Areas”的起始地址同时在代码里调用NVIC_SetVectorTable函数。这个坑很隐蔽表现是程序能烧进去但跑不起来或者中断不响应。4.3 C51与ARM共存的注意事项如果你同时装了C51和MDK-ARM有几个细节要注意。第一许可证是分开的。C51的LIC和MDK-ARM的LIC不一样需要分别添加。在License Management里你会看到两个条目一个是“MDK-ARM Professional”一个是“C51 Professional”。两个都要有有效的LIC才能正常使用。第二编译器版本可能冲突。C51用的编译器是C51.exeMDK-ARM用的是armcc.exe或armclang.exe。这两个编译器互不干扰但如果你的系统环境变量里手动添加了编译器的路径可能会导致版本混乱。我的建议是不要手动改环境变量让Keil自己管理。第三工程文件格式不同。C51的工程文件后缀是.uvprojMDK-ARM的是.uvprojx。虽然都是Keil工程但打开时Keil会自动识别并切换编译器。如果你用C51的工程模板去编译STM32代码肯定会报错。所以新建工程时一定要选对器件。第四调试器配置不同。C51常用的调试器是STC-ISP或者AT89系列的专用下载器MDK-ARM常用ST-Link和J-Link。在“Options for Target→Debug”里两者的配置界面略有不同。C51的调试选项里没有“Flash Download”这一项因为8051单片机通常用串口下载不需要Flash算法。4.4 提升开发效率的实用技巧第一个技巧使用工程模板。每次新建工程都要配置头文件路径、添加库文件很麻烦。我的做法是建一个“标准工程模板”把常用的库文件、头文件路径、编译选项都配好然后复制一份改个名字就是新工程。这样能省下大量重复劳动。第二个技巧善用代码补全。Keil5的代码补全功能默认是关闭的在“Edit→Configuration→Text Completion”里可以开启。开启后输入“GPIO_”会自动弹出候选函数效率提升明显。不过要注意代码补全对中文注释的支持不好建议注释用英文或者拼音。第三个技巧用Git管理代码。虽然Keil工程文件是二进制的但你可以只把.c和.h文件纳入Git管理工程文件用.gitignore排除。这样换电脑时只需要重新建工程把源文件加进去就行。我试过用Git管理STM32项目配合.gitignore文件效果很好。第四个技巧串口打印调试。在STM32上调试最实用的方法就是串口打印。重定向printf到串口然后在关键位置打印变量值。重定向的代码很简单在main.c里加一个fputc函数即可。注意要勾选MicroLIB否则会报错。第五个技巧用逻辑分析仪看时序。如果你在调SPI、I2C、PWM这些时序敏感的接口光看代码很难发现问题。用一个几十块钱的逻辑分析仪抓一下波形一眼就能看出是时钟极性错了还是数据相位错了。这个投入很值得。5. 从安装到烧录的完整流程复盘5.1 一次成功的安装应该是什么样我复盘一下最近一次在Windows 18-HD19上安装Keil5的完整过程你可以对照参考。第一步关闭Windows Defender的实时防护。第二步下载MDK-ARM安装包版本是5.38a。第三步双击安装路径设为D:\Keil_v5一路Next等待三分钟。第四步安装完成后不启动Pack Installer先装C51。第五步C51安装路径也设为D:\Keil_v5提示合并时选“Yes”覆盖文件时选“No to All”。第六步打开Keil添加社区版LIC。第七步用离线包安装STM32F1和STM32F4的芯片包。第八步新建一个STM32F103C8的工程添加main.c编译通过。第九步连接ST-Link配置调试器烧录一个LED闪烁程序验证成功。整个过程大概花了二十分钟其中安装包复制占了十分钟芯片包安装占了五分钟剩下五分钟是配置和验证。如果你遇到问题大概率是卡在某个环节对照我前面列的排查表逐项检查即可。5.2 给不同基础读者的建议如果你是纯新手从来没接触过单片机我的建议是先别急着装Keil。先花半天时间了解一下什么是单片机、什么是GPIO、什么是寄存器。推荐看江科大自化协的STM32入门视频讲得很通俗。有了基本概念之后再装Keil跟着视频一步步操作遇到问题再查资料。如果你有C51基础想转STM32那安装Keil对你来说不是难事。重点要转变的是编程思维从直接操作寄存器到使用库函数从8位到32位从裸机到可能涉及RTOS。我建议先从标准库入手把GPIO、定时器、串口、中断这几个外设玩熟再过渡到HAL库和CubeMX。如果你已经用过Keil但换电脑或者重装系统后遇到问题那重点检查三个地方运行库是否完整、路径是否纯英文、调试器驱动是否装好。这三个地方排查完九成问题都能解决。5.3 后续学习路径的延伸装好Keil只是第一步后面还有很长的路。我个人的学习路径是这样的先点灯再按键然后串口接着定时器和中断再往后是PWM、ADC、DMA、SPI、I2C。每个外设都自己写一遍代码不要直接抄例程。写完之后用逻辑分析仪或者示波器验证一下波形加深理解。再往后可以学RTOS比如FreeRTOS或者RT-Thread。RTOS能让你从“裸机思维”升级到“任务思维”对复杂项目的开发很有帮助。然后可以学一些通信协议比如Modbus、CAN、USB。这些在实际工作中很常用。最后如果你对底层感兴趣可以研究一下ARM Cortex-M的内核架构看看启动文件是怎么写的中断向量表是怎么组织的链接脚本是怎么配置的。这些知识能让你在遇到诡异问题时有更底层的排查手段。我个人在实际操作中的体会是Keil5的安装本身不难难的是遇到问题时知道去哪里找原因。希望这篇内容能帮你少走一些弯路。如果你在安装过程中遇到了我没提到的问题欢迎在评论区交流我看到后会尽量回复。
阅读完成 · 觉得有帮助?
咨询建站