ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

STM32开发入门:Keil MDK安装与Pack包配置完整指南

STM32开发入门:Keil MDK安装与Pack包配置完整指南 很多玩单片机的朋友第一次接触STM32时基本都会遇到一个绕不开的工具——Keil MDK也就是大家常说的Keil5。当年我第一次装这个环境的时候光是Pack包就折腾了大半天装了芯片包却提示不支持换了几个版本还是一头雾水。后来装多了、帮人装多了才慢慢摸清楚这里面的门道。这篇教程就把我从下载安装到Pack包导入的完整流程以及这些年踩过的坑一次性写清楚。适合刚入门嵌入式、准备用STM32做毕业设计或者自学的朋友参考内容比较细照着做基本能一次过。1. 安装前的准备工作1.1 先搞清楚你要装哪个Keil很多新手一上来就搜“Keil5下载”结果装完发现界面不对或者是打开后找不到STM32芯片。这里必须提前说清楚Keil家族里针对不同内核官方有不同版本的IDE。Keil C51专门用来开发51系列单片机比如STC89C52、STC15等芯片列表里全是8051内核的设备。Keil MDK-ARM针对ARM内核比如Cortex-M0/M3/M4/M7STM32、GD32、NXP的LPC系列都靠它。Keil C251主要用于251内核日常用得非常少。标题里的“Keil5MDK”指的就是MDK-ARM这是当前做ARM单片机开发最主流的工具链。很多人说的“C51兼容MDK”指的是在同一台电脑上同时安装C51和MDK这两套工具两个版本可以共存但要注意安装顺序和路径规划我在后面常见问题里会单独讲。我个人的建议是如果你是纯做STM32开发只装MDK就够不用装C51。如果课程设计、比赛、工作里同时碰51和32再考虑共存方案。1.2 下载渠道和版本选择官网地址是www.keil.com下载页在Products → MDK-ARM进去后点Download MDK。官方服务器在国外国内访问有时候会比较慢这是正常现象不要反复刷新导致下载中断。版本方面目前网上能搜到比较常见的有MDK 5.30、5.36、5.37、5.38。对于新手来说我建议选择5.36或者5.37这类稳定版本。太老的版本比如5.23、5.26对新款芯片的支持不够导入Pack包时容易报“requires newer version of MDK”。太新的版本比如5.38以上界面和包管理器变化不大但命令行工具路径有调整部分教程里的操作对不上也会让新手困惑。几个判断标准供参考版本稳定性芯片包要求常见问题5.23老但稳老旧芯片支持好新芯片包不支持安装5.30~5.36稳定主流STM32都支持比较推荐5.37~5.38新特性多Pack版本要求更新工程模板兼容性要注意下载的时候还会看到一个很关键的东西——MDK Lite / Evaluation版。这是评估版免费但编译有代码量限制ARM编译器通常限制在32KB以内。做小练习没问题项目一大就编译不过去了。真正的破解版我是坚决不碰的一是版权风险二是网上很多所谓“注册机”都带木马得不偿失。如果你只是学习评估版足够用如果是正经项目建议公司或学校购买正版License很多高校实验室其实都有正版授权主动问一下就能拿到。1.3 安装前的系统检查MDK-ARM支持Windows 7到Windows 11但有几个前提条件要提前准备好安装路径不能有中文不要装在带空格的目录下比如“D:\Program Files (x86)\Keil_v5”没问题但“D:\软件\Keil”就会出幺蛾子。关闭杀毒软件和Windows Defender的实时保护。Keil的破解工具如果你非要折腾经常被杀软误删更关键的是Pack安装器在下载和解析包的时候也可能被拦截。确保C盘有至少5GB可用空间。虽然Keil本体才几百MB但Pack包和工程编译缓存会占用大量空间。另外提醒一点如果你的电脑是ARM架构的Surface Pro X之类设备就不要折腾Keil了官方不支持ARM版Windows老老实实用x86电脑或者虚拟机。2. Keil MDK安装全流程2.1 安装包执行与路径选择双击下载好的安装程序第一屏是欢迎界面直接Next。然后会到达License Agreement页面勾选同意再点Next。接下来是选择安装路径。这一步非常关键MDK默认装在C:\Keil_v5我个人建议保持默认路径或者只改盘符不改目录名。比如你想装D盘就写D:\Keil_v5不要自己改成D:\Keil5或者D:\keil_arm。原因有两个一是很多老教程和脚本默认找Keil_v5这个目录二是一些第三方插件、CMSIS-DAP驱动会硬编码路径你自定义目录后容易找不到文件。选完路径后会有个填写个人信息的地方随便填就行不影响使用。然后是安装进度条大概两三分钟耐心等它跑完。2.2 安装器自带Pack的初始化问题这里有个新手容易忽略的细节MDK安装完成后安装器会弹出一个提示问你要不要在线下载对应芯片的Pack包并且启动Pack Installer。很多人这时候还没装驱动、还没搞懂什么是Pack就直接关了。其实也可以Pack后面随时能补装。安装完成后桌面会生成两个图标Keil uVision5和Keil uVision5 Pack Installer。前者是开发IDE后者是芯片包管理器。这两个图标容易被混为一谈我见过有朋友双击Pack Installer以为那就是Keil进去发现不能写代码困惑了半天。2.3 License激活与评估版限制第一次启动Keil uVision5会弹出一个License Management窗口或者你可以在菜单栏Project → Manage → License Management里打开。如果你的License是正版序列号在License Management窗口的License编号框里输入点击Add LIC就能完成激活。如果是评估版不用做任何操作直接用只在编译时偶尔弹个提醒框说代码量超限了点确定继续写就行。这里我多说一句网上流传的各种“破解教程”不建议跟风尤其是让你下载注册机、替换DLL文件的电脑中毒的概率很高。老老实实用评估版就够你学完整个STM32基础阶段了。3. Pack包管理与导入3.1 什么是Pack包为什么缺了它不行简单理解Pack包就是Keil和芯片厂商沟通的“翻译官”。它里面包含了两类核心内容芯片描述文件SVD/PDSC告诉Keil这颗芯片有多少Flash、多少RAM、支持哪些外设、寄存器地址是多少。设备启动文件Startup和Flash算法负责芯片上电后的启动引导以及下载程序时往Flash里写入数据的算法。没有Pack包你在Keil里新建工程时会发现Device列表空空如也压根找不到STM32F103C8T6、STM32F407ZGT6这些型号。所以“安装Keil”只是第一步“导入对应芯片的Pack包”才是真正让IDE认识你硬件的过程。3.2 在线安装Pack包打开Pack Installer左侧是芯片列表按厂商分类STMicroelectronics下面就是ST家的全部型号。找到你用的芯片型号比如STM32F103C8右侧会显示当前Pack的版本和Installed状态。点击Pack栏里的Install按钮它会自动下载并安装。这个过程依赖网络国内访问ARM官方服务器有时候很慢进度条卡在某个百分比是好几年不改的老问题。我的经验是不要点取消放那儿等有时候几分钟没动静然后突然就完成了。如果实在卡死把任务管理器里的Pack Installer进程结束掉换离线包方式安装这个方法我再下一节讲。在线安装完成后在IDE里就能看到对应芯片了。要注意Pack版本和MDK版本的匹配问题比如Keil 5.23就装不了需要5.25以上支持的Pack这个在导入时会明确提示。3.3 离线Pack包下载与导入离线安装是我个人更推荐的方式尤其是网络条件不稳定的情况下。方法如下第一步去Keil官网的Pack下载页面https://www.keil.com/dd2/pack/找到对应的Pack文件。页面上能按厂商筛选ST的Pack全称类似Keil.STM32F1xx_DFP.2.3.0.pack后面的数字就是版本号。第二步把下载好的.pack文件放到任意目录双击运行它会自动进入Pack Unzip向导选择目标Keil版本后自动安装。这里有个小坑如果双击后提示不能打开或者弹窗一闪而过很可能是文件关联问题这时候手动打开Pack Installer用菜单File → Import选择该.pack文件导入。第三步导入后在Pack Installer的Installed栏就能看到对应包前面的状态图标变绿就代表安装成功。3.4 更改Pack包默认位置Keil的Pack包默认安装在C:\Users\你的用户名\AppData\Local\Arm\PacksC盘空间紧张的朋友经常被这个目录坑惨。我自己就遇到过一个STM32F4的Pack加上各种中间件随随便便几个GB。改位置的方法是在Pack Installer菜单栏点Edit → Configuration把Pack文件夹路径改成其他盘的目录比如D:\Keil_Packs确定后重启Pack Installer它会提示你原来的包是否要移动选Yes就能帮你搬过去。这里有个致命细节如果你改了Pack路径就要保证每次都能访问到那个路径插拔移动硬盘或者换电脑后找不到PackIDE会报一堆莫名其妙错误。我见过有人把Pack放到U盘里拔了U盘再打开工程整个芯片器列表直接崩溃。4. 创建第一个STM32工程验证环境4.1 新建工程与芯片选择环境装好、Pack导好接下来必须真实创建一个工程来验证。打开Keil uVision5菜单Project → New uVision Project给工程起名比如LED_Test找个目录存起来。然后在Device界面选择芯片。左边栏展开STMicroelectronics → STM32F1 Series → STM32F103右侧找到你手上板子的型号。最经典的STM32F103C8T6在Device列表里对应的是STM32F103C8字样别选成C6或者CB选错了后面编译链接会出现Flash容量不匹配。选好芯片确认后会弹出一个Manage Run-Time Environment窗口里面是各种组件新手直接点OK或者Cancel都行。然后工程里会自动生成一个startup_stm32f103xe.s汇编启动文件以及一个空的main.c模板。完成这一步你的Keil基本就是“认识”这块芯片了。4.2 配置下载器与调试器写代码之前先把下载器配置好。点魔法棒图标Options for Target切到Debug选项卡如果你的板子是ST-Link下拉选择ST-Link Debugger然后点右侧的Settings确认能识别到设备ID。如果是J-Link就选J-Link/J-Trace同样确认设备列表里有你的芯片。再切到Utilities选项卡确认Flash Download里的Programming Algorithm包含正确的芯片Flash算法。比如STM32F103C8的Flash是64KB算法应该显示STM32F10x Med-density 64K。如果没有点Add按钮手动添加。我提醒一下这一步如果配置错了最常见的结果就是点击下载后IDE直接卡死几秒然后弹“Flash Download failed - Target DLL has been cancelled”。解决方法就是把Debug和Utilities两处的下载器统一选成同一种并且接线正确、驱动已装好。4.3 编译和烧录验证配置完成后在main.c里随便写一段点灯代码F7编译没有任何error和warning后点LOAD图标下载。下载成功提示是“Application running ...”然后观察板子灯亮了说明MDK环境直到烧录全链路都通了。我自己的习惯是每个环境都做一次“空工程编译点灯烧录”验证确认没问题后再往上加模块代码。因为很多时候环境有问题早期发现只是多花十分钟等项目写了几千行才发现是下载器配置不匹配那排查起来就非常折磨。5. 常见问题与排查技巧5.1 C51与MDK共存方案同一个电脑装C51和MDK原则是先装C51再装MDK两个目录分开可以都是C盘根目录下的不同文件夹。但是注意共存安装后每次双击C51或MDK的工程文件系统会用最后安装的那个版本来打开这会造成老工程默认打开工具不对。解决办法是手动关联或者直接先打开IDE再从IDE里选择工程文件。另外有个小技巧Keil的工程图标会区分51和ARM但只在所有工具都正确安装的情况下才能区分。如果双击51工程时打开的是MDK不用重装右键→打开方式→选择C51的UV4.exe即可。5.2 MDK工程编码GBK改为UTF-8很多从网上下载的STM32工程模板或者用VS Code编辑过的代码文件默认是UTF-8编码而Keil老版本默认按GBK读取结果中文注释全部变成乱码有时候连编译都报错。解决方案在Keil里依次点击Edit → Configuration → Editor选项卡把Encoding改成UTF-8同时把下面那个“Automatically reload modified files”勾上。保存设置后重新打开源文件乱码问题基本就解决了。再彻底一点的做法是写一个脚本把项目内所有.c和.h文件从UTF-8无BOM转成带BOM格式这样不管Keil还是其它编辑器都能正确识别但那属于进阶操作了这里不展开。5.3 烧录失败排查速查表这里把最常见的烧录失败场景整理成一张表方便你对照排查现象最常见原因排查方法Flash Download failed - Target DLL has been cancelledDebug和Utilities下载器不一致两处都统一为同一下载器No ST-LINK detected驱动未装或接触不良重装驱动检查USB口和杜邦线No target connected板子供电不足/复位电路问题用外部供电代替USB供电Error: Flash Download failed - Cortex-M3芯片Flash算法选错Utilities里重新选择正确的Flash算法Cannot load driver杀毒软件删了驱动文件关闭杀软重装驱动5.4 Keil5左侧目录不显示和代码补全缺失“左侧目录怎么显示”是新手高频问题。其实Keil默认没有纯目录树左侧栏显示的是Project工程结构。如果你新建的工程看不到左侧栏按一下View → Project Window快捷键Alt0就能呼出工程窗口。代码补全不显示则比较常见于两种情况一种是工程架构太老Keil某些版本的自动补全对通配符支持不佳另一种是装了Pack但Still没有加载对应的Software Component。另外新版本Keil支持按CtrlSpace手动调出补全提示如果没有任何反应检查输入法是否处于中文模式这个坑我踩过一次换英文输入法后一切正常。5.5 编译很慢怎么办工程变大后编译慢这个基本上每个人的Keil都会遇到。处理思路有几个第一在Options for Target → Target选项卡里取消勾选“Browse Information”可以让整个工程的源代码关联性检查减少编译速度提升明显。第二把输出文件夹默认是工程目录下的Listings和Objects挪到RAMDISK或者固态硬盘上磁盘IO对编译速度影响非常大。第三如果还在用Keil 5.23这种老版本可以考虑换到5.36新版本编译器的优化确实比老版本好编译速度也有提升。6. 再用顺手的工具组合环境装好之后不少人会遇到一个尴尬问题Keil的编辑器写代码实在不够顺心代码补全弱界面也偏老气。我个人折腾下来觉得可以用VS Code写代码、用Keil编译下载这套组合最舒服。具体做法是先用VS Code打开工程文件夹把.c和.h文件作为纯文本编辑写代码时补全、语法高亮都比Keil原生体验好不少。保存后切回Keil按F7编译再点击下载。如果嫌来回切换麻烦网上有专门的Keil Assistant插件在VS Code里直接调用Keil的命令行工具实现一键编译和下载这个方案我在几个项目里试过稳定性尚可。但要提醒一点新手阶段不建议过多折腾开发环境先把Keil原生界面用明白。工具再花哨最后烧不进板子都是一场空。等你能顺利编译、烧录、调试了再考虑VS Code的配置那时候你已经知道底层逻辑换工具只是换个编辑器而已。7. 一些真心话我自己装Keil的次数少说也有二三十次了从最早的Keil 4到现在的MDK 5.38踩过的坑比教程里写的还要多。最深刻的体会是大多数所谓“安装失败”不是软件本身的问题而是路径里有中文、Pack版本不匹配、驱动没装好这三类原因。如果你按这篇教程操作还是遇到问题优先检查这三项再回看错误提示绝大多数问题都能解决。最后再分享一个小技巧安装完MDK和Pack之后如果一切正常建议把Pack安装目录比如C:\Users\你的用户名\AppData\Local\Arm\Packs整个压缩备份一份。以后换电脑或者帮室友装环境根本不用重新下载Pack直接把压缩包解压到对应路径就能识别。这个办法我每次重装系统都能省下至少一个小时。
返回列表