刚开始学习STM32的时候,很多小伙伴满怀热情买好了各种设备,但很快就遇到了第一个拦路虎——如何将写好的代码烧进去这个黑乎乎的芯片~
STM32的烧录方式多样且灵活,可以根据实际需求选择适合的方式来将程序烧录到芯片中。本文将介绍几种常见的STM32烧录方式,包括串口下载、ST-LinkV2下载、ST-LINKUtility下载、JLink下载、STVP下载,保姆级教程,初学者福音。
五种方式不知道选哪种?直接看总结。
懒得找驱动安装包、软件安装包?我都给你提供啦。
通过深入了解这些烧录方式,相信大家将能够更好地理解STM32的烧录过程,选择合适的方式进行开发和调试。
本文所涉及的源码及安装包如下(由于平台限制,请点击以下链接阅读原文下载):
新手小白如果连MDK的使用都不熟悉,那么可以通过下文先熟悉一下MDK的使用:
文中所使用的芯片是STM32F103C8T6,配套了一个工程模板,如果你需要自己搭建一个工程模板,可以参考下文:
1.MDK5安装包
2.芯片固件包
3.串口烧录工具(FlyMcu)
4.ST-LinkUtility
5.STVP
1.CH340驱动
2.ST-Link驱动
3.JLink驱动
STM32F103C8T6模板工程
串口下载是我初学时常用的下载方式,现在看有些不如ST-Link方便。使用ST-Link基本可以实现一键下载程序,而串口需要反复拔插跳线帽,而且还需要单独的程序员,比较麻烦。
串口下载工具有很多,这里推荐FlyMcu。
FlyMcu是一款好用的STM32烧录程序软件,对于专业的单片机开发者来说应该非常适用,软件可以广泛地应用于电路编程和应用编程领域,支持进行编程、校验、读器件信息。
这款工具是国产的,大家如果需要最新版的,可以去它们的官网下载:
当然,用我提供的也行,反正也是他们官网下载的。
下载好后解压,双击.exe文件即可打开,无需安装。
在下载程序之前,请先接好线。接线图如下图所示:
电源接线没什么好说的,主要是串口这边,一定要注意交叉接线,也就是CH340转TLL工具的TX要接板子的RX,CH340转TLL工具的RX要接板子的TX,千万不要接错,否则就不能烧进去!
开发板上的PA9是TX,PA10是RX,请按上一段提到的交叉接线接好线。
打开FlyMcu。如果你们使用的是我上面推荐的STM32F103C8T6核心板,那么请下载1.安装包及驱动准备我提供的模板工程,如下操作:
接下来,将板子上的BOOT0跳线帽接到1,BOOT1路线帽维持在0,如下图所示:
为什么要这么操作呢?
这两个跳线帽是用来调整BOOT0和BOOT1的状态。跳线帽接到1就是高电平,接到0就是低电平。
BOOT0和BOOT1是用于设置STM32的启动方式的:
然后你就可以点击软件上的开始编程按钮,但你会发现,右边一直处于连接状态。这个时候,只有你按一下板子上的reset按键(板子上唯一的一个按键),它就开始往下走了。
下载后记得把BOOT0的跳线冒跳回0端,BOOT0和BOOT1都为0,这样程序就从flash区启动,再按一下reset按键板子就开始运行烧录进去的代码了。
ST-LinkV2是我现在最常用的下载方式,也是我最推荐的。ST-LinkV2是STM8、STM32系列单片机的在线仿真器和下载器。ST-Link出生就带有两种接口模式:SWIM接口模式(STM8),SWD接口模式(STM32)。
MDK5是由Keil公司发布的一款嵌入式软件开发环境,我们平时在进行STM32开发的时候,基本上都是在这个软件上进行。
MDK5可以在它们的官网上下载,网址如下:
当前最新版本是MDK538A,但新版并不意味着最好,可能会有一些奇奇怪怪的问题,也可能不稳定。
推荐大家使用MDK534,也是我目前所使用的版本,至今未出过什么问题。安装包已经在1.安装包及驱动准备为大家提供了,接下来我就手把手教大家在你们的电脑上安装MDK5。
双击我给大家提供的安装包后,会出现以下界面,大家跟着我的图片操作即可:
到此为止,MDK5就安装完成了。
但是,我给你们提供的安装包是官网下载的正版版本,试用几天后就要收费了。破解的方法网络上有一大堆,这里我就不讲了,我也怕律师函。
接下来就要安装固件包了。什么是固件包呢?由于ST公司生产了非常多的芯片,每颗芯片所需要的支持文件都不一样,这些文件组合起来就是固件包。
但有这么多芯片,他们不可能把所有的固件包都集成在MDK5里,否则MDK5的安装包将变得超级无敌巨大,很占空间也没必要。比较好的解决方案就是你需要用到什么芯片,就安装对应的固件包就可以了。
固件包也是在官网上可以下载到,网址如下:
由于我们使用的板子是STM32F103C8T6,属于F1系列,所以在搜索框里搜索STM32F1即可。如果大家使用的是其它系列芯片,那就搜索对应系列的关键词,不要傻乎乎都按下图搜索哦~
同样的,由于服务器在国外,下载速度巨慢。大家用我提供的文件就可以了,同样也是官网上下载的,原汁原味。链接在1.安装包及驱动准备可以找到。
安装的方法很简单,只需要双击安装包即可,然后它就会自动识别固件包的目录,点击Next,然后等进度条走到底就OK了。
如果你们使用的是我上面推荐的STM32F103C8T6核心板,那么请下载1.安装包及驱动准备我提供的模板工程,然后打开这个工程。
程序打开后,在上图中左上角箭头处,有三个按钮,我们所做的编译工作都是使用这三个按钮。那这三个按钮有什么作用呢?
在实际工作中,我们最经常使用的就是第二个按钮,另外两个用得不多,尤其是第一个。
核心板上边的电源线,随便找一根microUSB线来接就行,也就是之前手机充电线,扁头的那种,它就是用来供电的,没有传输数据。
而下边的下载引脚,主要是三根起作用:SWDIO、SWDCLK、GND。大家认真对照核心板与ST-Link,别接错了哈。特别是ST-Link,接的是缺口对面那一排引脚,而不是靠近缺口的那一排引脚。为了让你们看更清楚,我又拍了一张细节图(够保姆吧)。
在下面这张图里,棕色是GND,红色是SWDIO,黄色是SWDCLK,大家可以对照着接线。
在下载之前,请先按下面的步骤做好配置。
到此为止,针对MDK的配置已经搞定了,现在就可以进行下载了。
在下载之前,请做好四件事:
程序下载成功之后,板子自动运行新代码,会看到LED灯间隔500毫秒亮灭交替闪烁。
STM32ST-LINKUtility是针对STM32全系芯片进行编程(读、写、擦除、选项字)的一款工具。
ST-LINKUtility只支持ST-Link(多个版本)的下载调试器,支持的芯片只有STM32。
官网下载:
安装没啥好说的,一路Next就行,有需要的话记得改下安装路径。
ST-LinkV2和STM32引脚一一对应就可以了,采用SWD接口模式,接好如图,插上电脑。
ST-LinkV2STM32
SWCLK——SWCLK
SWDIO——SWDIO
GND——GND
3.3V——3V3
打开ST-LINKUtility,如图操作:
这里需要选择hex文件,如果你们使用的是我上面推荐的STM32F103C8T6核心板,可以下载1.安装包及驱动准备我提供的模板工程,如下操作。想烧自己的代码要是没有hex文件的话可以用MDK(Keil)生成。
看到出现“Verification...OK”就是下载成功。
JLINK是一个兼容JTAG的仿真器,可以烧入程序和调试。
调试ARM,需要遵循ARM的调试接口协议,JTAG就是其中的一种。JTAG是一种国际标准测试协议,也叫ARM调试协议。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。
网上有的JLink下载用的是JFlash,我觉得有点麻烦了,还要再下一个软件,直接用MDK就行。
支持KEIL、IAR、ADS等编译仿真软件。支持功能JTAG、SWD、SWO、VCOM模式。正版JLink价格在2000元以上,某宝上仿的均价在70左右,但容易掉固件(一般商家支持帮我们重刷固件)。
官网下载地址:
也可以用我提供的驱动安装包,我的是V612,V1、V2、V8、V9的仿真器都可以用,或者找买的客服,一般都有驱动(不走官网就跳过下两张图)。
安装好后解压打开,点下图的.exe文件。
如下操作:
烧STM32只要用4条杜邦线就可以了,和STM32ST-LINKUtility下载连线一样,采用SWD接口模式,这里的VREF就是电源正极。
看图连线应该很简单吧,1、7、9是上面一排,20是下面一排哦。
整体连好长这样:
使用MDK5打开工程(这里用的是我的模板工程),点击魔法棒,跟我操作。
一般这样设置就可以了,如果烧录失败,可以参考3.5。
STVP是很早的下载工具了,支持ST7、STM8、STM32系列。说实话,这玩意从安装到使用都是太奶级别,又臭又长,真的不建议使用。。
安装过程也是一路Next就行,由于安装时我不能截屏了,所以拍几个关键步骤出来。
PS:安装好后会看见STVD和STVP,我们用STVP就行。
和3.4一样,ST-LinkV2和STM32引脚一一对应就可以了,接好如图,插上电脑。
安装好后,桌面会有这个图标,点击打开。
这里以ST-Link下载器和STM32F103C8T6核心板为例:
弹出新窗口,如下操作,这里打开的是1.安装包及驱动准备我提供的模板工程,大家可以选自己的,要是hex文件,没有可以用MDK(Keil)生成。
对于初学者来说,没必要掌握那么多烧录方式,就我和我身边的程序猿来说,大家都喜欢用ST-LinkV2搭配MDK5编写、烧录程序,所以我也推荐初学者先从ST-LinkV2烧录方式开始,比较方便快捷。
感谢各位看官,peaceandlove!
tips:
hex文件、bin文件和axf文件是在嵌入式系统开发中常见的文件格式,用于存储编译后的程序代码和数据。
hex文件(IntelHEX):hex文件是一种十六进制文本文件格式,用于表示程序代码和数据的二进制内容。它由一系列十六进制数值组成,每个数值对应一个字节的数据。hex文件通常包含地址信息、数据记录类型和实际的数据内容。它是一种常见的文件格式,广泛用于烧录设备、调试工具和仿真器等。
bin文件(Binary):bin文件是一种原始的二进制文件格式,直接以二进制形式存储程序代码和数据。bin文件没有像hex文件那样进行十六进制的编码,而是按照字节的实际值进行存储。bin文件可以更直观地表示程序的原始二进制数据,但缺少了地址和其他元数据信息,因此在烧录和调试过程中需要额外的处理。
axf文件(ARMeXtendedFormat):axf文件是针对ARM架构开发的一种特定格式,包含了可执行程序的代码、数据和符号表等信息。axf文件通常由ARM开发工具链生成,可以包含链接器产生的符号表、调试信息和其他附加的元数据。axf文件在调试过程中非常有用,可以用于查看和分析程序的结构、变量信息等。