【STM32】自举模式 和 程序下载(ST-Link和串口示例)

news2024/12/27 13:35:52
  • STM32官方网站
  • STM32中文社区

    如果遇到不清楚的概念,可以看之前的文章。

  • 一、自举模式
  • 二、程序下载
    • 2.1 概述
    • 2.2 实操
      • 2.21 SWD 方式下载(ST-Link)
      • 2.22 串口下载

一、自举模式

STM32有一个特殊的功能,就是可以通过不同的方式启动程序,这就是所谓的自举模式(Boot Mode)。

STM32的自举模式由两个引脚控制,分别是BOOT0BOOT1,它们可以接到不同的电平(高电平或低电平),从而决定STM32从哪里启动程序

STM32有三种自举模式,分别是:

  • 主闪存模式Main Flash memory mode):这是默认的自举模式,当BOOT0为低电平,BOOT1为任意电平时,STM32会从主闪存(Flash)中启动程序。主闪存是STM32内部的非易失性存储器,可以通过编程工具或者内置的串行引导加载器(serial bootloader)来烧写程序。
  • 系统存储器模式System memory mode):这是一种特殊的自举模式,当BOOT0为高电平,BOOT1为低电平时,STM32会从系统存储器中启动程序。系统存储器是STM32内部的只读存储器(ROM),其中存放了一个串行引导加载器(serial bootloader),它可以通过串口、USB或者CAN等接口来接收外部的程序,并将其写入主闪存或者外部的存储器设备。
  • 嵌入式SRAM模式Embedded SRAM mode):这是一种调试用的自举模式,当BOOT0为高电平,BOOT1为高电平时,STM32会从嵌入式SRAM中启动程序。嵌入式SRAM是STM32内部的易失性存储器,它可以通过JTAG或者SWD等调试接口来加载程序。这种模式通常用于开发和测试阶段,不适合生产环境。

自举模式的选择对于STM32的应用开发和调试非常重要,它可以影响STM32的启动速度、安全性和灵活性。通过合理地利用自举模式,可以实现不同的功能和需求,例如:

  • 通过串行引导加载器来更新程序,无需使用专用的编程工具或者拆卸设备。
  • 通过嵌入式SRAM模式来快速验证程序的功能和性能,无需烧写主闪存。
  • 通过主闪存模式来保证程序的稳定性和安全性,防止被篡改或者损坏。

BOOT0 和 BOOT1 这2个引脚在开发板上是会明确标注的。但是当你去看芯片的引脚分布图时,有可能只能看到BOOT0引脚,找不到BOOT1引脚,这是因为BOOT1引脚有可能是与其他引脚复用的。

STM32F103C8T6来说:64KB Flash+20KB SRAM(还有64KB ROM)。它的引脚是48个,LQFP封装,它的引脚分布图如下:
在这里插入图片描述

BOOT0明确为44引脚。

BOOT1是与PB2复用的,即20引脚,在芯片手册的引脚定义表格中可以看到:

在这里插入图片描述

在这里插入图片描述

二、程序下载

一般情况下,我们的程序是下载到Flash中的。好比你在电脑上下载安装软件,安装位置一般就是SSD(与Flash类似)。

下面介绍的3中方法对应系统存储期模式和Flash模式(下载方法不限于下面3种)。

2.1 概述

(1)串行引导加载器(serial bootloader)

串行引导加载器是STM32内置的一个程序,它存放在系统存储器中(ROM),可以通过串口、USB或者CAN等接口来接收外部的程序,并将其写入主闪存或者外部的存储器设备

  • 串行引导加载器的优点是无需使用专用的编程工具或者拆卸设备,只需要一根数据线和一个电脑就可以完成下载。
  • 缺点是速度较慢,而且需要配置好自举模式和接口参数。

