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

这篇具有很好参考价值的文章主要介绍了【STM32】自举模式 和 程序下载(ST-Link和串口示例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • STM32官方网站
  • STM32中文社区

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

一、自举模式

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封装,它的引脚分布图如下:
stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

BOOT0明确为44引脚。

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

stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

二、程序下载

一般情况下,我们的程序是下载到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来说,安装驱动后,将设备连接到电脑可以看到:

stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

说明驱动安装的没问题。

2.21 SWD 方式下载(ST-Link)

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

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

引脚对应接线即可:(BOOT引脚按照Flash模式接线即可)
stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机
软件是Keil的 MDK-ARM 5.38

首先编译生成hex文件,前面的文章对Keil的功能已经完整介绍过了。
stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

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

stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机
如果是第一次使用,有可能会提示你安装或更新某些固件,按照指示操作即可。

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

stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

  • 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: 这是调试设置,根据需要设置即可。
    stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

Trace

  • Core Clock:核心时钟频率。设置跟当前板子相同的时钟频率,可以在调试时按实际运行时间进行追踪调试。
  • Trace Enable:使能追踪功能。
    stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

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)
    stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

Pack : 芯片对应的Pack
stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

全部设置完成后,点击Download即可下载:
stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

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

2.22 串口下载

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

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

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

  • 软件:FlyMCU

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

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

stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

下载程序:

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

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

stm32 自举,Embedded Systems,stm32,嵌入式硬件,单片机

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



~ 文章来源地址https://www.toymoban.com/news/detail-757408.html

到了这里,关于【STM32】自举模式 和 程序下载(ST-Link和串口示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ST-Link下载程序后需要复位才可以执行程序

    1、使用正点原子的阿波罗开发板(STM32F429),他原本有一个ST-Link V2但是需要插到20脚的卡座中,我觉得插拔有些费劲。(20脚的可以正常下载和调试)于是就将原来的ST-Link用杜邦线将ST-Link和开发板中对应的引脚进行连接但是出现了奇怪的现象。 现象:       在用MDK(KEIL)

    2024年02月14日
    浏览(42)
  • STM32使用ST-Link下载器下载正确操作方式以及ST-LINK下载失败“target dll has been cancelled”等错误

    ST-LINK V2 ST-Link是ST意法半导体为评估、开发STM8/STM32系列MCU而设计的集在线仿真与下载为一体的开发工具,支持JTAG/SWD/SWIM三种模式。 支持所有带SWIM接口的STM8系列单片机 支持所有带JTAG/SWD接口的STM32系列单片机 我们使用C8T6开发时,往板子里面下载程序,使用ISP串口比较繁琐,

    2023年04月08日
    浏览(57)
  • STM32——ST-Link v2调试下载器的连接方法【详解】

    在网上购买了STM32F103C8T6的最小系统开发板,由于手头上没有官方的STM32调试器,所以也同时购买了一个便宜的st-link v2下载调试器  这种下载器和STM32的最小系统板之间完成调试通信需要连接四根线,连接图如下所示  其实这里最需要注意的是方向问题,这种插针座都是有一个

    2023年04月09日
    浏览(85)
  • JLINK仿真器用SWD模式下载程序,和stm32的连线说明

    stm32上的jlink接口有20个,然而并不是所有的接口都是必须的,在网上找了一些资料,想用杜邦线连接stm32和jlink仿真器,因为排线实在难插拔。 试了一下只需三根线就可以下载和调试,分别是1、7、9三根线;阅读方法,缺口朝上。下面附图:(20脚实际上可以不接,但是VCC一定要

    2024年02月15日
    浏览(57)
  • 使用STM32 ST-LINK Utility 烧录程序,ST LINK烧录程序,解锁FLASH

    :ST LINK烧录程序,STLINK烧录程序,ST-LINK烧录程序,STLINK烧录程序,ST LINK解锁Flash ST-LINK Utility下载:文末附带下载地址,免费下载、免积分下载。 使用 ST-Link 连接 STM32芯片,打开STM32 ST-LINK Utility 软件, 连接芯片:Tarage  - connec t或直接点击连接快捷按钮(如下图)。

    2024年02月04日
    浏览(41)
  • 《 STM32 ST-LINK Utility 》__代码下载工具下载、安装和使用说明(小白也能懂)

    目录 一、什么是STM32 ST-LINK Utility? 二、STM32 ST-LINK Utility有什么用? 三、官方途径下载软件! 四、我的资源 五、安装 六、怎么用? 1、比如我们经常使用的Keil是如何生成hex 2、读取STM32内部FLASH及芯片信息 3、打开hex程序 4、下载程序  (* ̄︶ ̄)创作不易!期待你们的 点赞、

    2024年02月06日
    浏览(50)
  • STM32程序下载——ISP下载

    ISP (Iin-System Programming)在系统可编程,ISP是一种通用的程序下载方式。 串口下载方式即ISP方式。在PC端可以通过专用软件,比如 FlyMCU 、MCUISP等,通过串口将 hex 文件下载到芯片中。 工具: 一块stm32f103c8t6开发板(或者最小系统板);若干跳线;面包板一块;电源(或者电源模

    2024年02月12日
    浏览(57)
  • STM32 使用串口下载程序

    在ROM区的0x0800 0000位置,存储的就是编译后的程序代码,你把什么程序写入到这个位置,STM32就执行什么样的程序。如果想使用串口下载程序的话,我们只需要把数据通过串口发送给STM32,STM32接收数据,然后刷新到0x0800 0000这一块位置就行了。但是接收并转存数据,这个过程本

    2024年02月05日
    浏览(40)
  • STM32_串口下载程序

    使用调试器下载程序又快有稳定还能使用调试功能,当然是下载调试的首选。但是拓展下串口下载程序的知识作为下载的备选方案也是很有必要的。 ICP :使用SWD接口进行烧录,如J-Link烧录器和J-Flash软件配合使用。 ISP :使用引导程序(Bootload)加上外围UART/USB等接口进行烧录

    2024年01月16日
    浏览(49)
  • stm32之使用串口下载程序

    1 stm32常用的程序下载方式 将程序下载到stm32芯片通常有以下三种方式: 串口转USB:需要用到一个CH340芯片,网上购买stm32基础套件时一般会有使用该芯片连接USB的模块,连接该芯片时需要占用芯片的USTART_TX和USTART_RX,分别对应芯片的PA9和PA10 SWD方式:例如,st-link v2,需要使用

    2024年04月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包