1. 安装之前先搞明白:这两个软件到底分工是什么
1.1 STM32 开发为什么要装 CubeMX 和 Keil5 两样东西
很多刚接触 STM32 的同学,第一反应是“接上 USB 线,装一个软件,点下载,板子就能跑”。但等你真正打开教程就会发现,资料里一会儿提到 STM32CubeMX,一会儿提到 Keil5,两个软件都要装。于是问题来了:为什么不能只装一个?这两个东西到底谁负责干什么?
简单说,STM32 开发的完整闭环是“配置芯片 → 写代码 → 编译 → 烧录 → 调试”。没有单一工具能同时把这几件事干得顺手。STM32CubeMX 负责前半段:你通过图形界面选芯片型号、选引脚功能、选外设和时钟树,然后它自动生成一套基于 HAL 库的初始化代码,相当于帮你把“施工图纸”画好。Keil5 负责后半段:你打开 CubeMX 生成的工程,在里面写业务逻辑,编译成固件,再用 ST-Link 等调试器烧录进芯片。
我习惯把 CubeMX 比作“图纸生成器”,把 Keil5 比作“工地现场”。图纸工具不负责搬砖砌墙,但它会明确告诉你墙应该砌在什么位置;工地工具不负责设计图纸,但它能真正把代码变成芯片里运行的机器码。两者各管一段,配合起来才能组成一套完整的开发链路。
新手最容易混淆的是“工程”这两个字。CubeMX 生成出来的文件夹,严格来说是一份代码骨架工程;你需要用 Keil5 打开其中MDK-ARM子目录下的.uvprojx文件,才能进入“写代码、点编译、点下载”的环节。如果只装 CubeMX 不装 Keil,工程代码没法编译;如果只装 Keil 不装 CubeMX,你就得手动创建寄存器版或标准库版工程,对零基础来说门槛一下子高了不少。所以“宝宝级”教程的第一步,就是老老实实把两个都装上,并且搞清楚它们的分工。
1.2 三个新手名词:芯片型号、固件包、设备支持包
安装过程中,有三样东西会反复出现:芯片型号、固件包、设备支持包。我在这一开始先把它们拎出来讲清楚,后面遇到就不会慌。
芯片型号指的是你手上那块板子的主控型号,比如最常见的 STM32F103C8T6,也就是淘宝上二三十块钱的“蓝丸”板。还有 STM32F407ZGT6、STM32H750VBT6 等等。CubeMX 里新建工程必须先从型号库中选中你的芯片,它才知道接下来该生成什么样的初始化代码。
固件包,英文叫 Firmware Package。CubeMX 会根据芯片型号从网络下载对应的固件库,例如 STM32F1 系列对应的STM32CubeF1,F4 系列对应的STM32CubeF4。这些包包含了 HAL 驱动、底层启动文件和大量例程源码,是代码生成的原料。第一次下载时体积比较大,F4 的包解压后接近 1GB,这也直接导致很多新手卡在这一步。
设备支持包,英文叫 Device Family Pack,简称 DFP,是 Keil5 里用来描述“某个厂商某系列芯片”的离线信息包。Keil 本身不认识 STM32F103C8 是什么芯片,必须靠Keil::STM32F1xx_DFP这样的包来告诉它寄存器地址、Flash 空间、Debug 接口等信息。没有它,你打开 Keil5 新建工程时根本找不到 STM32 系列。
把这三个概念记住,后面不管报错还是卡顿,你都能判断问题出在谁身上:是 CubeMX 的固件包没下好,还是 Keil5 的设备支持包没装。
2. 下载与准备:官网地址、版本选择和安装前检查清单
2.1 先下载 STM32CubeMX:不要被 ZIP 后缀吓到
STM32CubeMX 是 ST 官方出的软件,下载自然要去 ST 官网。直接在浏览器打开st.com,在搜索框输入STM32CubeMX,通常第一项就是它的产品页。页面上会有个明显的“Get Software”或“Download”按钮,点击后可能要求你登录或注册一个账号,流程就是常规邮箱验证。千万不要因为要注册就跑去第三方网站下“绿色版”“精简版”,那些多半是旧版本甚至被改过的东西,装完反而冒出更多莫名其妙的问题。
这里有一个“宝宝级”容易懵的点:STM32CubeMX 下载下来的文件通常不是.exe,而是一个.zip压缩包,名字像en.stm32cubemx-win64.zip。我第一次下载时也愣了半天,以为自己下错文件了。其实没有,先解压,解压后里面才是一个SetupSTM32CubeMX-6.x.x.exe安装程序。版本方面直接选最新稳定版即可,新版 6.x 已经内置了 Java 运行时,不需要你再单独装 Java 环境,这省掉了旧版安装时最大的一个坑。
2.2 再下载 Keil5:注意它的真名是 MDK-ARM
“Keil5”是国内对 Keil MDK-ARM 的习惯叫法。搜索“keil5下载”会出现一大堆第三方下载站,看着都很像官网,实际很多是收集信息或者捆绑安装器的渠道。稳妥的办法是直接进 ARM 公司官方的 Keil 网站keil.arm.com,在产品列表中找到 MDK-ARM,进入下载页面,选择 Windows Installer 格式的.exe文件下载。和 ST 官网一样,Keil 官网下载也可能需要注册一个 ARM 账号,没有就注册,都是标准流程。
选择 MDK 版本时,我建议选比较新的稳定版即可。不要追求“最新”,因为刚发布的大版本偶尔会有些兼容问题;也不要用古董版本,否则 CubeMX 生成的工程很可能需要更高级的编译器支持。版本合适、资料多、网上问的人也多,遇到问题搜一下到处都有解答。
顺便强调一句:对零基础新手来说,官方社区版或评估版足够用了,完全不用碰任何破解之类的东西。下载时认准官网,不要图省事下载什么“一键整合包”,那些东西体积巨大、容易被杀毒软件拦截,而且可能裹挟安全风险。自己多花五分钟走官网流程,后面能省回来几十个小时。
2.3 安装前花一分钟做三项检查
为了避免安装到一半各种报错,开始之前请快速检查下面三件事。
第一,确认系统是 64 位 Windows。目前绝大多数电脑都是 Win10/Win11 64 位,如果你还在用老 32 位系统,新版 CubeMX 基本跑不了,还是先升级系统吧,这不只影响这两款软件,后面你还会遇到大量 64 位工具链的问题。第二,保证你右键点击安装程序时选择“以管理员身份运行”。Win10/Win11 对写入 Program Files 等路径有权限控制,不用管理员运行,可能装完以后软件无法正常写文件,启动就报错。第三,提前规划一个干净的安装路径。两个软件都别装到带中文或空格的目录里,比如不要装到D:\软件\Keil5,不要直接在桌面上安装。我个人的习惯是装到D:\STM32CubeMX和D:\Keil_v5这种纯英文路径。
为什么这么讲究?因为 MDK 的编译工具链对中文路径兼容性很不好,一次两次也许没事,等到你工程目录层级变深,突然冒出来一堆“找不到文件”的编译错误,就很难排查了。这种问题不是一两行配置能解决的,干脆从一开始就避开。
3. STM32CubeMX 安装实操:从 ZIP 解压到首次进入界面
3.1 解压、安装、打开的全流程细节
拿到en.stm32cubemx-win64.zip之后,先选中文件,右键解压到当前文件夹。解压后会看到一个SetupSTM32CubeMX-xxx.exe,这时的右键菜单里选择“以管理员身份运行”。
安装界面是标准的 Next 流程:第一屏显示欢迎和许可协议,勾选同意,点 Next;第二屏问安装路径,把默认的 C 盘改成D:\STM32CubeMX;之后继续 Next 并等待安装完成。整个过程几分钟就结束了。等你打开软件,会看到一个深色或浅色的主界面,整体是工程化的布局,顶部有 File、Window、Help 等菜单,左侧是新 Project 入口,中间是芯片选择区域。
很多新手看到全英文就心慌,其实界面词非常有限,无非是 New Project、GENERATE CODE、Project Manager 这几个,用几遍就熟了。这里我给一个劝告:不要急着去找什么第三方汉化包。CubeMX 官方并没有提供完善的中文界面,网上流传的汉化包大多是替换 JAR 文件或内部资源文件,一旦版本对不上,软件直接闪退,连恢复都要折腾半天。英文界面反而是最稳定的选择,而且以后查资料、看报错时常用的也是英文术语。
3.2 首次启动后,固件包下载才是真正的“卡点”
CubeMX 装好后,很多人迫不及待想新建工程。当你选中芯片,软件发现本机没有对应固件包,就会触发联网下载。问题就出在这里:新手根本不知道它在下什么,只看到进度条半天不动,于是反复取消重开,结果下载一直中断,最终把耐心耗光了。
我更建议第一次使用时,不要急着新建工程,而是先把需要的固件包主动下载好。操作方式是点击菜单栏的Help -> Manage embedded software packages。在弹出的窗口中,左侧列出 STM32F1、STM32F2、STM32F3、STM32F4 等系列,右侧是版本信息。你只需要勾选自己会用到的系列,比如 STM32F1,然后点击 Install。其余不常用的系列不用勾,否则下载量会翻好几倍。
这一步真的需要耐心。第一次从 ST 服务器拉几百兆甚至一个多 GB 的固件包,速度波动非常正常。我自己的经验是第一次下载 F4 包时跑了将近四十分钟,中间看起来像卡死了,其实它只是在慢慢传输。千万不要手贱反复取消。如果进度条长时间完全不动,再考虑关掉重试,或者用下面 3.3 的手动导入方案。一次下载成功后,以后每次建工程都不需要再下,所以时间成本是一次性的,完全值得。
3.3 固件包下载失败的备用方案,以及本地库目录管理
如果实在下载不下,或者在 80% 左右反复断掉,有一种很实用的办法:手动下载离线包。到 ST 官网搜索对应系列的固件包,比如搜索STM32CubeF1,下载对应版本的压缩包。下载完不需要自己解压,回到 CubeMX 的Help -> Manage embedded software packages窗口,点击页面下方的 “From Local” 按钮,选择刚才下载的压缩包,CubeMX 会自动校验并导入。
这个方法特别适合网络不稳定的环境。我很多次给同事远程指导时,就是让机器卡住的用户换用离线包,十分钟解决问题。另外,CubeMX 会把固件包存在用户目录下,比如C:\Users\你的用户名\STM32Cube\Repository。这个目录如果放在 C 盘,时间一长非常占空间。建议通过Help -> Updater Settings或Window -> Preferences找到存储路径设置,把它改到D:\STM32CubeRepository这类非系统盘。这样以后重装系统、换电脑,只要把这个文件夹复制过去,CubeMX 立刻识别出已有的固件包,不用再重新下载几 GB 的东西。
如果启动 CubeMX 时遇到 “Java platform not found” 之类的报错,绝大多数情况是安装了过旧版本,或者系统缺少对应运行时。新版本自带运行时,删掉旧的重新下载最新 64 位安装包就行,不要自己手动折腾补丁。
4. Keil5(MDK-ARM)安装实操与 STM32 芯片包绑定
4.1 Keil 安装向导里值得注意的两步
MDK 安装界面同样是英文,但流程也不复杂。双击安装包后,一路 Next,到许可协议时选择同意,接着会让你填写用户名和邮箱。这些信息不会严格验证,随便填一个组合就行。然后是安装路径,按前面规划改成D:\Keil_v5。
安装过程中,到了某个步骤可能出现一个选项,大意是询问是否需要联网下载支持包或者设备系列包。我的建议是先取消或跳过,等 MDK 本体装好之后再用 Pack Installer 管理。原因有两个:第一,这一步默认会下载大量支持包,你根本不需要那么多,白白浪费时间;第二,默认下载全部系列时不区分 STM32F1/F4,体积很大,很容易下载一半失败。与其卡在那里进退两难,不如先装好本体,后面按需安装精确的 DFP 包。
安装结束后,Keil 通常会自动打开 Pack Installer(包管理器),或弹出一个欢迎界面。很多新手觉得没用,随手就关掉了,结果后面打开 Keil 发现左边没有工程树、新建工程找不到任何芯片。别担心,这是有一个步骤遗漏了,随时可以通过菜单重新打开。
4.2 Pack Installer:把 STM32 芯片支持包装进来
在 Keil 界面主菜单中找到Project -> Manage -> Pack Installer,点击后就能弹出包管理器。这个窗口左侧是厂商和芯片系列,右侧是软件包详情。在上方搜索框输入STM32F1,界面会过滤出对应的Keil::STM32F1xx_DFP软件包。
先看这个 DFP 包的状态。如果状态显示还是一个下载图标或者 “Not installed”,说明还没装。选中它,右侧会出现版本列表,选择适合的版本,点击Install。这一步同样要联网并且等待一段时间,下载数据量虽然比 CubeMX 固件包小一些,但也不会太快。
安装成功后,新建工程时就能在设备列表里看到STMicroelectronics -> STM32F1xx分类下的具体芯片型号。如果你之后准备用 F4、G4、H7 等系列,可以继续安装对应的DFP包。但我的建议是真用到哪个再装哪个,不要一次装一堆,既占空间也看不出好处。缺 DFP 包最典型的现象就是 Keil 里根本没有 STM32 分类,或者在选择 Device 时提示 “No devices found”。遇到这种问题,回来检查 Pack Installer 就一定没错。
4.3 Keil 许可模式说明:评估版、社区版和商业版
Keil 的许可问题,我在这里一次性说清楚,因为它困扰过很多人。
评估模式是安装后默认使用的。未注册的 MDK 会有 32KB 代码大小限制,但对学习 STM32 入门来说已经绰绰有余。跑点灯、串口、中断、定时器、I2C、SPI 这些常见外设,代码量基本都在 32KB 以内。它会在编译或启动时提示限制,但完全不妨碍正常使用。
社区版是 ARM 官方推出的免费授权模式,适合教学和个人学习,需要 ARM 账号登录,并在官网页面进行申请。不同时期的政策会有点出入,具体以官网说明为准。好处是能解除一些使用限制,相当于正规渠道的自由度提升。商业版则是给产品量产用的,需要按商业授权付费,新手阶段完全不用操心。
这里我非常认真地多说一句:不要为了消除 32KB 限制去搜索引擎找什么注册机或破解补丁。这类工具极易携带木马,而且会对 Keil 自带组件进行篡改,导致各种奇怪的编译错误,出了问题你根本不知道是代码问题还是环境问题。第一次装环境,稳定比什么都重要。学习阶段的限制带给你的麻烦,远小于一个崩坏的开发环境带给你的麻烦。
5. 验证安装成果:从 CubeMX 生成工程到 Keil 烧录点灯
5.1 在 CubeMX 里生成一个 MDK 工程
环境装完不能算结束,必须跑通一次完整流程才算真正把环境点亮。我的建议是马上做一个最简单的 LED 工程来验证一切。这里以最常见的 STM32F103C8T6 蓝丸开发板为例,操作步骤对所有芯片都是一样的。
打开 STM32CubeMX,点击左侧 New Project 按钮,在芯片搜索框输入STM32F103C8,双击选中。进入配置页后,按照下面三步设置:
- 在左侧
System Core分类下找到RCC,把HSE设置为Crystal/Ceramic Resonator。这样做的目的是为外部高速晶振配置好路径。 - 再找到
SYS,把Debug设置为Serial Wire。这一步绝不能省,否则生成代码后调试引脚会被作为普通 GPIO 使用,ST-Link 会连不上芯片。 - 在芯片引脚图区域,把板载 LED 对应的引脚设为
GPIO_Output。蓝丸板上很多 LED 接在 PC13,如果你的板子接在 PA0 或 PA1,就选对应引脚。
设置完以后,点击顶部标签进入Project Manager。在Project Name里填一个英文工程名,例如LED_Test;在Toolchain/IDE下拉框中选择MDK-ARM V5,如果后面发现 Keil 编译环境不支持再改为MDK-ARM V6重新生成。最后点击GENERATE CODE。生成完成后,CubeMX 会询问是否打开工程。选择 Open Project 后,Keil 就能自动打开对应工程文件;如果没有自动打开,手动进入生成目录下的MDK-ARM文件夹,双击.uvprojx文件也行。
5.2 Keil 编译前的三个关键检查
用 Keil 打开工程后,先别急着点编译按钮,我建议按下面三步做检查。
第一,确认芯片型号是否正确识别。在 Keil 左侧项目树上点击目标(Target),或者在菜单打开Project -> Options for Target,也就是常说的“魔术棒”,进入 Device 选项卡,看看型号是不是STM32F103C8。如果这里是空的或者识别错误,多半是 DFP 包没装好,回到 Pack Installer 重新检查。
第二,检查编译器状态。新版 MDK 的默认编译器通常是 ARM Compiler 6。如果 CubeMX 生成工程时选择的是 MDK-ARM V5,而你的 Keil 环境没有安装 ARM Compiler 5,编译时会报 “compiler not found” 或类似错误。解决方式是回到 CubeMX 的 Project Manager,把 Toolchain 改成MDK-ARM V6后重新生成工程再打开,或者在 Keil 魔术棒的 Target 选项卡里切换编译器版本。
第三,确认 Include Paths 无误。CubeMX 生成的工程默认会设置好头文件路径,但如果你把整个工程目录移动过,或者路径中有中文,编译器就找不到.h文件,产生大片的红字报错。打开魔术棒里的C/C++选项卡,检查Include Paths是否完整。对新手来说,最省心的办法是工程目录从一开始就放在纯英文路径下,并且不要随便搬移。
这三项检查完成后,点击工具栏的 Build 按钮,或者按 F7。看到0 Error(s), 0 Warning(s)的结果,说明代码生成和编译链路已经跑通了。我第一次看到这个输出的时候,特别开心,因为前面踩了太多坑,说明后面的烧录环节也稳了一大半。
5.3 ST-Link 接线与首次烧录:把灯点亮
编译通过只说明代码能被正确编译,还得证明能写进芯片。这一步我建议用 ST-Link V2 调试器,淘宝十几块钱的版本就行,它体积小,使用方便。
首先准备四根杜邦线,按下面的规则接线:ST-Link 的 3.3V 接开发板的 3.3V,SWDIO 接 SWDIO,SWCLK 接 SWCLK,GND 接 GND。注意看板子上的丝印,很多板上写的“3V3”就是 3.3V,千万别和 5V 搞混,接反会烧芯片。插好线后,在 Keil 魔术棒里切到Debug选项卡,选择调试器类型为ST-Link Debugger,然后点旁边的 Settings。如果驱动和接线正常,窗口里会显示识别到的 IDCODE 或设备名称。如果这里空白,先检查接线是否松动,再确认开发板是否供电,最后考虑驱动问题。驱动可以直接去 ST 官网搜索ST-LINK USB Driver手动安装。
然后点击工具栏的下载按钮,或者按 F8,Keil 开始将编译好的固件写入芯片。如果输出窗口出现类似 “Download OK” 的提示,程序就已经进去了。复位开发板,板载 LED 就会按照你的代码开始工作。我在自己的工程里写了一个简单的 while 循环,每 300ms 翻转一次 PC13,就能看到 LED 闪烁。
很多同学写完之后上电,灯纹丝不动,最后发现两种典型原因:一是没加延时函数,循环翻转太快肉眼看不出来;二是 LED 是低电平点亮,而代码把引脚拉高了。这些不是环境问题,是 GPIO 电平逻辑的问题。遇到时不要慌,对照代码和原理图仔细检查一遍,往往比重新装环境更有收获。
6. 新手安装排查:高频报错和“看不太懂”的小困惑
6.1 六个高频问题的速查表
下面这张表基本覆盖了我这些年见过的新手安装问题,建议先收藏,以后再遇到问题直接对照查找。
| 现象 | 大概率原因 | 解决方向 |
|---|---|---|
| Keil 新建工程找不到 STM32 芯片 | 没安装对应 DFP 设备支持包 | Project -> Manage -> Pack Installer安装Keil::STM32F1xx_DFP等 |
| CubeMX 生成后,Keil 编译报“头文件不存在” | 工程移动过,或路径含中文 | 调整 Include Paths,并把工程放到英文路径 |
| Pack Installer 在线下载卡住或失败 | 网络波动,下载体量过大 | 到官网手动下载.pack文件,在 Pack Installer 里File -> Import导入 |
| ST-Link 烧录报 “No Target Connected” | 接线错误、驱动缺失、板子没供电 | 检查 SWD 三根信号线和电源地,更新 ST-LINK 驱动 |
| 烧录报 Flash Download failed | 接线接触不良或芯片状态异常 | 重新上电、手动复位后重试;检查 BOOT0 跳帽 |
| 打开 CubeMX 停在启动画面 | 安装路径含中文,或缓存损坏 | 重装到纯英文路径,清理 Repository 下的临时文件再启动 |
这些问题的排查顺序,我建议始终遵循“软→硬→网络”的思路:先确认软件安装齐全,再检查路径和驱动,最后考虑网络下载因素。新手容易一遇到问题就卸载重装,其实很多情况下重装反而更浪费时间,因为问题不在安装程序本身。
6.2 两个容易被忽略的“小故障”:工程树不见了、界面打不开
有读者经常问:“Keil5 左侧目录怎么显示?”这不是安装问题,而是界面布局的坑。点击菜单View -> Project Window,左侧项目树就会重新出现。如果左边整个侧边栏都消失了,可以在View -> Layout里选择恢复默认布局,几秒钟就能回到标准界面。
还有一个频率很高的问题是:“STM32CubeMX 打不开怎么回事?”如果你用管理员身份运行、路径也没有中文,却依然没反应,八成的可能是下载缓存损坏。打开C:\Users\你的用户名\STM32Cube\Repository目录,把里面不完整的临时文件和损坏的下载目录删掉,再重新启动软件。CubeMX 会自动重新下载缺失的文件,问题基本就解决了。记住,不要一看打不开就重装整个软件,很多问题其实是残留的坏文件在作怪。
最后分享一个我的使用习惯。我把 CubeMX 的 Repository 目录固定到一个非系统盘,然后用移动硬盘备份了整套固件包。后来换电脑、重装系统时,只要把这个文件夹放回同样位置,CubeMX 打开后就能直接识别,一次都不用重新下载。这种办法我推荐给每一个被下载慢毒打的同学,节省下来的时间够你再调十个 LED 了。装环境这件事,说到底不是拼智商,拼的是耐心和细节习惯。流程没跑偏,最终一定能得到一套稳定顺手的 STM32 开发环境。