要使用串行引导加载器下载程序,需要按照以下步骤进行:

  • 将STM32的BOOT0引脚接高电平,BOOT1引脚接低电平,选择系统存储器模式
  • 将STM32的串口、USB或者CAN接口连接到电脑上,并安装相应的驱动程序。
  • 打开一个串口终端软件(如PuTTY)、USB转串口软件(如STSW-LINK009)或者CAN转串口软件(如CANalyst-II),并设置好波特率、数据位、停止位等参数。
  • 复位STM32,并在终端软件中发送一个0x7F字节,以激活串行引导加载器。
  • 如果收到一个0x79字节的应答,表示串行引导加载器已经准备好接收命令。如果没有收到应答,可能是参数设置错误或者连接问题,需要检查并重试。
  • 发送一个读取命令(0x11),并指定要读取的存储器地址和长度。如果收到一个0x79字节的应答,表示命令有效。如果收到一个0x1F字节的应答,表示命令无效或者地址错误,需要检查并重试。
  • 读取返回的数据,并校验其正确性。
  • 发送一个擦除命令(0x43),并指定要擦除的扇区号。如果收到一个0x79字节的应答,表示命令有效。如果收到一个0x1F字节的应答,表示命令无效或者扇区号错误,需要检查并重试。
  • 发送一个写入命令(0x31),并指定要写入的存储器地址和数据。如果收到一个0x79字节的应答,表示命令有效。如果收到一个0x1F字节的应答,表示命令无效或者地址错误,需要检查并重试。
  • 校验写入的数据,并重复上述步骤直到所有数据都写入完成。
  • 发送一个跳转命令(0x21),并指定要跳转的程序入口地址。如果收到一个0x79字节的应答,表示命令有效。如果收到一个0x1F字节的应答,表示命令无效或者地址错误,需要检查并重试。
  • 复位STM32,并将BOOT0引脚接低电平,选择主闪存模式
  • STM32将从主闪存中启动程序

中间的很多步骤看起来可能比较复杂,但是通常串口下载软件可以代替我们完成这些工作,比如FlyMCU

(2)JTAG(Joint Test Action Group)

JTAG是一种标准的测试和调试接口,它可以通过一根多芯的数据线来连接STM32和一个编程工具(如ST-LINK、J-LINK等),并通过一个调试软件(如Keil、IAR等)来控制STM32的运行状态和存储器内容。

  • JTAG的优点是速度较快,而且可以实时监视和修改STM32的寄存器和存储器。
  • 缺点是需要使用专用的编程工具和调试软件,而且可能会占用一些GPIO引脚。

要使用JTAG下载程序,需要按照以下步骤进行:

  • 将STM32的JTAG接口连接到编程工具上,并将编程工具连接到电脑上。
  • 打开一个调试软件,并设置好目标芯片型号、时钟频率、下载地址等参数。
  • 选择下载模式,并选择要下载的程序文件。
  • 点击下载按钮,开始下载程序到STM32的存储器中。
  • 点击运行按钮,开始运行程序。

(3)SWD(Serial Wire Debug)

SWD是一种简化的JTAG接口,它只需要两根数据线来连接STM32和一个编程工具(如ST-LINK、J-LINK等),并通过一个调试软件(如Keil、IAR等)来控制STM32的运行状态和存储器内容。

  • SWD的优点是占用引脚少,而且可以实现和JTAG相同的功能。
  • 缺点是速度稍慢于JTAG,而且可能会影响一些GPIO引脚的功能。

要使用SWD下载程序,需要按照以下步骤进行:

  • 将STM32的SWD接口连接到编程工具上,并将编程工具连接到电脑上。
  • 打开一个调试软件,并设置好目标芯片型号、时钟频率、下载地址等参数。
  • 选择下载模式,并选择要下载的程序文件。
  • 点击下载按钮,开始下载程序到STM32的存储器中。
  • 点击运行按钮,开始运行程序。

2.2 实操

自己去官网下载相应的驱动并安装:就是ST-Link和ch340等驱动,具体取决于你使用的工具。实在不会就找你的淘宝卖家要。不展开介绍了。

拿ST-Link来说,安装驱动后,将设备连接到电脑可以看到:

在这里插入图片描述

说明驱动安装的没问题。

2.21 SWD 方式下载(ST-Link)

这是最常用、最好用的方式之一。可以买正版的ST-Link,也就100来块,或者10几块买个自制的那种。(正版J-Link太贵了😅)

很多设置设调试的时候用的,大概介绍一下。

引脚对应接线即可:(BOOT引脚按照Flash模式接线即可)
在这里插入图片描述
软件是Keil的 MDK-ARM 5.38

