- STM32官方网站
- STM32中文社区
如果遇到不清楚的概念,可以看之前的文章。
STM32有一个特殊的功能,就是可以通过不同的方式启动程序,这就是所谓的自举模式(Boot Mode)。
STM32的自举模式由两个引脚控制,分别是BOOT0
和BOOT1
,它们可以接到不同的电平(高电平或低电平),从而决定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等接口来接收外部的程序,并将其写入主闪存或者外部的存储器设备。Embedded SRAM mode
):这是一种调试用的自举模式,当BOOT0为高电平,BOOT1为高电平
时,STM32会从嵌入式SRAM中启动程序。嵌入式SRAM是STM32内部的易失性存储器,它可以通过JTAG或者SWD等调试接口来加载程序。这种模式通常用于开发和测试阶段,不适合生产环境。自举模式的选择对于STM32的应用开发和调试非常重要,它可以影响STM32的启动速度、安全性和灵活性。通过合理地利用自举模式,可以实现不同的功能和需求,例如:
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种)。
(1)串行引导加载器(serial bootloader)
串行引导加载器是STM32内置的一个程序,它存放在系统存储器中(ROM
),可以通过串口、USB或者CAN等接口来接收外部的程序,并将其写入主闪存或者外部的存储器设备。
要使用串行引导加载器下载程序,需要按照以下步骤进行:
中间的很多步骤看起来可能比较复杂,但是通常串口下载软件可以代替我们完成这些工作,比如FlyMCU
。
(2)JTAG(Joint Test Action Group)
JTAG
是一种标准的测试和调试接口,它可以通过一根多芯的数据线来连接STM32和一个编程工具(如ST-LINK、J-LINK等),并通过一个调试软件(如Keil、IAR等)来控制STM32的运行状态和存储器内容。
要使用JTAG下载程序,需要按照以下步骤进行:
(3)SWD(Serial Wire Debug)
SWD
是一种简化的JTAG接口,它只需要两根数据线来连接STM32和一个编程工具(如ST-LINK、J-LINK等),并通过一个调试软件(如Keil、IAR等)来控制STM32的运行状态和存储器内容。
要使用SWD下载程序,需要按照以下步骤进行:
自己去官网下载相应的驱动并安装:就是ST-Link和ch340等驱动,具体取决于你使用的工具。实在不会就找你的淘宝卖家要。不展开介绍了。
拿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:
port
用于选择端口类型,我使用的是SWD
(2跟线的,SWDIO和SWCLK)。clock
是时钟设置,可以设置调试的速度。 Req:请求频率 Selected:实际频率。Trace
:
Flash Download
:
下载完之后,按下板子上的reset
即可运行你的、正确的程序。
这种方式只需要串口转USB即可完成,成本很低,是通过系统存储中的程序(串行引导加载器),将程序下载到Flash中的方式。
BOOT设置:BOOT0=1,BOOT1=0
接线:USB转串口的TX和RX分别与板子的RX(PA10)和TX(PA9)相连(不是同名相连哦),电源正常接线。
软件:FlyMCU
首先搜索串口,选择有USBxxxCH340字样的端口。
读取器件信息示例(需要按一下reset):这说明连接正常,显示的信息不一定准确哦,具体看Datasheet。
下载程序:
选择Keil生成的hex文件,点击开始编程即可,设置按照上图。
程序是下载到Flash的,所以下载完后,记得把BOOT0设为0。
把 永 远 爱 你 写 进 诗 的 结 尾 ~