BOOT电路

本质: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电路上的引脚添加电阻有助于保护单片机、稳定信号、减小影响,并确保正常的工作状态。在设计电路时,需要根据具体情况选择合适的电阻数值和类型,以满足系统要求并提高系统性能和稳定性。

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

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

相关文章

【Go语言】Go语言中的数组

Go语言中的数组 1 数组的初始化和定义 在 Go 语言中,数组是固定长度的、同一类型的数据集合。数组中包含的每个数据项被称为数组元素,一个数组包含的元素个数被称为数组的长度。 在 Go 语言中,你可以通过 [] 来标识数组类型,但…

【IO流】字符流练习(拷贝、文件加密、修改文件数据)

字符流练习 练习1:文件夹拷贝1.1 需求1.2 代码实现1.3 输出结果 练习2:文件加密与解密2.1 需求2.2 代码实现2.3 输出结果 练习3:修改文件数据(常规方法)3.1 需求3.2 代码实现3.3 输出结果 练习4:修改文件数…

YOLO目标检测——斑马线目标检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用:自动驾驶系统、智能交通监控、行人保护系统、辅助驾驶功能数据集说明:真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo…

Window系统安装USB Redirector结合cpolar实现远程访问本地USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序,它提供了共享和访问本地或互联网上的U…

aiohttp 目录遍历漏洞(CVE-2024-23334)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

MSSQL渗透测试

目录 mssql数据库连接提权至服务器权限 拿到目标的IP地址,我们先对IP地址进行信息收集,收集信息资产,同时使用nmap对IP地址进行扫描 nmap -sC -sV IP从扫描的结果中,我们能知道目标服务器是windows操作系统,使用的是m…

iOS群控软件功能分析与代码分享!

随着移动互联网的迅猛发展,iOS设备作为市场上一大主流平台,其应用开发和管理越来越受到开发者和企业的重视,iOS群控软件,作为一种能够批量控制、管理和监控iOS设备的工具,逐渐展现出其强大的实用价值。 本文将详细分析…

Redis的高性能之道

前言:做码农这么多年,我也读过很多开源软件或者框架的源码,在我看来,Redis是我看过写得最优美、最像一件艺术品的软件,正如Redis之父自己说的那样,他宁愿以一个糟糕的艺术家身份而不是一名好程序员被别人记…

CrossOver2024电脑虚拟机软件详细介绍概述

CrossOver是由CodeWeavers开发的一款系统兼容软件,它能够在Mac和Linux操作系统上直接运行Windows应用程序,而无需创建或启动完整的Windows虚拟机。CrossOver通过模拟Windows应用程序所需的运行环境,实现了跨平台的无缝集成和高效运行。 Cross…

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具,它简化了Git的使用过程,使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…

非线性优化-高斯牛顿法

在SLAM领域,后端多采用基于非线性优化的方法,来优化位姿和地图点,其中高斯牛顿法的使用频率很高。 求解高斯牛顿法的核心公式: 其中 f 是误差函数,J是误差关于待优化变量的雅可比矩阵。 其中H为海森矩阵&#xff08…

雷赛控制卡的扩展IO在雷赛软件里连不上是什么问题

雷赛控制卡的扩展IO在雷赛软件里连不上是什么问题 解决: 要拨码的,拨了码,记得断电

Redis之一: 简介及环境安装搭建

什么是NoSQL? NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据&#xf…

Sentinel实战(待完善)

目录 服务雪崩 什么是服务雪崩 服务不可用原因 解决方案 技术选型对比 Sentinel 介绍 优点 核心概念 资源 规则 代码实战 API实现 SentinelResource注解埋点实现 服务雪崩 什么是服务雪崩 在服务调用链路中, 服务提供者不可用, 导致服务调用者不可用, 间接让上上游…

【Java EE初阶二十六】简单的表白墙(二)

2. 后端服务器部分 2.1 服务器分析 2.2 代码编写 2.2.2 前端发起一个ajax请求 2.2.3 服务器读取上述请求,并计算出响应 服务器需要使用 jackson 读取到前端这里的数据,并且进行解析: 代码运行图: 2.2.4 回到前端代码,处理服务器返回的响应…

【网站项目】424学报稿件管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【漏洞复现】大华智慧园区综合管理平台信息泄露漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。 Nx02 漏洞描述 大华智慧园区…

Python多功能课堂点名器、抽签工具

一、问题缘起 去年,ChatGPT浪潮袭来,我懂简单的Python基础语法,又有一些点子,于是借助于人工智能问答工具,一步一步地制作了一个点名器,也可以用于抽签。当时,我已经设计好页面和基础的功能&am…

通过QScrollArea寻找最后一个弹簧并且设置弹簧大小

项目原因,最近需要通过QScrollArea寻找其中最后一个弹簧并且设置大小和策略,因为无法直接调用UI指针,所以只能用代码寻找。 直接上代码: if (m_scrollArea){int iScrollWidth m_labelSelectedTitle->width();m_scrollArea-&g…

vLLM: Easy, Fast, and Memory-Efficient LLM Serving with PagedAttention

论文:https://arxiv.org/abs/2309.06180 代码:GitHub - vllm-project/vllm: A high-throughput and memory-efficient inference and serving engine for LLMs 核心要点 为什么切换简单?Easy 本质是优化了底层推理过程的内存调用逻辑&#x…