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