ARTICLE DETAIL

资讯详情

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

STM32开发环境搭建全攻略:CubeMX与Keil5安装配置避坑指南

STM32开发环境搭建全攻略:CubeMX与Keil5安装配置避坑指南 1. 为什么STM32开发环境总在第一步就卡住人搞STM32开发的人十个里有八个在装环境这一步骂过娘。不是危言耸听我自己带过的几个新人包括当年我自己第一次装STM32CubeMX加Keil5这套组合拳的时候没有一个是顺顺利利走完的。要么是CubeMX固件包下载卡在99%不动要么是Keil5装完发现芯片包没装、新建工程找不到器件要么是编译报一堆莫名其妙的错误最后发现是路径里有中文。这套工具链本身并不复杂但它的坑特别分散——散落在下载、安装、激活、芯片包、固件包、工程配置这六七个环节里每个环节都有自己独立的失败模式。网上教程虽然多但大部分是三五年前的截图界面早就变了照着做反而更容易迷路。所以这篇内容我打算把整个流程从头到尾捋一遍重点讲清楚每一步为什么这么做、哪里最容易翻车、翻车了怎么救回来。这篇文章面向的是完全没有STM32开发经验的新手或者之前装过但没装明白、想彻底重来一遍的人。我会从零开始把STM32CubeMX和Keil5 MDK的获取、安装、配置、联调全部走通最后能新建一个完整的工程并且编译通过。中间涉及到的每一个选择我都会解释背后的原因让你不只是照抄步骤而是真正理解这套工具链是怎么协作的。先给一个全局认知STM32CubeMX负责的是芯片外设的图形化配置和初始化代码生成Keil5 MDK负责的是代码编辑、编译和下载调试。两者是配合关系不是替代关系。很多人搞混这一点以为装了CubeMX就不用装Keil或者反过来结果白白折腾半天。下面我们一步一步来。2. 装之前先把这几个概念理清楚2.1 CubeMX和Keil5各自管什么STM32CubeMX是ST官方出的图形化配置工具。你选好芯片型号之后它用图形界面让你点选时钟树、引脚分配、外设参数然后一键生成初始化代码。生成的代码是HAL库或者LL库的框架你只需要在指定的用户代码区域里填自己的业务逻辑就行。它的核心价值是把时钟树计算、引脚冲突检查、外设初始化这些容易出错的事情自动化了。Keil5 MDK是ARM官方的集成开发环境负责编译、链接、下载、调试。它本身不认识STM32需要安装对应的器件支持包Device Family Pack简称DFP或者芯片包才能识别STM32的芯片型号。这一点是新手最容易忽略的——装完Keil5不等于就能开发STM32你还得装芯片包。两者配合的典型流程是CubeMX里配置好外设生成Keil工程然后用Keil打开工程进行编译和下载。CubeMX生成的工程已经包含了Keil需要的工程文件结构所以不需要你手动去建工程。2.2 版本选择别追最新追最稳STM32CubeMX的版本更新比较频繁但并不是越新越好。新版本有时候会改固件包的管理方式或者对某些老芯片的支持有变化。我的建议是选一个发布至少半年以上、社区反馈稳定的版本。截至我写这篇内容的时候CubeMX 6.x系列的后期版本是比较稳妥的选择。Keil5 MDK这边版本号一般是5.3x系列。同样不建议追最新因为新版本可能对某些调试器的兼容性有调整。选一个5.36到5.40之间的版本基本能覆盖绝大多数STM32芯片的开发需求。还有一个关键点Keil5 MDK和Keil C51是两个独立的安装包。如果你之前装过Keil C51做51单片机开发想让它和Keil5 MDK共存需要装到不同的目录下否则会互相覆盖。这一点后面会详细说。2.3 安装路径的铁律不管你装CubeMX还是Keil5安装路径里绝对不要出现中文、空格和特殊字符。这不是建议是铁律。Keil5的编译器对路径中的非ASCII字符处理有问题路径里有中文会导致编译时报找不到文件的错误而且报错信息往往指向一个完全不相关的地方排查起来非常痛苦。推荐的路径格式是这样的D:\STM32\STM32CubeMX D:\STM32\Keil_v5 D:\STM32\Pack统一放在一个英文短路径下后续管理固件包和芯片包也方便。C盘空间够的话放C盘也行但考虑到固件包和芯片包动辄几个G放D盘更稳妥。注意如果你电脑的用户名是中文某些工具在默认路径下会出问题。安装时手动把路径改到D盘根目录下的英文文件夹能避开这个坑。3. STM32CubeMX的获取与安装全流程3.1 下载渠道与版本确认STM32CubeMX的官方获取渠道是ST的官网。搜索STM32CubeMX就能找到产品页面页面上会有下载按钮。下载之前需要注册一个ST账号这个账号是免费的用邮箱注册就行。注册过程中会要求填写一些基本信息如实填就好。下载的时候注意选对操作系统版本Windows用户选Windows版本。下载下来的文件是一个安装包大小在几百兆左右。如果下载速度慢可以尝试换一个时间段或者用浏览器的断点续传功能。这里要提醒一句网上有很多第三方网站提供的绿色版或者破解版CubeMX我不建议用。CubeMX本身是免费的不需要破解第三方版本反而可能捆绑了乱七八糟的东西或者版本被改过导致固件包下载异常。3.2 安装过程中的选项含义运行安装包之后会依次出现几个界面。第一个是许可协议勾选同意继续。然后是安装路径选择这里就按前面说的改到英文短路径下。接下来会有一个组件选择的界面通常会让你选是否安装JREJava运行环境。CubeMX是基于Java开发的所以需要JRE。如果你的电脑上已经装了Java它可能会检测到如果没有就勾选让它一起装。这个JRE是CubeMX自带的不会影响你系统里其他Java程序。安装过程大概需要几分钟取决于电脑性能。安装完成后桌面上会出现STM32CubeMX的快捷方式。第一次启动的时候它会让你选择一个工作目录用来存放CubeMX的工程文件和固件包。这个目录同样要选英文路径建议就放在之前建的D:\STM32下面比如D:\STM32\CubeMX_Workspace。3.3 首次启动后的必要设置第一次打开CubeMX界面可能是英文的。如果你想要中文界面可以在菜单栏找到Help然后选择Manage embedded software packages之前先看看有没有语言设置选项。不过说实话CubeMX的中文翻译质量一般有些术语翻译得反而让人困惑。我的建议是直接用英文界面常用的那几个菜单用几次就记住了反而更准确。首次启动后最重要的一件事是检查固件包仓库的路径。在菜单栏找到Help然后Updater Settings里面有一个Repository Folder的选项。确认这个路径指向一个英文目录并且你有写入权限。这个目录就是后面下载STM32固件包的地方固件包会比较大确保所在磁盘有足够的空间建议至少留10个G。4. Keil5 MDK的安装与芯片包配置4.1 Keil5 MDK安装包的选择与安装Keil5 MDK的官方获取渠道是Keil的官网。找到MDK-ARM的下载页面填写一个简单的表单姓名、邮箱、公司等然后就能下载。下载下来的安装包名字类似MDK5xx.exe。安装的时候有几个关键选择。首先是安装路径同样改到英文短路径比如D:\STM32\Keil_v5。然后是用户信息填写随便填一下就行不影响使用。接下来会有一个组件选择界面默认全选就好其中包括了编译器、调试器驱动、示例工程等。安装过程中会弹出一个窗口问你是否安装ULINK驱动或者J-LINK驱动这个根据你实际使用的调试器来选。如果你用的是ST-Link那这两个都不用勾ST-Link的驱动是单独装的。如果不确定可以先都勾上不影响。安装完成后Keil5会提示你安装芯片包。这个提示可以关掉我们后面手动装。4.2 芯片包的获取与安装芯片包Device Family Pack是Keil5识别STM32芯片的关键。没有芯片包你在Keil5里新建工程的时候器件列表里根本找不到STM32的型号。芯片包有两种获取方式。一种是在Keil5里通过Pack Installer在线安装另一种是从Keil官网下载离线包手动安装。在线安装的问题是速度可能很慢而且有时候会断。离线包更稳妥推荐这种方式。离线包的下载页面在Keil官网的MDK器件支持页面找到STMicroelectronics的分类里面会有STM32F1、STM32F4、STM32H7等各个系列的包。你只需要下载你实际用到的系列就行不用全下。比如你用的是STM32F103那就下载STM32F1系列的包。下载下来的包是一个.pack文件双击就能安装。安装程序会自动检测你电脑上的Keil5安装路径确认无误后点下一步就行。安装完成后重新打开Keil5新建工程时就能在器件列表里看到对应的STM32型号了。注意如果你装了多个版本的Keil或者Keil5和Keil C51共存安装芯片包的时候要确认它装到了正确的Keil5目录下。装错了的话Keil5里还是找不到器件。4.3 Keil5和Keil C51共存的注意事项很多学校教51单片机用的是Keil C51而STM32开发用的是Keil MDK。这两个虽然都是Keil公司的产品但它们是独立的软件安装包不同安装目录也必须不同。如果你先装了Keil C51再装Keil5 MDK安装程序可能会提示检测到已有Keil安装。这时候一定要选择安装到不同的目录比如C51装在D:\Keil_C51MDK装在D:\STM32\Keil_v5。装完之后两个软件各自独立运行互不影响。但有一个坑如果你把两者装到了同一个目录后装的会覆盖先装的导致其中一个不能用。如果已经装错了需要把两个都卸载干净然后重新按不同目录安装。卸载的时候注意清理注册表残留否则重装可能还会出问题。5. 让CubeMX和Keil5真正联动起来5.1 在CubeMX中配置工具链CubeMX生成工程的时候需要知道你要用哪个IDE。这个设置在工程配置的Project Manager选项卡里。找到Toolchain / IDE这一项下拉菜单里选择MDK-ARM。旁边还有一个版本选择选你实际安装的Keil5版本对应的选项一般选最新的那个就行。这里有一个细节CubeMX生成的Keil工程文件是.uvprojx格式这是Keil5的工程格式。如果你选错了工具链生成的工程文件Keil5打不开。另外在Project Manager里还要设置工程名称和存储路径。工程名称用英文路径同样用英文。建议在D:\STM32\Projects下面按项目名建子文件夹每个项目独立一个文件夹方便管理。5.2 固件包的下载与管理CubeMX生成工程之前需要先下载对应芯片系列的固件包。这个固件包里面包含了HAL库的源码、启动文件、链接脚本等。没有固件包CubeMX无法生成完整的工程。下载固件包的方式是在CubeMX主界面点击Help然后Manage embedded software packages。在弹出的窗口里找到你芯片对应的系列比如STM32F1展开后勾选最新的固件包版本然后点击Install。CubeMX会自动从ST的服务器下载并安装到之前设置的仓库目录里。这个过程可能会比较慢因为固件包通常有几百兆。如果下载失败检查网络连接或者换一个时间段再试。有时候ST的服务器会抽风多试几次就好。固件包下载完成后在新建工程选择芯片型号的时候CubeMX会自动关联对应的固件包。如果提示找不到固件包回到Manage embedded software packages里确认一下是否真的装好了。5.3 生成第一个Keil工程并编译配置好之后点击GENERATE CODE按钮CubeMX会生成完整的Keil工程。生成完成后它会提示你Open Project点击就能直接用Keil5打开工程。第一次打开工程后先别急着编译。检查一下Keil5的器件支持包是否已经装好。在Keil5的Project菜单里找到Options for Target在Device选项卡里确认芯片型号是否正确。如果这里显示的是空白或者错误的型号说明芯片包没装好需要回去重新装。确认无误后点击编译按钮。第一次编译可能会比较慢因为要编译整个HAL库。编译完成后如果输出窗口显示0 Error(s), 0 Warning(s)那就说明环境完全跑通了。提示如果编译报错说找不到某个头文件大概率是固件包路径或者芯片包路径有问题。检查CubeMX的仓库路径和Keil5的Pack路径是否都指向了正确的英文目录。6. 那些年我们一起踩过的安装坑6.1 固件包下载卡住或报错CubeMX下载固件包的时候最常见的错误是提示cube firmware cannot be installed into repository。这个错误通常是因为仓库目录没有写入权限或者路径里有中文。解决办法是把仓库目录改到一个英文的、有完全控制权限的目录下。还有一种情况是下载进度条卡在某个百分比不动。这通常是网络问题ST的服务器在国内访问有时候不太稳定。可以尝试在Updater Settings里把Connection改成No Proxy或者换一个网络环境再试。如果实在下载不下来也可以从ST官网手动下载固件包的压缩包然后解压到仓库目录里。不过手动解压的目录结构要和CubeMX期望的一致否则还是识别不了。所以优先还是让CubeMX自己下载。6.2 Keil5编译时的路径与中文问题前面反复强调了路径不要有中文这里再展开说一下为什么。Keil5的编译器ARMCC或者ARMCLANG在处理文件路径的时候对非ASCII字符的支持不完善。当路径里有中文时编译器可能找不到文件但报错信息会指向一个看起来完全正常的位置让你以为是代码问题。除了安装路径工程路径、固件包路径、芯片包路径全都要确保是英文。甚至你的Windows用户名如果是中文某些临时文件路径也可能出问题。如果遇到莫名其妙的编译错误先检查所有相关路径。6.3 芯片包安装失败的处理芯片包安装失败的情况也不少见。有时候双击.pack文件没反应或者安装到一半报错。这通常是因为Keil5的安装信息在注册表里不完整安装程序找不到Keil5的路径。解决办法是手动指定安装路径。在安装芯片包的时候如果它没有自动检测到Keil5会有一个浏览按钮让你手动选。选到Keil5的安装根目录比如D:\STM32\Keil_v5然后继续安装。如果还是不行可以尝试用Keil5自带的Pack Installer来安装。打开Keil5在菜单栏找到Pack Installer在里面找到对应的芯片包点击Install。这种方式是从本地缓存或者在线源安装有时候比双击.pack文件更可靠。6.4 调试器连接失败的排查思路环境装好了工程编译通过了但下载的时候连不上芯片这也是高频问题。排查思路是这样的先确认调试器驱动装好了。ST-Link需要装ST-Link驱动J-Link需要装J-Link驱动。在设备管理器里看看有没有识别到调试器设备有没有黄色感叹号。然后确认Keil5里的调试器配置。在Options for Target的Debug选项卡里选择正确的调试器类型。如果是ST-Link选ST-Link Debugger然后点旁边的Settings看看能不能识别到芯片的ID号。如果识别不到检查接线是否正确SWDIO、SWCLK、GND、VCC这四根线有没有接错。还有一个常见问题是芯片的复位方式。有些板子的复位电路设计得比较特殊需要在Keil5的调试设置里把Reset方式改成SYSRESETREQ或者VECTRESET。这个要根据具体板子来试。7. 装完之后怎么验证环境真的没问题7.1 用最小工程做一次完整验证环境装完不代表就能用得实际跑一遍才知道。最可靠的验证方式是新建一个最小工程在CubeMX里选一个你手头有的芯片型号只配置一个GPIO输出和一个系统时钟不配任何复杂外设然后生成Keil工程编译下载看GPIO能不能正常翻转。这个最小工程能跑通说明CubeMX、Keil5、芯片包、固件包、调试器这一整条链路都是通的。后面再遇到问题就可以排除环境因素专心查代码或者硬件。7.2 检查固件包版本和芯片包的匹配有时候环境看起来没问题但编译出来的程序运行不正常可能是固件包版本和芯片包版本不匹配。比如CubeMX用的固件包是较新的版本而Keil5里的芯片包是较老的版本两者对某些寄存器的定义可能不一致。检查方法是在CubeMX的Manage embedded software packages里看固件包版本在Keil5的Pack Installer里看芯片包版本。尽量让两者都是较新的稳定版本。如果发现不匹配更新其中一个到兼容的版本。7.3 备份你的环境配置环境装好之后建议做一次备份。把CubeMX的仓库目录、Keil5的安装目录、芯片包目录都复制一份到移动硬盘或者另一个分区。这样万一系统重装或者环境被搞坏了可以直接恢复不用从头再装一遍。特别是固件包和芯片包下载一次不容易备份好了能省很多时间。CubeMX的仓库目录里就是所有下载过的固件包整个目录复制走就行。Keil5的芯片包在安装目录的Pack文件夹下同样整个复制走。8. 关于这套工具链的一些个人体会我带过的新人里装环境卡最久的一个花了整整两天。最后发现是Windows用户名里有中文导致CubeMX的临时文件路径出问题。改成英文用户名之后十分钟就装完了。所以如果你问我装这套环境最重要的经验是什么我会说把所有路径都改成英文能避开百分之八十的玄学问题。另一个体会是不要同时装多个版本的Keil。有些人电脑里既有Keil4又有Keil5还有Keil C51芯片包装得乱七八糟最后哪个都用不了。如果确实需要多个版本一定要装到完全独立的目录下并且每次装芯片包的时候确认装到了正确的Keil里。最后说一个容易被忽略的点CubeMX生成的工程里用户代码要写在/* USER CODE BEGIN */和/* USER CODE END */之间。如果你把代码写在这两个标记外面下次用CubeMX重新生成代码的时候你写的代码会被覆盖掉。这个坑我踩过辛辛苦苦写的逻辑一键回到解放前。所以从第一次用CubeMX开始就养成把代码写在指定区域的好习惯。
返回列表