首先编译生成hex文件,前面的文章对Keil的功能已经完整介绍过了。
在这里插入图片描述

options for target 下的Debug选项下选择ST-Link,然后进入设置:

在这里插入图片描述
如果是第一次使用,有可能会提示你安装或更新某些固件,按照指示操作即可。

进入设置会有如下4个选项:

在这里插入图片描述

  • Debug:设置调试参数,例如复位模式、复位脚、最大时钟频率、SWO频率等。这些参数会影响调试器和目标板之间的通信和同步。
  • Trace:设置是否启用跟踪功能,以及选择跟踪模式、跟踪端口、跟踪时钟频率等。跟踪功能可以实现对目标板的实时监视和分析,例如显示程序执行流程、函数调用栈、变量值等。
  • Flash Download:设置是否在调试前自动下载程序到目标板的存储器中,以及选择要下载的存储器设备和算法。这些设置会影响下载速度和成功率。
  • Pack:设置是否使用软件包中提供的调试定义,以及选择要使用的软件包和配置文件。这些定义会提供调试连接和跟踪功能的配置设置。

Debug:

  • Debug AdapterSW Device 是你的ST-Link参数,只要你的ST-Link质量没问题、BOOT引脚设置正确、接线正确、板子正常、安装了驱动,那么这里就会显示相关信息,否则请逐一排查问题。
  • Target Com
    • port 用于选择端口类型,我使用的是SWD(2跟线的,SWDIO和SWCLK)。
    • clock是时钟设置,可以设置调试的速度。 Req:请求频率 Selected:实际频率。
  • Debug: 这是调试设置,根据需要设置即可。
    在这里插入图片描述

Trace

  • Core Clock:核心时钟频率。设置跟当前板子相同的时钟频率,可以在调试时按实际运行时间进行追踪调试。
  • Trace Enable:使能追踪功能。
    在这里插入图片描述

Flash Download

  • Download Function:
    • Erase Full Chip:擦除整片
    • Erase Sectors:擦除部分
    • Do not Erase:不擦除
    • 勾选Erase Full Chip时,每次下载时,都会对整片Flash进行擦除操作。勾选Erase Sectors时,下载时只会擦除使用到的扇区。勾选Do not Erase时,则下载时不擦除原本代码。
    • Program:烧录
    • Verify:校验
    • Reset and Run:复位并运行
    • 勾选Program时,下载时才会把代码写入Flash,否则不写入。勾选Verify时,则在烧录代码后,对代码进行校验。某些场合下不能检验,比如代码段跟数据段分开下载,代码里不包含数据部分,而工程里配置的代码段又包含数据段时,此时如果进行校验,可能会因为数据内容不一致导致校验失败。勾选Reset and Run时,则在下载完成后立即复位运行代码,不勾选时则需要手动复位运行。
  • Programming Algorithm:设置要下载的存储器设备和算法,以及选择要下载的扇区和地址范围。一般选择与目标板匹配的存储器设备和算法。比如STM32F103C8T6就选择中等容量(虽然它是64K不是128K)
    在这里插入图片描述

Pack : 芯片对应的Pack
在这里插入图片描述

全部设置完成后,点击Download即可下载:
在这里插入图片描述

下载完之后,按下板子上的reset即可运行你的、正确的程序。

2.22 串口下载

这种方式只需要串口转USB即可完成,成本很低,是通过系统存储中的程序(串行引导加载器),将程序下载到Flash中的方式。

  • BOOT设置:BOOT0=1,BOOT1=0

  • 接线:USB转串口的TX和RX分别与板子的RX(PA10)和TX(PA9)相连(不是同名相连哦),电源正常接线。

  • 软件:FlyMCU

首先搜索串口,选择有USBxxxCH340字样的端口。

读取器件信息示例(需要按一下reset):这说明连接正常,显示的信息不一定准确哦,具体看Datasheet。

在这里插入图片描述

下载程序:

