一、BOOT是什么?

大多数初学者第一次接触BOOT总是对这个词感到不解,从哪冒出一个奇奇怪怪的东西还要接跳线帽,为什么要配置它才能进行串口程序的下载?为什么不正确配置会导致单片机无法正常启动……
boot,及物动词,指“通过使操作系统加载到内存中启动计算机”,源自 bootstrap(动词),该动词源自 bootstrap(名词),意为“加载计算机操作系统的固定指令序列”(1953年)。那bootstrap为什么被指做“加载计算机操作系统的固定指令序列”呢?
boot-strap,最开始指男靴后部顶部的一个小环或小圈,穿着者可以用手指钩住它来穿上靴子。到1871年,在斯蒂尔的《流行物理学》教科书第一章的最后的“实际问题”中,有一个问题是:“30.为什么一个人不能通过拉起靴带来抬起自己?”,所以后来它被用来比喻一个不可能的任务,也被用来暗示“通过严格的、不依赖他人的努力来改善自己”。这正好切合了计算机系统的引导启动程序的功能————第一个加载的程序通过 bootstrap 来拉起自己。计算机系统就是通过BOOT来拉着自己的靴带来抬起自己。
在STM32中,BOOT是引导加载器(Bootloader)的缩写。引导加载器是位于芯片内部的一段特殊代码,它负责在单片机启动过程中执行一些初始化操作,并加载用户应用程序或固件。

二、STM32的BOOT

STM32的BOOT被BOOT0和BOOT1的引脚电平高低所控制

BOOT0和BOOT1是如何控制BOOT的?

在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1
和BOOT0引脚的状态,来选择在复位后的启动模式
在从待机模式退出时,BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持
为需要的启动配置。在启动延迟之后,CPU从地址0x0000 0000获取堆栈顶的地址,并从启动
存储器的0x0000 0004指示的地址开始执行代码。

从Flash启动:
这是最常用的启动方式。在该模式下,复位向量和应用程序代码存储在主Flash存储器中。当微控制器复位时,CPU从Flash的起始地址(通常为0x0800 0000)开始执行代码。Flash存储器通常用于存储固件、应用程序和其他常用数据。
特点和用处:

  • 适用于大多数应用场景,特别是需要长期运行的应用程序。
  • 提供了较大的存储容量,可以容纳较大的代码和数据。
  • 代码和数据可以在开发过程中通过编程器烧录到Flash存储器中。

从系统存储器(System Memory)启动:
STM32微控制器的一些型号具有内置的系统存储器,通常是一小段Flash存储器。在该模式下,复位向量和应用程序代码存储在系统存储器中。当微控制器复位时,CPU从系统存储器的起始地址(通常为0x1FFF 0000)开始执行代码。
启动地址:0x1FFF0000从系统存储器启动,系统存储器是芯片内部的一块特定区域,在出厂时由ST(STMicroelectronics)在该区域内预置了一个Bootloader,也称为ISP(In-System Programming)程序。这个Bootloader是一个只读存储器(ROM),无法在出厂后进行修改。

当将BOOT0设置为1,BOOT1设置为0,并按下复位键时,微控制器会从系统存储器中的Bootloader开始执行。这个Bootloader具有串口下载程序的功能,可以通过串口将程序下载到微控制器的Flash存储器中。

使用这种启动模式时,通常需要执行以下步骤:

将BOOT0设置为1,BOOT1设置为0,并按下复位键,使微控制器从系统存储器启动Bootloader。
在Bootloader的帮助下,通过串口将程序下载到Flash存储器中。
程序下载完成后,将BOOT0设置为GND(地),手动复位微控制器,使其从Flash存储器中启动。
确实,通过串口下载程序相对来说比较繁琐,需要进行引脚配置和手动操作,不太方便。因此,这种启动方式在实际应用中并不常用,除非特定的需求需要通过串口下载程序。一般情况下,从Flash启动是更常见和方便的方式。
特点和用处:

  • 系统存储器通常用于存储特殊用途的启动代码、引导加载程序或bootloader等。
  • 可以用于通过外部接口(如串口、USB等)在运行时更新固件、程序或配置参数。
  • 可以提供一种备用的启动方式,以便在Flash存储器出现问题或需要擦除时进行恢复。

内置SRAM启动:
STM32微控制器还提供了从内置静态随机存储器(SRAM)启动的选项。在该模式下,复位向量和应用程序代码存储在SRAM中。当微控制器复位时,CPU从SRAM的起始地址(通常为0x2000 0000)开始执行代码。内置SRAM启动通常用于程序调试和快速原型开发。在这种启动模式下,复位向量和程序代码存储在内置的静态随机存储器(SRAM)中。
内置SRAM是一块高速的临时存储器,与Flash存储器不同,它具有读写能力。因此,在SRAM中运行代码可以实现快速的程序调试和修改。
当将启动地址设置为SRAM的起始地址(通常为0x2000 0000),微控制器会从SRAM中的复位向量开始执行代码。这样,你可以在SRAM中修改和调试代码,而无需重新擦除整个Flash存储器。通过从内置SRAM启动,可以提高程序调试的效率,避免了每次修改都需要擦除整个Flash的时间消耗。但需要注意的是,内置SRAM的容量相对较小,无法容纳大型的程序。因此,这种方式更适合用于快速的代码调试和小规模程序的开发。对于正式的生产和部署,仍然需要将代码下载到Flash存储器中以实现长期运行和稳定性。
特点和用处:

  • 允许在运行时加载和执行代码,而无需重新烧录Flash存储器。
  • 适用于需要在运行时动态更新固件、程序或配置的应用场景。

    STM32启动地址

    在ARM Cortex-M3处理器中,规定了在上电后从0地址开始执行。但是,STM32在Flash存储器的0x0800 0000地址处存储中断向量表,STM32为了与ARM Cortex-M3的规定保持一致,采取了一种启动映射的方式。
    这种启动映射是通过BOOT0和BOOT1引脚的状态来控制的。当选择从主Flash启动模式时,即BOOT0引脚为低电平,BOOT1引脚为任意电平时,芯片上电后会进行启动映射过程。在这个过程中,Flash存储器的0x0800 0000地址会被映射到内存中的0地址处。当中断向量表存储在Flash存储器的0x0800 0000地址处时,无论ARM Cortex-M3内核是从0地址还是0x0800 0000地址处读取指令,都可以正确访问中断向量表。因为在启动映射过程中,0x0800 0000地址被映射到了0地址处,不会影响内核的读取。需要注意的是,代码仍然存储在Flash存储器的0x0800 0000地址处,只是在启动过程中进行了地址映射。这样可以保持ARM Cortex-M3的启动规则,同时又能让中断向量表位于Flash存储器的固定地址,便于访问和管理。

电路分析


电路的主要结构由一个3*2的插针座组成。最重要的是R3和R4两个限流电阻,这两个电阻主要起到限流的作用。这个非常重要,因为有很多同学的板子就是因为忘了这俩限流电阻而损坏。