STM32下载程序的五种方法

news2024/11/24 22:51:47

刚开始学习 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 的启动方式的:

BOOT0BOOT1启动模式说明
0X用户闪存存储器用户闪存存储器,也就是 flash 启动
10系统存储器系统存储器,用于串口下载
11SRAM启动SRAM启动,用于在SRAM中调试代码

这里是用 USB 下载, 也就是串口下载,所以选择表中的第二个方式也就是 BOOT0 选择 1, BOOT1 选择 0

然后你就可以点击软件上的 开始编程 按钮,但你会发现,右边一直处于连接状态。这个时候,只有你按一下板子上的 reset 按键(板子上唯一的一个按键),它就开始往下走了。

下载后记得把 BOOT0 的跳线冒跳回 0 端,BOOT0 和 BOOT1 都为 0 ,这样程序就从 flash 区启动,再按一下 reset 按键板子就开始运行烧录进去的代码了。

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 的配置已经搞定了,现在就可以进行下载了。

在下载之前,请做好四件事:

  1. 就是刚刚前面的配置,一定要配置好;
  2. 设备的接线,只要有一根线没接对,就无法完成下载;
  3. 编译好程序;
  4. 板子一定要上电。

程序下载成功之后,板子自动运行新代码,会看到 LED 灯间隔 500 毫秒亮灭交替闪烁。

STM32 ST-LINK Utility 是针对STM32全系芯片进行编程(读、写、擦除、选项字)的一款工具。

ST-LINK Utility 只支持 ST-Link (多个版本)的下载调试器,支持的芯片只有 STM32 。

  • Need: ST-Link 下载器(和 3. ST-Link V2下载 使用的设备一样)

官网下载:

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 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 程序员必备编程资料大全
  • 程序员必备软件资源

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1287909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32-Web-Server编程-在网页中插入图片

ESP32-Web-Server编程-在网页中插入图片 概述 图胜与言,在网页端显示含义清晰的图片,可以使得内容更容易理解。 需求及功能解析 本节演示在 ESP32 Web 服务器上插入若干图片。在插入图片时还可以对图片设置一个超链接,用户点击该图片时&a…

go-fastfds部署心得

我是windows系统安装 Docker Desktop部署 docker run --name go-fastdfs(任意的一个名称) --privilegedtrue -t -p 3666:8080 -v /data/fasttdfs_data:/data -e GO_FASTDFS_DIR/data sjqzhang/go-fastdfs:lastest docker run:该命令用于运…

常见测试技术都有哪些?

测试技术是用于评估系统或组件的方法,目的是发现它是否满足给定的要求。系统测试有助于识别缺口、错误,或与实际需求不同的任何类型的缺失需求。测试技术是测试团队根据给定的需求评估已开发软件所使用的最佳实践。这些技术可以确保产品或软件的整体质量…

我想修改vCenter IP地址

部署vCenter Server Appliance后,您可以在vCenter修改DNS设置并选择域名服务器使用。您可以编辑vCenter Server Appliance的IP地址设置。从vSphere 6.5开始正式支持vCenter修改IP地址。因此可以更改vCenter Server Appliance的IP地址和DNS设置。 注意:更…

AI助力智慧农业,基于YOLOv3开发构建农田场景下的庄稼作物、田间杂草智能检测识别系统

智慧农业随着数字化信息化浪潮的演变有了新的定义,在前面的系列博文中,我们从一些现实世界里面的所见所想所感进行了很多对应的实践,感兴趣的话可以自行移步阅读即可: 《自建数据集,基于YOLOv7开发构建农田场景下杂草…

Javaweb之前端工程打包部署的详细解析

6 打包部署 我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步: 前端工程打包 通过nginx服务器发布前端工程 6.1 前端工程打包 接下来我们先来对前端工程进行打包 我们直接通过VS Code的NPM脚本中提供的…

Linux gtest单元测试

1 安装git sudo apt-get install git2 下载googletest git clone https://github.com/google/googletest.git3 安装googletest 注意1: 如果在 make 过程中报错,可在 CMakeLists.txt 中增加如下行,再执行下面的命令: SET(CMAKE_CXX_FLAGS “-std=c++11”) 注意2: CMakeLists…

AI助力智慧农业,基于YOLOv5全系列模型【n/s/m/l/x】开发构建不同参数量级农田场景下庄稼作物、杂草智能检测识别系统

紧接前文,本文是农田场景下庄稼作物、杂草检测识别的第二篇文章,前文是基于YOLOv3这一网络模型实现的目标检测,v3相对来说比较早期的网络模型了,本文是基于最为经典的YOLOv5来开发不同参数量级的检测端模型。 首先看下实例效果&a…

【QT】Qt常用数值输入和显示控件