选择Keil生成的hex文件,点击开始编程即可,设置按照上图。

  • 这里是 FlyMcu 对一键下载电路的控制过程,其实就是控制DTR和RTS电平的变化,控制BOOT0和RESET,从而实现自动下载。
  • STM32每次下载程序时,需要先将整片擦除,擦除速度比较慢,整个过程可能需要几十秒钟时间。
  • 下载成功后,会出现“共写入 xxxx KB,进度100%,耗时 xxxx 毫秒”的提示,并且下方的进度条会全绿。

在这里插入图片描述

程序是下载到Flash的,所以下载完后,记得把BOOT0设为0。



~

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

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

相关文章

maven 工程结构 和 archetype 模板

文章目录 一、maven 工程结构1.1. jar 工程结构1.2. war 工程结构 二、archetype 模板2.1. 推荐的 archetype 模板2.2. 自定义 archetype 模板2.2.1 自定义模板示例 有没有好奇过,通过 Maven 生命周期命令构建项目时,我们并没有指定源文件目录和编译后的…

5张图告诉你:同样是职场人,差距怎么这么大?

点赞 ➕ 评论 ➕ 收藏 养成三连好习惯 在职场中,我们常常会听到各种各样的抱怨: 👩‍⚖️‍ 小A: 凭什么别人每次述职绩效都是优秀呀? 感觉TA也没干啥呀! 🕵 小B: 凭啥这个事情,领导指派TA去对接呀&#…

“设计模式”概述

设计模式代码样例:Git 设计原则 依赖倒置原则(DIP) 高层模块(稳定)不应依赖底层模块(变化),二者都应依赖于抽象(稳定)抽象不应依赖于实现细节,…

YoloV5/YoloV7改进---注意力机制:线性上下文变换LCT,性能优于SE

目录 1.LCT介绍 2.LCT引入到yolov5 2.1 加入common.py中: 2.2 加入yolo.py中: 2.3 yolov5s_LCT.yaml 2.4 yolov5s_LCT1.yaml 3.YOLOv5/YOLOv7魔术师专栏介绍 1.LCT介绍 论文: https://arxiv.org/pdf/1909.03834v2.pdf AAAI 2020 摘要&a…

最长上升子序列 (从dp---->贪心)

最长上升子序列 思路: 题目要求找到最长上升的子序列,那么这个时候,我们可以假以第i个为结尾,那么此时以i为结尾的最大上升子序列是多少。但是这个时候,会发现,从第i个为结尾往前面找的话,是一…

20230705点亮STC32G实验箱9.6(STC32G12K128)开发板的跑马灯LED(深入了解)

08第六集:LED闪烁第六集:LED闪烁和花式点灯上和花式点灯上.mp4 09第六集:LED闪烁和花式点灯下.mp4 【大文哥学习32位8051】20230704【冲哥视频】第六集的晶振时钟的学习困惑 2023/7/5 17:36 delay_ms(3000); 刷机的时候如果使用11.0592M的Fos…

Ardupilot学习笔记

参考文献 【1】https://ardupilot.org 主打的就是一个炫酷 自驾仪 Ardupilot 一套开源的自驾仪,集成了各种各样的代码,包括其他开源代码(如PX4代码)和项目、驱动等。 即:自驾仪即集成了整个可以实现无人载具(如无人机&#xff…

Day_61-62 决策树

目录 Day_61-62决策树(准备工作) 一. 算法的基本概念 1. 决策树的定义 2. 如何构建决策树? 2.1 熵 2.2 信息增益原则 2.3 计算步骤 二. 示例演示 1. 第一次节点决策分类: 2. 后续节点的决策分类 3. 决策分类的结束条件 三. 代码实现 1. 主函数 2. 两个构…

Matlab把两个不同的x轴和y轴画在同一个图里

我们知道画两个y轴可以用yyaxis. 那么画两个x轴呢? 这时候可以用神奇的tiledlayout. % 创建两组数据 x1 0:0.1:40; y1 4.*cos(x1)./(x12); x2 1:0.2:20; y2 x2.^2./x2.^3;t tiledlayout(1,1); % 创建一个tiledlayout % 第一个坐标系 ax1 axes(t); % 创建坐标系, 指定t为…

Go语言MinGW的安装

