ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32CubeMX 6.14全流程实战:从下载配置到代码生成与烧录

STM32CubeMX 6.14全流程实战:从下载配置到代码生成与烧录 1. 为什么STM32CubeMX 6.14值得单独写一篇全流程STM32CubeMX这个工具搞STM32开发的人基本都绕不开。但说实话我见过太多人卡在第一步——下载和配置。不是他们能力不行而是这个工具的版本迭代、固件包管理、代码生成逻辑确实有不少坑。6.14这个版本在2024年发布后我前后在五六台机器上装过有Windows 10、Windows 11也帮同事在Ubuntu上折腾过。每次都能遇到不一样的问题有时候是Java环境不对有时候是固件包下载卡住有时候是生成的代码跟Keil版本对不上。这篇内容就是把我这些年反复安装、配置、踩坑的经验一次性整理出来。从官网下载开始到固件包安装、时钟树配置、外设初始化、代码生成再到跟Keil和VSCode的联动每一步我都会说清楚为什么这么做以及不这么做会出什么问题。适合刚接触STM32的新手也适合换了新电脑需要重新搭环境的老手。你不需要有很深的嵌入式基础但至少得知道什么是单片机、什么是GPIO不然配置的时候会不知道自己在点什么。STM32CubeMX本质上是一个图形化的配置工具它帮你把STM32的引脚、时钟、外设、中断这些底层寄存器操作变成可视化的勾选和填表。你点完鼠标它生成初始化代码你拿着这套代码去写业务逻辑就行。听起来很简单但实际用起来光是固件包的下载和版本匹配就能卡住不少人。6.14版本在界面响应和固件管理上比早期版本好了很多但依然有一些隐藏的坑比如默认的固件仓库路径、Java运行环境的版本要求、生成代码时Toolchain的选择逻辑等等。我写这篇的目的很简单让你在第一次打开STM32CubeMX 6.14的时候就知道每一步该点什么、为什么这么点、点错了怎么退回来。不扯虚的直接上操作。2. 下载前的环境准备与版本选择2.1 确认你的操作系统和Java环境STM32CubeMX 6.14是基于Java开发的所以不管你用Windows还是Linux机器上必须有一个能跑的Java运行环境。官方推荐的是Java 8或Java 11但我实测下来Java 17也能跑只是偶尔在打开某些老固件包的时候会弹警告。如果你机器上已经装了Java可以在命令行里敲java -version看一下版本。如果没有去Oracle官网或者用OpenJDK都行我个人习惯用OpenJDK免费且干净。Windows用户注意一点如果你之前装过其他版本的STM32CubeMX比如5.x或者6.0建议先把旧版本卸载干净包括用户目录下的.stm32cubemx文件夹也删掉。这个文件夹里存的是你的固件包仓库路径和偏好设置新旧版本混用有时候会导致固件包识别不出来。我遇到过好几次明明固件包下载了但新建工程的时候就是找不到对应的芯片系列最后发现是旧配置文件在捣乱。Linux用户相对省心一些但要注意权限问题。如果你把STM32CubeMX装在/opt目录下记得给当前用户读写权限否则后面下载固件包的时候会提示写入失败。我一般直接解压到用户主目录下的tools文件夹里省去权限的麻烦。2.2 从官网获取安装包的注意事项STM32CubeMX的安装包只从官网下载别去第三方站点找。官网的下载页面有时候加载比较慢尤其是国内网络环境但耐心等一等总能出来。下载的时候你会看到两个选项一个是Windows的exe安装包一个是Linux的通用安装包。Windows用户直接下exe双击安装就行。Linux用户下那个.zip或者.tar.gz解压后运行里面的STM32CubeMX可执行文件。这里有个细节官网下载页面会要求你登录账号。如果你没有账号注册一个就行免费的。注册的时候邮箱填真实的因为后面固件包下载有时候也需要登录状态。我试过不登录直接下安装包有时候能下有时候下到一半断了所以还是老老实实登录。安装路径的选择也有讲究。Windows下默认是C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX我建议改成C:\ST\STM32CubeMX路径短一点后面固件包路径太长容易出问题。另外路径里不要有中文和空格这是很多嵌入式工具的通用禁忌STM32CubeMX虽然对中文路径的兼容性比早期版本好了但固件包解压的时候偶尔还是会因为路径里的特殊字符报错。2.3 安装过程中的选项勾选Windows安装程序会问你几个问题是否创建桌面快捷方式、是否关联.ioc文件、是否安装ST-Link驱动。我的建议是全部勾上。.ioc文件是STM32CubeMX的工程文件关联之后双击就能打开工程很方便。ST-Link驱动更是必须的你后面下载程序到芯片里全靠它。如果你已经装过ST-Link Utility或者Keil里的ST-Link驱动这里可以不勾但勾上也没坏处安装程序会自动处理版本冲突。安装完成后第一次启动STM32CubeMX会弹出一个许可协议接受就行。然后它会问你要不要检查更新我一般选“否”因为6.14已经是我要用的版本不想让它自动升到更新的版本免得界面和操作逻辑又变。如果你后面想升级可以在Help菜单里手动检查。3. 固件包的下载与仓库管理3.1 固件包是什么为什么必须单独下载STM32CubeMX本身只是一个配置工具它不包含任何芯片的底层驱动代码。你新建工程的时候它需要从固件包Firmware Package里读取对应芯片系列的外设驱动、启动文件、链接脚本这些内容。固件包是按芯片系列分的比如STM32F1系列一个包STM32F4系列一个包STM32H7系列又一个包。每个包都挺大几百兆到一两个G不等。6.14版本默认不会自动下载所有固件包你需要手动选择。新建工程的时候如果你选的芯片系列对应的固件包还没下载它会提示你下载。这时候你可以直接点下载也可以先去Help菜单里的“Manage embedded software packages”里提前把常用的包下好。我习惯后者因为一次性下完后面新建工程就不用等了。固件包的下载源在国外国内下载速度有时候很慢甚至断连。我的经验是尽量在晚上或者早上网络空闲的时候下或者用官方的离线包。ST官网也提供固件包的独立下载你可以下下来手动放到仓库目录里。仓库目录默认在C:\Users\你的用户名\STM32Cube\Repository你可以在这个目录里看到已经下载的固件包文件夹每个文件夹名字就是对应的固件包版本号。3.2 固件包版本的选择逻辑固件包有很多版本比如STM32F1系列有1.8.0、1.8.5、1.8.6等等。选哪个版本我的原则是新项目用最新稳定版老项目保持原版本。最新版通常修复了一些bug支持了新的芯片型号但偶尔也会引入新的问题。如果你是在维护一个已经量产的项目不要轻易升级固件包版本因为底层驱动的细微变化可能导致时序或者功耗的差异。6.14版本在固件包管理上有一个改进它会在你新建工程的时候自动推荐一个跟当前CubeMX版本匹配的固件包版本。你可以直接用它推荐的也可以手动选其他版本。我一般会看一眼推荐版本的发布日期如果是最近半年内的就用它如果是一两年前的我会去官网看看有没有更新的版本。还有一个细节有些固件包是“补丁包”形式比如你下了1.8.0然后又有一个1.8.1的补丁你需要先下1.8.0再下补丁。6.14会自动处理这种依赖关系但下载的时候要保证网络稳定不然补丁下了一半固件包就处于损坏状态新建工程的时候会报错。遇到这种情况把对应的固件包文件夹整个删掉重新下载就行。3.3 离线安装固件包的方法如果你网络实在不行或者公司内网限制下载可以用离线安装的方式。去ST官网找到对应芯片系列的固件包下载那个.zip文件。然后打开STM32CubeMX在Help菜单里选“Manage embedded software packages”点左下角的“From Local”选择你下载的zip文件它会自动解压到仓库目录里。离线安装的时候要注意zip文件的文件名不要改保持官网下载时的原始名字。STM32CubeMX会根据文件名里的版本号和芯片系列来识别改了名字可能就识别不出来了。另外解压后的文件夹结构也要保持原样不要自己重新组织目录。我帮同事装过好几次离线包最常遇到的问题是他下载的zip文件不完整解压的时候报错。所以下载完先检查一下文件大小跟官网标注的对比一下差太多就重新下。4. 新建工程的完整配置流程4.1 芯片选型与工程命名打开STM32CubeMX 6.14点“New Project”你会看到一个大大的芯片选择界面。你可以按芯片型号搜索比如输入“STM32F103C8”它会列出匹配的型号。也可以按系列筛选比如选STM32F1系列然后从列表里挑。我一般直接搜型号快。选好芯片后右边会显示这个芯片的资源概览多少Flash、多少RAM、有哪些外设、封装类型是什么。确认无误后点“Start Project”。这时候它会让你输入工程名称和保存路径。工程名称用英文不要有空格和特殊字符。保存路径也尽量短比如D:\STM32_Projects\LED_Blink。路径太长的话后面生成代码的时候可能会因为Windows的路径长度限制报错。工程命名还有一个细节如果你后面打算用Keil或者IAR打开工程名称最好跟你的项目名一致这样生成的工程文件名字也一致不容易搞混。我见过有人工程名叫“test”生成的Keil工程也叫“test”结果电脑里好几个“test”根本分不清哪个是哪个。4.2 时钟树配置的核心逻辑时钟树是STM32CubeMX里最让人头疼的部分但也是最核心的部分。STM32的时钟源有好几个内部高速时钟HSI、外部高速时钟HSE、内部低速时钟LSI、外部低速时钟LSE。你板子上的晶振决定了你能用哪个。大部分开发板用的是8MHz的外部晶振接在HSE上。配置时钟树的步骤先在“Pinout Configuration”里找到“System Core”下的“RCC”把High Speed Clock (HSE)设成“Crystal/Ceramic Resonator”。然后切到“Clock Configuration”标签页你会看到一个树状的图。在HSE那一栏输入你的晶振频率比如8MHz。然后PLL的倍频系数、AHB分频、APB分频这些根据你的芯片手册来设。以STM32F103C8T6为例最高主频是72MHz。8MHz的晶振经过PLL 9倍频得到72MHz然后AHB不分频APB1分频系数为2因为APB1最高36MHzAPB2不分频。这样配置下来系统时钟72MHzAPB1外设时钟36MHzAPB2外设时钟72MHz。这些参数在芯片参考手册的时钟树章节都有详细说明配置的时候对着看就行。如果你不想手动算STM32CubeMX有一个“Auto”按钮你点一下它会自动帮你算出合法的配置。但自动配置有时候会选一个比较保守的方案比如主频只跑到48MHz而不是72MHz。所以我还是建议手动配配完之后检查一下各个总线的频率有没有超过手册规定的最大值。4.3 外设初始化的勾选与参数设置时钟配好后回到“Pinout Configuration”页面开始勾选你需要的外设。比如你要点一个LED就找到GPIO选一个引脚设成“GPIO_Output”。然后在右边的“System Core”里找到GPIO点进去把那个引脚的输出模式设成“Push Pull”速度设成“Low”初始电平设成“High”或“Low”取决于你的LED是高电平点亮还是低电平点亮。如果你要用串口就找到USART选一个模式设成“Asynchronous”然后配置波特率、数据位、停止位、校验位。波特率一般用115200数据位8停止位1无校验。这些参数跟你的串口终端软件要一致不然收到的就是乱码。定时器、ADC、I2C、SPI这些外设的配置逻辑类似先选模式再设参数。每个外设的配置页面都有详细的选项鼠标悬停在选项上会有提示。我建议第一次用的时候把每个选项都点开看看知道它是干什么的。比如定时器的“Counter Period”和“Prescaler”这两个参数决定了定时器的溢出频率。计算公式是溢出频率 时钟频率 / ((Prescaler 1) * (Counter Period 1))。你要定时1ms就根据这个公式反推Prescaler和Counter Period的值。4.4 中断与NVIC的配置要点中断配置在“NVIC”页面里。你勾选了某个外设的中断使能后需要设置优先级。STM32的中断优先级分抢占优先级和响应优先级数值越小优先级越高。6.14版本里你可以在NVIC页面直接设置这两个值也可以通过“NVIC Priority Group”来设置优先级分组。优先级分组决定了你有多少位用于抢占优先级多少位用于响应优先级。比如分组2是2位抢占、2位响应那么抢占优先级可以是0-3响应优先级也是0-3。分组的选择取决于你的应用需要多少级中断嵌套。如果中断不多用默认的分组就行。有一个坑要注意如果你用了FreeRTOS或者其他的RTOS中断优先级的配置有特殊要求。RTOS会占用一个系统滴答定时器中断它的优先级通常设成最低。你其他外设的中断优先级不能比它低否则RTOS的调度会出问题。这个在CubeMX里配置的时候如果你选了FreeRTOS它会自动帮你调整但你要知道它调了什么。5. 代码生成与工程管理5.1 Toolchain的选择与影响在“Project Manager”页面里有一个“Toolchain / IDE”选项。你可以选Keil MDK、IAR、Makefile、STM32CubeIDE等等。选哪个取决于你后面用什么工具写代码。如果你用Keil就选“MDK-ARM”版本选你装的那个。如果你用VSCode加Makefile就选“Makefile”。选不同的Toolchain生成的代码结构不一样。比如选Keil它会生成.uvprojx工程文件选Makefile它会生成Makefile和.ld链接脚本。我两种都用过Keil的好处是图形化配置点一下就能编译下载Makefile的好处是跨平台在Linux和Mac上都能用配合VSCode的Cortex-Debug插件调试体验也很好。6.14版本在Toolchain选择上有一个改进它支持“STM32CubeIDE”作为Toolchain生成的工程可以直接导入STM32CubeIDE。如果你用ST官方的IDE这个选项最省事。5.2 代码生成选项的细节在“Project Manager”的“Code Generator”页面里有几个选项需要特别注意第一个是“Copy only necessary library files”。勾上之后它只复制你用到的外设驱动文件工程体积小。不勾的话它会把整个固件包的驱动都复制过来工程体积大但后面你加新外设的时候不用重新生成。我一般勾上保持工程干净。第二个是“Generate peripheral initialization as a pair of .c/.h files per peripheral”。勾上之后每个外设的初始化代码会单独生成一个.c和.h文件比如gpio.c、usart.c。不勾的话所有初始化代码都堆在main.c里。我强烈建议勾上代码结构清晰后面维护方便。第三个是“Set all free pins as analog”。这个选项会把所有你没用到的引脚设成模拟模式降低功耗。如果你的板子对功耗有要求勾上。如果没要求不勾也行但勾上没坏处。第四个是“Backup previously generated files”。勾上之后每次重新生成代码它会把你之前的main.c备份成main.c.bak。这个功能在你不小心改错了代码想恢复的时候很有用。但要注意它只备份main.c其他文件不备份。所以如果你在gpio.c里写了自定义代码重新生成的时候会被覆盖。我的做法是所有自定义代码都写在main.c的/* USER CODE BEGIN */和/* USER CODE END */之间这样重新生成的时候不会被覆盖。5.3 生成代码后的目录结构解析点“Generate Code”之后STM32CubeMX会在你指定的工程目录下生成一堆文件和文件夹。以Keil工程为例目录结构大概是这样的Core/Inc/存放头文件包括main.h、gpio.h、usart.h等。Core/Src/存放源文件包括main.c、gpio.c、usart.c等。Drivers/STM32F1xx_HAL_Driver/存放HAL库驱动文件。Drivers/CMSIS/存放CMSIS核心文件。MDK-ARM/存放Keil工程文件包括.uvprojx和启动文件。.ioc文件STM32CubeMX的工程文件双击可以重新打开配置界面。这个结构很清晰你后面写代码主要是在Core/Src/main.c里写。其他文件除非有特殊需求一般不动。有一个细节main.c里有很多/* USER CODE BEGIN XXX */和/* USER CODE END XXX */的注释块。你写的代码要放在这些块之间这样重新生成代码的时候才不会被覆盖。我见过有人把代码写在块外面结果重新生成一次代码全没了哭都来不及。6. 常见问题与排查技巧实录6.1 启动失败与Java环境问题STM32CubeMX 6.14打不开双击图标没反应或者弹出一个错误框说“Java Virtual Machine Launcher Error”。这个问题我遇到过好几次原因基本都是Java环境不对。要么是没装Java要么是装了多个版本的Java环境变量指向了错误的版本。排查方法打开命令行敲java -version。如果提示“不是内部或外部命令”说明Java没装或者环境变量没配。如果显示了版本号但STM32CubeMX还是打不开那就检查一下JAVA_HOME环境变量指向的路径是不是正确的Java安装目录。Windows下可以在“系统属性”-“高级”-“环境变量”里看。还有一个可能STM32CubeMX的安装目录里自带了一个JREJava Runtime Environment但有时候这个自带的JRE跟你的系统不兼容。解决办法是在STM32CubeMX的安装目录下找到STM32CubeMX.ini文件用记事本打开找到-vm那一行把它指向你系统里安装的Java的bin\javaw.exe路径。如果没有-vm这一行就手动加两行-vm C:\Program Files\Java\jdk-17\bin\javaw.exe注意路径要换成你自己的Java安装路径。6.2 固件包下载卡住或失败固件包下载卡住是另一个高频问题。表现是进度条不动或者下载到一半提示“Connection timeout”。这个主要是网络原因ST的服务器在国外国内访问不稳定。解决办法有几个第一换个时间段下载比如早上六七点或者晚上十一点以后。第二在STM32CubeMX的“Preferences”里把“Firmware Repository”的路径改成一个你确定有读写权限的目录有时候默认路径的权限有问题会导致下载失败。第三用离线包前面已经说过方法了。还有一个隐藏问题如果你公司网络有代理STM32CubeMX可能不会自动使用系统代理。你需要在“Preferences”里手动配置代理服务器。配置的地方在“Help”-“Preferences”-“Proxy”里填上代理地址和端口。6.3 生成代码后编译报错生成代码后在Keil里编译报了一堆错误最常见的是“cannot open source input file ‘stm32f1xx_hal.h’”。这个错误说明Keil的包含路径没配好。STM32CubeMX生成的Keil工程应该已经自动配好了包含路径但有时候会因为路径里有中文或者空格导致配置失效。排查方法在Keil里点“Options for Target”-“C/C”-“Include Paths”看看里面有没有..\Core\Inc和..\Drivers\STM32F1xx_HAL_Driver\Inc这些路径。如果没有手动加上。如果有但还是报错检查一下路径里有没有中文有的话把工程移到纯英文路径下。另一个常见错误是“undefined symbol HAL_Init”。这个说明HAL库的源文件没加到工程里。在Keil的工程树里看看“Drivers/STM32F1xx_HAL_Driver”下面有没有stm32f1xx_hal.c这些文件。没有的话手动添加进去。6.4 常见问题速查表问题现象可能原因解决方法双击图标无反应Java环境缺失或版本不对检查java -version配置JAVA_HOME修改STM32CubeMX.ini里的-vm路径固件包下载卡住网络不稳定或代理未配置换时间段下载配置代理或用离线包新建工程找不到芯片固件包未下载或损坏在“Manage embedded software packages”里检查并重新下载生成代码后编译报错找不到头文件Keil包含路径未配置在“Options for Target”里手动添加Include Paths重新生成代码后自定义代码丢失代码写在了USER CODE块外面把自定义代码移到/* USER CODE BEGIN */和/* USER CODE END */之间串口输出乱码波特率不匹配检查STM32CubeMX里的USART配置和串口终端软件的波特率是否一致定时器不工作时钟源未使能或参数计算错误检查RCC配置和定时器的Prescaler、Counter Period值6.5 几个我踩过的坑和独家技巧第一个坑STM32CubeMX 6.14在Windows 11上有时候会因为DPI缩放导致界面显示不全。按钮被遮住点不到。解决办法是右键STM32CubeMX的快捷方式选“属性”-“兼容性”-“更改高DPI设置”勾上“替代高DPI缩放行为”缩放执行选“应用程序”。第二个坑如果你同时装了Keil MDK和Keil C51STM32CubeMX生成Keil工程的时候可能会调用错误的Keil版本。解决办法是在“Project Manager”里手动指定Toolchain的版本或者在生成工程后用正确的Keil版本打开.uvprojx文件。第三个技巧STM32CubeMX支持命令行模式可以在没有图形界面的情况下生成代码。命令是STM32CubeMX -q script.txt其中script.txt里写你的配置命令。这个在自动化构建或者CI/CD流水线里很有用。我试过用这个方式批量生成不同芯片的工程效率很高。第四个技巧如果你想把STM32CubeMX的界面语言改成中文6.14版本本身不带中文语言包但你可以去网上找第三方汉化包。不过我不建议用汉化包因为汉化后的术语翻译有时候不准确反而容易误导。英文界面看习惯了就好常用的那几个单词就那么几个。7. 与Keil、VSCode的联动配置7.1 Keil MDK的工程导入与调试设置STM32CubeMX生成的Keil工程双击.uvprojx文件就能打开。打开后第一件事是检查“Options for Target”里的“Debug”标签页确认调试器选的是ST-Link Debugger。然后点“Settings”在“Flash Download”标签页里确认芯片的Flash算法已经加载。如果没有点“Add”手动添加对应芯片的Flash算法。编译之前检查一下“Target”标签页里的晶振频率设置。这个频率要跟你板子上的实际晶振一致否则Keil的软件仿真和实际运行会有偏差。比如你板子上是8MHz晶振这里就填8.0。下载程序的时候点“Download”按钮。如果提示“No ST-Link detected”检查一下ST-Link驱动装了没有USB线插好了没有。有时候是USB线的问题换一根线试试。我遇到过一根线只能供电不能传数据折腾了半天才发现是线的问题。7.2 VSCode加Cortex-Debug的配置方法如果你不想用Keil可以用VSCode加Cortex-Debug插件来开发STM32。配置步骤如下第一步在STM32CubeMX里把Toolchain设成“Makefile”生成代码。生成的目录里会有一个Makefile文件。第二步在VSCode里安装“C/C”插件和“Cortex-Debug”插件。第三步在工程目录下新建.vscode文件夹里面放两个文件launch.json和tasks.json。launch.json的内容大概是这样{ version: 0.2.0, configurations: [ { name: Debug (OpenOCD), type: cortex-debug, request: launch, servertype: openocd, cwd: ${workspaceRoot}, executable: ./build/${workspaceFolderBasename}.elf, device: STM32F103C8, configFiles: [ interface/stlink.cfg, target/stm32f1x.cfg ] } ] }tasks.json里配置编译任务调用make命令。第四步在VSCode的终端里运行make编译工程。然后按F5启动调试。这套配置的好处是跨平台Windows、Linux、Mac都能用。坏处是配置稍微麻烦一点尤其是OpenOCD的路径和配置文件路径要写对。我建议第一次配置的时候把OpenOCD的安装路径加到系统环境变量里这样launch.json里就不用写绝对路径了。7.3 版本管理与团队协作建议STM32CubeMX的.ioc文件是文本格式的可以放到Git里做版本管理。但要注意不同版本的STM32CubeMX生成的.ioc文件格式可能不兼容。如果你团队里有人用6.14有人用6.10互相打开对方的.ioc文件可能会报错。解决办法是统一团队里的STM32CubeMX版本或者把.ioc文件导出成PDF配置报告大家对着报告手动配置。另外生成的代码里Drivers文件夹下的HAL库文件不建议放到Git里因为体积大且不常变。可以在.gitignore里排除Drivers/文件夹只提交Core/和.ioc文件。新人拉下代码后用STM32CubeMX重新生成一次Drivers文件夹就行。团队协作的时候main.c里的USER CODE块是多人修改冲突的高发区。建议每个人只在自己的外设对应的.c文件里写代码比如gpio.c、usart.c这样冲突少。如果非要在main.c里写尽量把代码分散到不同的USER CODE块里减少冲突概率。8. 从配置到烧录的完整验证8.1 点灯测试的完整流程配置完一个GPIO输出生成代码编译下载然后写一个最简单的点灯程序。在main.c的while(1)循环里加上HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); HAL_Delay(500);这两行代码的意思是翻转PA5引脚的电平然后延时500毫秒。如果你的LED接在PA5上下载程序后应该能看到LED以1Hz的频率闪烁。如果LED不闪排查步骤第一用万用表量一下PA5引脚的电压看有没有变化。第二检查LED的极性是不是接反了。第三检查HAL_Delay函数是否正常工作可以在延时前后翻转另一个引脚用示波器看波形。第四确认系统时钟配置正确如果时钟配错了HAL_Delay的延时时间会不对。8.2 串口打印的验证方法配置一个USART波特率115200生成代码。在main.c里重定向printf函数#include stdio.h int __io_putchar(int ch) { HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, HAL_MAX_DELAY); return ch; }然后在while(1)里加printf(Hello STM32\r\n); HAL_Delay(1000);下载程序后打开串口终端软件选对COM口波特率115200应该能看到每秒打印一次“Hello STM32”。如果看到乱码检查波特率是否一致。如果什么都没看到检查TX和RX线有没有接反STM32的TX要接USB转串口模块的RXRX接TX。8.3 固件包版本与芯片型号的匹配检查最后一步验证确认你用的固件包版本跟芯片型号完全匹配。比如你用的是STM32F103C8T6固件包应该是STM32F1系列的不能是STM32F4系列的。在STM32CubeMX的“Project Manager”页面里可以看到当前工程用的固件包版本。点一下版本号可以切换其他版本。如果你换了芯片型号比如从F103换成F407需要重新新建工程选对应的芯片下载对应的固件包。不能直接在原来的工程上改芯片型号因为引脚定义和外设资源都不一样。我在实际项目中遇到过一个问题固件包版本升级后某个外设的初始化代码变了导致原来的业务逻辑跑不起来。所以每次升级固件包版本后都要重新测试一遍所有功能。不要觉得升级了就是好事有时候稳定比新功能更重要。这个流程走下来你应该已经能独立完成STM32CubeMX 6.14的下载、安装、配置、代码生成和烧录了。后面就是在这个基础上根据你的项目需求添加更多的外设和业务逻辑。遇到问题的时候回头看看第6节的速查表大部分常见问题都能找到答案。
返回列表