本质:BOOT电路本质上是单片机的引脚
作用:BOOT电路的作用是用于确定单片机的启动模式
使用方法:在单片机上电或者复位时给BOOT管脚设置为指定电平即可将单片机设置为指定启动模式。
原理:单片机上电或复位后会先启动内部晶振,第四个SysTick时单片机内部电路会将BOOT引脚的值进行锁存,也就是保存BOOT引脚的值,再根据BOOT引脚的值确定不同的启动模式。
数据手册
数据手册中关于BOOT的相关说明如下图(手册为stm32f4xx系列)
存储器采用固定的存储器映射,其中代码区域起始地址为 0x0000 0000,通过 ICode/DCode 总线访问,而数据区域起始地址为 0x2000 0000,通过系统总线访问。在这种情况下,Cortex-M4F CPU 通过 ICode 总线获取复位向量,因此只有代码区域(通常为 Flash 存储器)可以提供自举空间。然而,STM32F4xx 微控制器实施了一种特殊机制,允许从其他存储器(如内部 SRAM)进行自举。这意味着即使复位向量存储在 Flash 存储器中,STM32F4xx 微控制器也可以通过特殊机制从内部 SRAM 或其他存储器启动和执行程序。这种特殊机制为STM32F4xx微控制器提供了更大的灵活性,使其能够从多种存储器区域进行自举,而不仅局限于代码区域(Flash)中。这样的设计可以为开发人员提供更多选择,以满足不同应用场景的需求。
STM32F4xx 微控制器中可以通过 BOOT[1:0] 引脚选择三种不同的自举模式。这些引脚提供了控制启动模式的能力,允许开发人员在启动时选择不同的启动选项。表 3中列出了这些不同的自举模式,包括从不同存储器区域启动或采用不同的引导配置。在不同的自举模式下,微控制器会执行不同的启动流程,以满足需求。通过适当选择 BOOT[1:0] 引脚的状态组合,可以配置 STM32F4xx 微控制器以启动到特定的模式,这种灵活性有助于应对不同的应用需求和场景。
在 STM32F4xx 微控制器中,复位后,在 SYSCLK 的第四个上升沿会锁存 BOOT 引脚的值。这意味着在复位后的一段时间内(通常是 SYSCLK 的第四个上升沿),系统会稳定 BOOT 引脚的状态,并使用这个状态来确定启动的方式。用户可以通过设置 BOOT1 和 BOOT0 引脚的状态来选择所需的自举模式。通过控制这两个引脚的组合状态,用户可以指定微控制器在启动时应该从哪个存储器区域(如 Flash、SRAM等)启动,或者采用不同的启动配置选项。因此,通过设定 BOOT1 和 BOOT0 引脚,用户可以灵活地选择适合其应用需求的启动模式,从而实现对 STM32F4xx 微控制器启动行为的控制。
在 STM32F4xx 微控制器中,BOOT0 是一个专用引脚,而 BOOT1 则是一个与 GPIO 引脚共享的引脚。一旦完成对 BOOT1 的采样并确定了启动模式,相应的 GPIO 引脚即可进入空闲状态,变为可用于其他用途。这种设计使得在确定启动模式后,原本用于选择启动模式的 GPIO 引脚可以释放出来,供开发人员用于连接其他外设或执行其他功能。这种灵活性允许用户在启动完成后重用这些引脚,以满足不同的应用需求。因此,一旦对 BOOT1 引脚进行采样并完成启动模式的选择,相应的 GPIO 引脚可以自由地被重新配置和使用,而不再限定于启动模式选择用途。这样的设计有助于优化引脚资源的利用,并允许开发人员充分发挥 STM32F4xx 微控制器的功能。
在 STM32F4xx 微控制器中,当设备退出待机模式时,会对 BOOT 引脚进行重新采样。因此,在设备处于待机模式期间,这些引脚必须保持所需的自举模式配置,以确保在退出待机模式后系统能够按照预期的方式启动。一旦启动延迟结束,CPU 将会从地址 0x0000 0000 获取栈顶值,然后从地址 0x0000 0004(自举存储器的起始地址)开始执行代码。这意味着在设备重新启动时,系统会先获取栈顶值,然后从自举存储器的地址处开始执行代码,这样确保了系统正确地启动并恢复到正常工作状态。因此,在 STM32F4xx 微控制器中,对 BOOT 引脚的正确配置和保持与所需的自举模式相关的状态非常重要,以确保设备能够顺利退出待机模式并正确启动。系统会按照设定的自举模式配置来执行启动流程,从而保证设备在重新启动后能够正常运行。
当STM32F4xx微控制器以SRAM自举方式启动时,需要在应用程序初始化代码中重新分配向量表以确保中断服务程序能够正确执行。在这种情况下,需要使用NVIC异常及中断向量表和偏移寄存器进行重新分配。
具体做法包括以下步骤:
1. 将中断向量表地址设置为SRAM中的新地址。
2. 更新NVIC偏移寄存器的值,以确保向量表中的中断向量正确映射到相应的中断服务程序。
通过重新分配向量表,可以确保系统能够正确处理中断,使应用程序在SRAM自举模式下能够正常运行。这一步是必要的,因为在SRAM自举模式下,系统不再从Flash等其他存储器中读取中断向量表,而是从SRAM中读取,所以需要重新分配以确保正确的中断处理流程。
三种启动模式
1)主FLASH = 芯片内置的Flash。
2)SRAM = 芯片内置的RAM区,就是内存。
3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。这个系统存储器只是帮你通过ISP程序下载hex进去的
从主FLASH启动
其中用于FLASH的地址范围为0x0800 0000~0x080F FFFF ,大小为1MB
将主Flash地址0x08000000映射到0x00000000,这样代码启动之后就相当于从0x08000000开始。主闪存存储器是STM32内置的Flash,作为芯片内置的Flash,是正常的工作模式。一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。
从系统存储区启动
系统存储区地址范围为0x1FFF 0000~0x1FFF 7A0F,大小为30KB
系统存储区实际上存放了一段ST事先写好的BootLoader程序,且不可以被修改,用于ISP下载,也就是串口方式下载,当我们将BOOT0拉高,BOOT1拉低时,也就是系统存储器模式启动,单片机会将0x1FFF 0000~0x1FFF 7A0F这段空间映射到0x0000 0000处,运行系统内置的BootLoader程序,也就是串口下载的程序,使用串口将程序下载到FLASH中,下载完成之后就将BOOT0拉低,重启,使用主FLASH的方式运行使用串口下载的程序了。
从SRAM启动
SRAM位于block2 地址范围从0x2000 0000开始,不同型号大小不同
将SRAM地址0x20000000映射到0x00000000,这样代码启动之后就相当于从0x20000000开始。内置SRAM,也就是STM32的内存,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码,用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。
BOOT电路
Boot0和Boot1引脚被用来设定单片机的启动模式,它们通常需要单独的电源和电源地是为了避免不同引脚之间的干扰和影响,确保引脚功能的准确性和可靠性。具体原因包括以下几点:
1. **电源隔离**:Boot0和Boot1引脚需要连接到不同的电源线路上,因为在某些情况下,这两个引脚可能会需要不同的电源供应条件。通过单独的电源连接,可以避免由于电源干扰而导致引脚功能异常或误操作。
2. **地线隔离**:同样,Boot0和Boot1引脚通常需要连接到不同的地线上,即电源地。分开地线连接有助于减少地线回路干扰和使得引脚的接地更为稳定,确保系统的可靠性和稳定性。
3. **信号隔离**:Boot0和Boot1引脚在电路设计中可能受到其他信号线的影响,为了避免不同信号线之间的干扰,单独的电源和地线也能帮助减少信号干扰,确保引脚操作的准确性。
总的来说,单独的电源和电源地连接有助于确保Boot0和Boot1引脚在工作时具有良好的电气特性,减少外部干扰和影响,保证单片机启动模式设置的准确性和可靠性。
在Boot0和Boot1电路上引脚上加电阻通常有以下几个作用:
1. **限流作用**:添加电阻可以限制引脚上的电流,避免在异常情况下(比如短路)产生过大的电流,保护单片机不受损害。
2. **消除漂移**:在复杂电路环境中,引脚可能会受到外部信号的影响而产生漂移,通过给引脚加上电阻可以帮助减小这种影响,保持引脚信号的稳定性。
3. **防抖作用**:引脚上的电阻可以帮助减少引脚信号的抖动或干扰,确保信号传输的稳定性和可靠性。
4. **调节电平**:通过选择合适大小的电阻,可以调节引脚上的电平,确保单片机在正确的电平下正常工作。
总的来说,给Boot0和Boot1电路上的引脚添加电阻有助于保护单片机、稳定信号、减小影响,并确保正常的工作状态。在设计电路时,需要根据具体情况选择合适的电阻数值和类型,以满足系统要求并提高系统性能和稳定性。