Go语言MinGW的安装 相比在 Linux 平台上安装 GCC 编译环境,在 Windows 平台上安装 MinGW 是比较简单的,只需经历以下几个过 程。 1、MINGW32位安装 1、打开 [MinGW 官网] https://osdn.net/projects/mingw/,下载 MinGW 安装包。 点击即可…

个人对于SAR的粗浅理解

个人对于SAR的粗浅理解 有同学问我是做成像的,让我解释一下SAR成像,我思索了一下,决定这样简单回答: 首先SAR的全称为Synthetic Aperture Radar,即合成孔径雷达,本质还是一种Radar 合成孔径,其…

CSS 制作动态蚂蚁线

效果&#xff1a; 代码&#xff1a; <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <style type"text/css"> .line{position:relative;margin-bottom: 5px;width: 1200px;height: …

【电商API接口系列】关键词搜索商品列表,品牌监控场景

API接口允许不同应用程序之间共享数据&#xff0c;在系统之间传输、读取和更新数据。例如&#xff0c;一个电商网站可以通过API接口获取支付系统的支付状态。API接口允许开发人员使用他人开发的功能来扩展自己的应用程序。通过调用第三方API接口&#xff0c;开发人员无需重新实…

我的创作纪念日兼GPT模型简单介绍

目录 一、引言 二、收获与开端 2.1 问题&#xff1a;在创作的过程中都有哪些收获&#xff1f; 2.2 模型开端 三、日常与深入 3.1 问题&#xff1a;当前创作和你的学习是什么样的关系&#xff1f; 3.2 模型深入介绍 3.2.1 无监督预训练 3.2.2 有监督下游任务精调 四、…

自动驾驶产业链躁动,四维图新能否做好新时代“Tier 1”?

自动驾驶行业的“劲风”又来了。 6月21日&#xff0c;工信部副部长辛国斌在国务院政策例行吹风会上表示&#xff0c;将启动智能网联汽车准入和上路通行试点&#xff0c;他强调&#xff0c;“这里面讲的是L3级&#xff0c;及更高级别的自动驾驶功能商业化应用”。此前工信部曾透…

C#实现低耦合读卡

我们经常要给用户实现读卡查询。有很多种读卡器&#xff0c;每个厂商的接口也不同。归纳为两类&#xff0c;一类是感应式读卡&#xff0c;卡片接触上去就读出数据。一种是触发式的&#xff0c;程序调用读卡方法&#xff0c;硬件再进入读卡轮询。对应触发式的只能加按钮触发了&a…

技术分享 | app自动化测试(Android)-- 特殊控件 Toast 识别

Toast 是 Android 系统中的一种消息框类型&#xff0c;它属于一种轻量级的消息提示&#xff0c;常常以小弹框的形式出现&#xff0c;一般出现 1 到 2 秒会自动消失&#xff0c;可以出现在屏幕上中下任意位置。它不同于 Dialog&#xff0c;它没有焦点。Toast 的设计思想是尽可能…

不要再纠结了!看完这篇,你就能秒懂webpack、vite、rollup三者间差异!

前端打包工具webpack、vite、rollup的区别及使用 webpack、vite、rollup的区别webpack、vite的区别为什么vite比webpack打包快&#xff1f;为什么有人会说vite慢&#xff1f;首屏问题懒加载问题解决方案注意点 webpackwebpack打包过程webpack打包原理第一次冷启动慢的原因热更新…

在yolov5源码中添加注意力机制

yolov5源码中添加注意力机制 1 项目环境配置1.1 yolov5 源码下载1.2 创建虚拟环境1.3 安装依赖 2 常用的注意力机制2.1 SE 注意力机制2.2 CBAM 注意力机制2.3 ECA 注意力机制2.4 CA 注意力机制 3 添加方式3.1 修改 common.py 文件3.2 修改 yolo.py 文件3.3 修改 yolov5s.yaml 文…

易查分如何导入数据?这个最关键的要点别忽略

我们在使用易查分制作查询系统时&#xff0c;偶尔会遇到Excel文件没有办法正常上传的情况。这个问题困扰着许多老师&#xff0c;他们不知道该如何解决。今天我想和大家讨论一下&#xff0c;易查分导入数据时最常出现错误的原因&#xff0c;其中这个要点最关键&#xff0c;但很多…