STM32下载程序的五种方法

刚开始学习 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 随你挑!

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

推荐阅读:

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt 中的窗口类

目录 QWidget 设置父对象 窗口位置 测试代码 窗口尺寸 窗口标题和图标 信号 槽函数 QDialog 常用API QDialog的子类 QMessageBox QFileDialog QFontDialog QFontDialog类的静态API QColorDialog 颜色类 QColor 静态API函数 测试代码 QInputDialog 静态函数…

使用晶振遇到的两个问题

并联电阻的问题 在一些方案中,晶振并联1MΩ电阻时,程序运行正常,而在没有1MΩ电阻的情况下,程序运行有滞后及无法运行现象发生。 原因分析: 在无源晶振应用方案中,两个外接电容能够微调晶振产生的时钟频率…

5.清除SVN用户账号两种方式

常用的客户端又分为2种,第一种是安装在操作系统中的客户端,另外一种是Eclipse的插件 1.操作系统中的客户端 用的小乌龟,在小乌龟里面先把账户信息删除: 1、随便找一个目录,右键tortoiseSVN-------》setting--------…

获取网络ppt资源

背景: ​ 某度上有很多优质的PPT资源和文档资源,但是大多数需要付费才能获取。对于一些经济有限的用户来说,这无疑是个遗憾,因为我们更倾向于以免费的方式获取所需资源。 解决方案: ​ 然而,幸运的是&am…

大型机床配件直线导轨的作用

直线导轨是一种常见的机械结构,用于工业机器人、数控机床和其他自动化装置中,尤其是在大型机床中的应用,非常广泛,是重要的大型机床配件之一,那么直线导轨在大型机床中起着什么作用呢? 1、导向作用&#xf…

HarmonyOS4.0 ArkUI组件

目录 简介 搭建开发环境 ArkUI基础组件 Image组件 Text组件 TextInput Button Slider 简介 HarmonyOS 4.0的ArkUI组件是一套UI开发框架,提供开发者进行应用UI开发时所必须的能力。在ArkUI中,组件是界面搭建与显示的最小单位,开发者通过…

UEC++ 探索虚幻5笔记(捡金币案例) day12

吃金币案例 创建金币逻辑 之前的MyActor_One.cpp,直接添加几个资源拿着就用 //静态网格UPROPERTY(VisibleAnywhere, BlueprintReadOnly)class UStaticMeshComponent* StaticMesh;//球形碰撞体UPROPERTY(VisibleAnywhere, BlueprintReadWrite)class USphereCompone…

接口自动化测试过程中怎么处理接口依赖?

面试的时候经常会被问到在接口自动化测试过程中怎么处理接口依赖? 首先我们要搞清楚什么是接口依赖。 01. 什么是接口依赖 接口依赖指的是,在接口测试的过程中一个接口的测试经常需要依赖另一个或多个接口成功请求后的返回数据。 那怎么处理呢&#x…

MybatisPlus概述

MybatisPlus概述 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通…

Isaac Sim教程05 机器人简单组装及传感器

Isaac Sim 机器人简单组装及传感器了解 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law.…

JVM arthas下载工具

工具下载地址 链接:https://pan.baidu.com/s/1qkn9HabhuwTiwbKVQ7BXnA?pwdv5ww 提取码:v5ww 启动语句 java -jar arthas-boot.jar输入你的线程,这里是2 dashboardJVM优化 堆的初始大小 最大大小 年轻代的大小 线程栈大小 新生代、伊甸…

ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译

ROS2的功能包、依赖管理、工作空间配置与编译 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyrigh…

市域社会治理(智慧网格)解决方案:PPT全文47页,附下载

关键词:市域社会治理解决方案,智慧网格解决方案,市域社会治理重点内容,市域社会治理调研报告,智慧网格综合管理平台 一、市域社会治理建设背景 市域社会治理是在信息化背景下,为了适应城市化、现代化、社…

当发送“Hello,World”时,channel发生了什么?

一、Netty概述 1.Netty是什么? Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。 2.Netty的地位怎么样? Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE …

个人作品集

个人作品集 封面设计 排版设计 3D建模 Pr剪辑 个人剪辑作品 场景搭建

国产AI边缘计算盒子,双核心A55丨2.5Tops算力

边缘计算盒子 双核心A55丨2.5Tops算力 ● 2.5TopsINT8算力,支持INT8/INT4/FP16多精度混合量化。 ● 4路以上1080p30fps视频编解码,IVE模块独立提供图像基础算子加速。 ● 支持Caffe、ONNX/PyTorch深度学习框架,提供resnet50、yolov5等AI算…

Java异常详解大全(2023版)

Java异常详解 异常分类1.Throwable2. Error(错误)3. Exception(异常)3.1 运行时异常 RuntimeException3.2 编译时异常(受检查异常)ClassNotFoundException + IOException4.常见的运行时异常5.异常如何处理Java 的异常处理是通过 5 个关键词来实现的:try、catch、throw、…

【从零开始学习JVM | 第二篇】字节码文件的组成

前言: 字节码作为JAVA跨平台的主要原因,熟练的掌握JAVA字节码文件的组成可以帮助我们解决项目的各种问题,并且在面试中,关于字节码部分的内容却是一大考点和难点,因此我们在这里穿插讲解一下字节码文件的组成。 目录 …

[跑代码-遇到问题-报错3]BK-SDM. KeyError: ‘up_blocks.0‘

File "src/kd_train_text_to_image.py", line 790, in mainKeyError: up_blocks.0 出问题的原因 dict acts_tea读到dict acts_stu没有读到dict 原因是 unet_teacher的结构后面直接接down_blocks(正常)unet_teacher.down_blocks 但是unet的结构…

java:springboot3集成swagger(springdoc-openapi-starter-webmvc-ui)

背景 网上集成 swagger 很多都是 Springfox 那个版本的,但是那个版本已经不更新了,springboot3 集成会报错 Typejavax.servlet.http.HttpServletRequest not present,我尝试了很多才知道现在用 Springdoc 了,今天我们来入门一下 …