目录 1.QAbstractslider 1.1主要属性 2.QSlider 2.1专有属性 2.2 常用函数 3.QScrollBar 4.QProgressBar 5.QDial 6.QLCDNumber 7.上述控件应用示例 1.QAbstractslider 1.1主要属性 QSlider、QScrollBar和Qdial3个组件都从QAbstractSlider继承而来,有一些共有的属性…

精准定位安全续航 无人机解决方案打造交通巡逻新模式

现代城市交通管理是城市现代化的重要组成部分,但传统的交通管理系统存在一系列复杂繁琐的问题,同时,交警执勤也存在较大的安全隐患。为应对这一挑战,复亚智能深入研究无人机技术及应用,推出了一套全面的无人机解决方案…

[BPE]论文实现:Neural Machine Translation of Rare Words with Subword Units

文章目录 一、完整代码二、论文解读2.1 模型架构2.2 BPE 三、过程实现四、整体总结 论文:Neural Machine Translation of Rare Words with Subword Units 作者:Rico Sennrich, Barry Haddow, Alexandra Birch 时间:2016 一、完整代码 这里我…

uniapp踩坑之项目:使用过滤器将时间格式化为特定格式

利用filters过滤器对数据直接进行格式化&#xff0c;注意&#xff1a;与method、onLoad、data同层级 <template><div><!-- orderInfo.time的数据为&#xff1a;2023-12-12 12:10:23 --><p>{{ orderInfo.time | formatDate }}</p> <!-- 2023-1…

D7292 双向直流电机驱动电路 ( 速度可控 ) 7V~20V 400mA,峰值电流可达1.2A 采用DIP8、SOP8的封装形式

D7292是一块带有制动和速度控制功能的双向直流电机单片电路。它可以用来驱动CDP、VCR 和 TOY等负载。该电路通过两个逻辑输入管脚的电压&#xff0c;可以控制电机正反 个方向转动以及制动。并且可以通过改变速度控制管脚的电压&#xff0c;从而方便的改变电机的速度。D7292采用…

搞笑视频无水印下载,高清无水印视频网站!

搞笑视频无水印下载这件事情一直困扰了广大网友&#xff0c;每当看见好玩好笑的搞笑视频然而下载下来的时候&#xff0c;要么画质模糊就带有水印今天分享大家几个搞笑视频无水印下载方法。 这是一个非常良心的搞笑视频无水印下载小程序水印云&#xff0c;它支持图片去水印、视…

【matlab程序】matlab画太极图|阴阳

【matlab程序】matlab画太极图|阴阳 %% 海洋与大气科学; % 时间:20231205; % clear;clc;close all; t=0:1/100000:2pi+0.00001; t1=-pi/2:1/100000:pi/2+0.00001; t2=pi/2:1/100000:3pi/2+0.00001; R=10; r=1; figure plot(Rcos(t),Rsin(t),‘color’,‘k’,‘lin…

Python下TCP编程

​ 在Python中使用socket模块的socket函数可以完成&#xff0c;语法格式如下&#xff1a; ssocket.socket(AddressFamily, Type)函数socket.socket创建一个socket&#xff0c;返回该socket的描述符。该函数带有两个参数。 Address Family&#xff1a;可以选择AF_INET&#xf…

软件测试方法之等价类测试

01 等价类划分法 1、应用场合 有数据输入的地方&#xff0c;可以使用等价类划分法。 从大量数据中挑选少量代表数据进行测试。 2、测试思想 穷举测试&#xff1a;把所有可能的数据全部测试一遍叫穷举测试。穷举测试是最全面的测试&#xff0c;但是在实际工作中不能采用&am…

Netty核心知识总结

Netty是一个高性能、异步事件驱动的NIO框架&#xff0c;它提供了对TCP、UDP和文件传输的支持&#xff0c;作为一个异步NIO框架&#xff0c;Netty的所有IO操作都是异步非阻塞的&#xff0c;通过Future-Listener机制&#xff0c;用户可以方便的主动获取或者通过通知机制获得IO操作…

群体遗传 — 核苷酸多样性π

群体遗传 — 核苷酸多样性π **核苷酸多样性&#xff08;nucleotide diversity&#xff09;&#xff0c;记为π&#xff0c;是分子遗传学中一个重要的概念&#xff0c;用于量化种群内部或不同种群间的遗传多样性。**这一概念由根井正利和李文雄在 1979 年提出。核苷酸多样性的…

zabbix的自动发现机制、代理功能、SNMP监控

一、自动发现&#xff08;不安全&#xff0c;有时会失效&#xff0c;建议手动添加主机&#xff09; 1、定义 zabbix主动与服务端联系&#xff0c;将自己的地址和端口发送给服务端&#xff0c;实现自动添加监控主机 客户端是主动的一方 2、缺点 若自定义网段中主机数量太多…