尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

STM32CubeMX与Keil5联合开发环境搭建全攻略:从零安装到点灯

STM32CubeMX与Keil5联合开发环境搭建全攻略:从零安装到点灯 很多刚开始学STM32的同学还没见开发板点亮LED就先被环境搭建劝退了。网上资料又多又杂搜“STM32CubeMX”出来一堆版本和安装包搜“Keil5”又会发现什么C51、MDK、注册机……乱成一锅粥。这篇教程我就把STM32CubeMX和Keil5这两样最常用的STM32开发工具从零开始拆开讲清楚每一步都写到你不会走错路为止。STM32CubeMX是个图形化配置工具选芯片、定引脚、配时钟在界面上点一点就能生成初始化代码。Keil5则是编译、下载、调试用的IDE两个工具搭配使用是目前自学和项目开发最主流的STM32开发环境组合。这篇教程适合完全没有装过环境的新手也适合按网上教程装了一半、卡在某个报错上的同学。按这个顺序完整走一遍你基本能顺利把第一个STM32工程跑起来。1. 认识你的两个工具先弄明白在装什么1.1 STM32CubeMX是什么为什么大家都在用STM32CubeMX是ST官方出品的图形化配置工具你可以在里面选择任意一款STM32芯片然后通过可视化的方式配置引脚功能、时钟树、外设参数最后自动生成C语言的初始化代码工程。它最大的价值是把“配置芯片”这件事从手写代码变成了操作界面。以前写一个串口初始化你要翻参考手册查寄存器、算波特率、写结构体、调参数现在CubeMX里勾选串口、填好波特率代码自动生成而且初始化顺序、时钟使能这些细节它都会帮你处理妥当。打个比方手写寄存器初始化就像是自己买菜、切菜、炒菜CubeMX则像一份预处理好的半成品料理包你把核心流程控制住基础的初始化它帮你提前做好了。这也是为什么从学校课程到企业项目用CubeMX的人越来越多。你只需要把注意力放在业务逻辑或者算法上而不是反复写那些一成不变的底层初始化代码。实际工作中哪怕是经验丰富的工程师也基本默认用CubeMX先把工程骨架拉出来再往里填自己的代码。1.2 Keil5 MDK到底是什么版本Keil这个名字非常容易把新手搞晕它其实是一个软件家族的统称里面分成两大产品线C51和MDK。C51是给老式8051内核单片机用的MDK是给ARM内核用的而STM32就是ARM内核。所以你要装的是“MDK-ARM”也就是大家俗称的Keil5或者MDK5。如果你以前为了学51单片机装过Keil C51这里要特别注意MDK和C51理论上可以共存但必须装在不同的目录里不然会互相覆盖。网上很多人没注意装完发现打开的界面还是C51或者芯片列表里根本找不到STM32多半就是这个原因。另外MDK从5.x版本开始改变了芯片支持方式芯片型号不再内置在软件里而是通过外部的支持包Pack单独安装。所以你后面会有一个专门步骤让Keil认识STM32芯片。这个后面我会详细讲。2. 下载与准备用对版本才能少踩坑2.1 下载渠道和版本选择先说STM32CubeMX去哪下载。最正规的是去ST官网搜索“STM32CubeMX”进入工具页面后选择对应操作系统版本一般需要注册一个ST账号才能下载。如果官网页面找起来不顺手直接搜索“STM32CubeMX download”也可以搜到官方软件入口。国内很多论坛和网盘也有同步的安装包下载速度更快但要注意核对文件名和版本号。再说Keil MDK去Keil官网进入Products菜单找到MDK-ARM下载页面下载MDK软件包。这里下载到的是一个.exe格式的安装程序文件名一般类似MDK533.exe或者MDK539.exe。要特别提醒的是下载时认准MDK-ARM不要手滑选成C51版本这两个东西的安装文件名和安装界面长得非常像。版本怎么选CubeMX版本越新界面越现代功能也越多新版本一般会自带MCU固件包管理功能。Keil MDK 5.37以前的版本默认还能用ARM Compiler 5AC5编译器5.37及以后版本默认是AC6。AC6编译速度快、新功能多但如果你以后想用一些老工程或者某些老教程的代码可能会遇到兼容问题。所以我的建议是新手就下载当前官网推荐的稳定版本不用刻意追新也不会太老。2.2 装前准备路径、权限和驱动正式安装前有3件小事情务必先处理否则后面容易出幺蛾子。第一安装路径不要出现中文和空格。我见过很多同学把软件装到“D:\软件\ST\”目录结果CubeMX启动时各种报错或者Keil编译时找不到文件。推荐用最朴素的路径比如C:\STM32CubeMX、C:\Keil_v5这些是我实测非常安稳的目录。第二杀毒软件和Windows Defender的问题。安装过程中可能提示有“注册机”“激活工具”之类的文件被拦截建议在安装期间暂时关闭实时保护或者把安装目录加入白名单。如果你用的是正版授权这一步可以完全跳过。第三驱动准备。STM32开发板最常见的调试下载器是ST-Link旧款是ST-Link/V2新款是ST-Link/V3。Win10和Win11系统一般会自动识别但有些精简版系统或者老版本会不认需要单独安装ST-Link USB驱动。另外如果你的开发板用了CH340串口芯片那还要装对应的USB转串口驱动否则后面看串口打印信息时会找不到COM口。3. 先把STM32CubeMX装好3.1 Java环境先搞定STM32CubeMX是基于Java的图形界面程序所以电脑上得有一个可用的Java运行环境。新版本CubeMX的安装包里其实已经内置了JRE大多数情况下你不需要额外装Java就能直接跑起来。但总有一部分电脑会在启动时报错提示找不到java运行库或者双击图标没反应。如果你遇到这种情况解决思路很简单手动装一个Java运行时。去Oracle官网下载JDK或者JRE建议安装JDK 8或者JDK 17这类长期支持版本一路Next装完。装完之后最好手动配置一下环境变量新建JAVA_HOME指向你的Java安装目录比如C:\Program Files\Java\jdk-17然后在Path变量里追加%JAVA_HOME%\bin。配置完环境变量最稳妥的验证方法是打开命令提示符输入java -version如果能看到版本输出说明Java环境没问题。这一步不是每次都必须但如果你是“双击图标没反应”的受害者这套排查思路能救你一次。3.2 安装CubeMX与中文界面设置Java的问题解决后双击CubeMX安装包。安装过程基本就是一路Next语言选默认的English即可。安装目录按前面说的改成C:\STM32CubeMX不建议装C盘系统盘以外的复杂路径也不要装在带空格的路径里。安装完成后第一次打开界面可能是英文的。CubeMX新版本支持在菜单File - Settings - Language里把界面语言切换成中文。这里要说明白所谓汉化只是把菜单、按钮等主要界面元素翻译成中文芯片引脚配置区域、底层寄存器状态这些内容仍然是芯片厂商术语不会全变成中文。所以不要指望“完全汉化”能看懂菜单和配置项就够用了。打开CubeMX之后还有一个重要的习惯要养成让它下载你需要的芯片固件包。首次新建工程选择芯片型号时它会提示需要下载对应的固件包比如F1系列对应STM32CubeF1。这一步很考验网络国内直接从ST服务器下载有时很慢。解决办法是挂代理……不对是耐心等待或者去ST官网手动下载固件包压缩包然后在CubeMX的Help - Manage embedded software packages对话框里点击From Local本地导入。这个操作我第一次用时也不知道后来发现能省下大量等待时间。4. 安装Keil5 MDK4.1 认准MDK-ARM版本别装成C51Keil官网的下载页面里MDK-ARM的安装包通常标记为“MDK”或者“MDK-ARM”下载启动界面也会告诉你这是MDK-ARM for Arm Cortex-M Microcontrollers。安装包名里如果带“C51”字样的那是另外的产品不用理它。如果你的电脑已经装了Keil C51想同时保留安装MDK时必须手动指定一个与C51不同的安装目录比如C51装在C:\KeilMDK就装在C:\Keil_v5。两个版本的桌面图标长得几乎一样但打开后界面里的芯片列表完全不同。C51里只有8051系列MDK里才有ARM和STM32系列。我遇到过一个同学安装时图省事一路Next结果MDK把C51覆盖了后面调51程序时欲哭无泪。还有一点容易被忽略MDK的安装路径不要装到系统和软件默认的C:\Program Files\Keil_v5之外的那种带括号的路径即可其实官方默认路径也带Program Files但从经验看统一装到C:\Keil_v5这种简洁路径后面遇到各种奇怪问题的概率会小很多。4.2 MDK安装过程和许可证激活双击MDK安装包会进入安装向导。前几步就是同意协议、选择产品类型。在是否安装“Segger J-Link”驱动的页面上建议保持勾选之后开发板上的J-Link和ST-Link调试器都有机会用到。接下来会让你填写User Name和Company Name随便填英文即可。安装过程中特别注意当它询问是否安装“STM32的PACK包”时不同版本表现不一样。新版MDK在安装完成后会自动打开Pack Installer但芯片包大多数情况下还是要自己添加。装完之后桌面会出现Keil uVision5图标第一次打开会弹出一个License Management窗口显示你目前处于评估模式或者还有多少天试用期。关于激活我建议走正规路线。如果你所在公司买了正版授权把License文件或激活码输入到File - License Management - Single-User License里即可。学生自己学习的话很多高校实验室有批量授权可以找学长或老师要一份。“注册机”这种词在网络上一搜一大把但我不推荐用一方面有版权风险另一方面注册机文件经常被杀毒软件查杀还可能夹带恶意代码。学习的价值在于把环境搭好、把代码跑通不要为省一点授权费给自己电脑引入安全隐患。5. 芯片支持包安装让Keil认识STM325.1 用Pack Installer安装F1芯片包很多人装完Keil打开工程时在Device选择列表里找不到STM32F103C8T6直接就慌了。其实原因很简单MDK 5之后的芯片型号不是内置的而是通过Pack支持包的方式从网上下载的。你还没装芯片包Keil自然认不出STM32。正规操作是这样打开Keil uVision5在工具栏上找到一个长得像向下箭头的方块图标或者通过菜单Pack Installer进入安装器。在Pack Installer里左侧是芯片型号列表中间是Pack发布记录。你展开STMicroelectronics目录找到STM32F1 Series在对应的STM32F1xx_DFP包后面点击Install它就会自动在线下载安装。这个操作对F1系列很有用STM32F103、STM32F105这些都属于F1系列。如果你用的是F4系列比如STM32F407那就安装STM32F4xx_DFP。安装完成后回到Keil的工程配置界面Device下拉列表里就会出现对应的STM32型号。我自己装过无数次这一步只要做对了芯片选择从来不会出问题。5.2 芯片包下载失败的几条退路在线Pack Installer最大的问题就是下载速度慢或者直接卡死在Downloading状态。很多脾气好的同学等到怀疑人生還以为是软件坏了。这里我提供两个备选方案。第一个方案去Keil官网的Pack页面找到Keil.STM32F1xx_DFP对应版本的.pack文件手动下载到本地。拿到.pack文件后有两个安装方式一是直接双击.pack文件系统会自动调用Pack Installer完成安装二是在Pack Installer里选择File - Import手动定位到.pack文件导入。我推荐直接双击简单省事。第二个方案如果你之前用CubeMX已经下载好了STM32CubeF1固件包那在Keil里新建工程时它会自动识别到本地的固件库文件相对会顺畅一点。但CubeMX的固件包和Keil的DFP包是两个独立的东西不能互相替代所以该装的芯片支持包还是得装。还有个常见问题是安装完.pack后Keil列表里还是找不到芯片。这时候可以去Pack Installer右上角的Refresh按钮刷新一次或者直接把整个Keil软件关掉重开。如果还不行大概率是安装路径出问题了检查一下Keil安装目录里有没有Packs文件夹正常安装后里面应该有Keil\STM32F1xx_DFP这样的目录。6. 第一个联合工程从CubeMX到Keil下载6.1 用CubeMX配置一个最小系统并生成代码环境都装好了现在就进入最激动人心的环节用CubeMX生成一个点灯工程。我拿最常见的STM32F103C8T6蓝色药丸开发板举例。打开CubeMX选择File - New Project在芯片搜索框里输入STM32F103C8T6双击选中。进入配置界面后你会看到芯片引脚图。先做三件事。第一件事配置时钟源。左侧Categories里找到System Core - RCC在右侧的High Speed Clock (HSE)下拉框选择Crystal/Ceramic Resonator这表示使用板载外部晶振。如果你的开发板没有外部晶振或者你想省事也可以把HSE设置为Disabled直接用内部RC时钟但这样后面配置时钟树时最高频率只有64MHz有点亏。我建议还是用外部晶振因为板子上几乎都会带一个8MHz晶振。第二件事配置时钟树。点击Clock Configuration页签在HSE旁边的PLL Source Mux上选择HSE然后在PLLM、PLLN、PLLP这些参数上设置倍频分频系数。对于F103来说经典配置是8MHz外部晶振经过PLL倍频到72MHz系统主频具体参数填入后你会看到一个HCLK显示为72MHz。如果CubeMX界面里显示红色说明时钟参数冲突试着把数值改回常规默认值即可。这里不用追求太复杂的倍频计算选系统默认生成的72MHz即可。第三件事配置一个GPIO输出用来点灯。左侧找到System Core - GPIO在右侧芯片引脚图上用鼠标点要控制的引脚比如PA5然后把它配置为GPIO_Output默认输出电平设为High。旁边还可以配置引脚标签比如输入LED这样生成的代码里就有了LED_Pin这样的别名写代码时直接操作很直观。最后一步是工程设置。点击Project Manager页签Toolchain/IDE下拉框选择MDK-ARMMinimum Version不用管Project Name填LED_blinkLocation路径选择一个目录注意不要有中文。保存后点击右上角的GENERATE CODE按钮CubeMX会生成到指定目录。生成完成后弹窗提示打开工程你确认后它就会用Keil打开生成的工程。6.2 在Keil里编译下载让代码跑起来生成的工程目录里有个MDK-ARM文件夹里面的.uvprojx是Keil工程文件。打开后你的项目里会看到很多Application/User/Core这些目录那是CubeMX生成的初始化代码结构别乱删。先把这个程序编译一下。在Keil工具栏点Build按钮或者按F7底部Output窗口会显示编译信息。如果你看到0 Error(s), 0 Warning(s)恭喜工程搭建成功。如果你看到一堆红色报错大概率是编译器版本问题点开魔术棒图标Options for Target在Target页签里的ARM Compiler下拉框检查一下编译器版本建议选择Use default compiler version 5这是老工程兼容性最好的设置。接下来配置下载器。用ST-Link调试器的同学记得接线SWDIO、SWCLK、GND、3.3V四根线一定不要接反。在Keil里点魔术棒进入Debug页签在左侧下拉框里选择ST-Link Debugger然后点旁边的Settings按钮。如果显示连接成功说明ST-Link已识别如果显示找不到设备去检查驱动和设备管理器。随后在Flash Download页签里勾选Reset and Run并确认Programming Algorithm里至少有一个STM32F10x Flash算法如果没有点击Add添加。这一步是烧录失败的头号凶手很多人忽略了这个算法结果每次下载都弹错。配置好后点工具栏上的LOAD按钮或者按F8程序就下载到芯片里了。如果一切顺利你会在底部的Output窗口看到Application running之类的字样板上的LED灯开始按你写的代码闪烁。到这一步你的STM32开发环境就算是彻底打通了后面学什么串口、定时器、I2C、SPI都是在这个流程上做加法。7. 高频问题排查和几条实用建议7.1 高频问题速查表我整理了一份环境搭建过程中出现频率最高的问题对照表每一行都是我或身边朋友实际踩过的坑按图索骥基本可以自愈。现象常见原因解决办法CubeMX双击没反应Java环境缺失或损坏手动安装JRE/JDK配置JAVA_HOME命令行验证java -versionCubeMX里芯片固件包下载慢或失败网络问题官网手动下载固件包在CubeMX中本地导入Keil里找不到STM32芯片型号MDK芯片支持包未安装Pack Installer安装对应的STM32F1xx_DFP或F4xx_DFPMDK打开后还是51单片机的界面装了C51版或MDK覆盖了C51确认安装的是MDK-ARM且与C51安装目录不同编译报错Target not created编译器版本不兼容魔术棒Target页签选择Use default compiler version 5烧录失败Flash Download failed下载算法未添加或芯片被锁Debug设置里Add STM32F10x Flash算法检查Boot0引脚必要时擦除芯片ST-Link无法识别USB设备驱动未装或USB线有问题重新安装ST-Link驱动换USB线试试Keil左侧的工程目录树不见了误关了Project窗口菜单View - Project Window或快捷键CtrlJ打开7.2 几条我用经验换来的建议第一不要迷信“最新版”。有些人习惯下载软件最新版但STM32CubeMX和Keil MDK的老版本配合非常默契新版本偶尔有界面改版和编译链调整。如果是初学者用官方稳定版、保持跟教程一致的版本踩坑概率会小很多。等环境搭好、基础流程跑熟再考虑升级不迟。第二保存工程时养成分目录习惯。每个项目单独建文件夹CubeMX的.ioc文件、MDK工程文件、文档都放好不要全堆在桌面。一个工程里同时存在CubeMX和Keil两套文件结构刚开始你会觉得乱但这也是一个工程师的基本素养。第三遇到问题先看日志和设备管理器。很多人一遇到报错就到处复制粘贴求助其实先看Output窗口里的红色信息、设备管理器里有没有感叹号你自己就能判断八成原因。排查能力比安装软件重要得多这也是我从新手走过来的最大体会。最后一个小技巧CubeMX生成的初始化代码里MX_GPIO_Init这些函数以后别手动乱改如果你在CubeMX里改了配置并重新生成你的改动会被覆盖。正确做法是把自己写的逻辑放到while(1)主循环里或者单独建一个user文件。这个习惯我从一开始就强调能帮你避免以后把环境搭好后一改配置就白干的尴尬。
返回列表