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://www.mzph.cn/news/707810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++进阶】哈希 + unordered系列容器

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

华为 OD 一面算法原题

2.2 亿彩票公布调查结果 昨天,闹得沸沸扬扬的《10 万中 2.2 亿》的彩票事件,迎来了官方公告。 简单来说,调查结果就是:一切正常,合规合法。 关于福利彩票事件,之前的推文我们已经分析过。 甚至在后面出现《…

鸿运(通天星CMSV6车载)主动安全监控云平台敏感信息泄露漏洞

文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 鸿运主动安全监控云平台实现对计算资源、存储资源、网络资源、云应用服务进行7*24小时全时区、多地域、全方位、立体式、智能化的IT运维监控,保障IT系统安全、稳定、可靠运行…

unity初学问题:如何修改图片的坐标

如图,我们想要修改图片的轴心点坐标(Pivot) 选择图片组 打开编辑器在里面修改即可(最下面的Custom Pivot)

golang使用gorm操作mysql1

1.mysql连接配置 package daoimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger" )var DB *gorm.DB// 连接数据库,启动服务的时候,init方法就会执行 func init() {username : "roo…

浅谈 Linux 网络编程 - 网络字节序

文章目录 前言核心知识关于 小端法关于 大端法网络字节序的转换 函数 前言 在进行 socket 网络编程时,会用到字节流的转换函数、例如 inet_pton、htons 等,那么为什么要用到这些函数呢,本篇主要就是对这部分进行介绍。 核心知识 重点需要记…

数仓项目6.0(二)数仓

中间的几步意义就在于,缓存中间处理数据样式,避免重复计算浪费算力 分层 ODS(Operate Data Store) Spark计算过程中,存在shuffle的操作,而shuffle会将计算过程一分为二,前一阶段不执行完&…

链表之“带头双向循环链表”

目录 ​编辑 1.链表的分类 2.带头双向循环链表的实现 1.创建结构体 2.创建返回链表的头节点 3.双向链表销毁 4.双向链表打印 5.双向链表尾插 6.双向链表尾删 7.双向链表头插 8.双向链表头删 9.双向链表查找 10.双向链表在pos的前面进行插入 11.双向链表删除pos位…

ECLIP

denote the representation of the positive prompt produced by the momentum model as h ξ i h_{\xi}^{i} hξi​ 辅助信息 作者未提供代码

蓝桥杯前端Web赛道-课程列表

蓝桥杯前端Web赛道-课程列表 题目链接:0课程列表 - 蓝桥云课 (lanqiao.cn) 题目要求如下: 分析题目我们发现其实就是需要我们手写一个分页的功能,根据题目的要求,分析如下 需要通过axios获取数据每页显示5条数据,默…

11.vue学习笔记(组件生命周期+生命周期应用+动态组件+组件保持存活)

文章目录 1.组件生命周期2.生命周期应用2.1通过ref获取元素DOM结构2.2.模拟网络请求渲染数据 3.动态组件3.1.A,B两个组件 4.组件保持存活(销毁期) 1.组件生命周期 每个Vue组件实例在创建时都需要经历一系列的初始化步骤,比如设置…

Rocky Linux安装部署Elasticsearch(ELK日志服务器)

一、Elasticsearch的简介 Elasticsearch是一个强大的开源搜索和分析引擎,可用于实时处理和查询大量数据。它具有高性能、可扩展性和分布式特性,支持全文搜索、聚合分析、地理空间搜索等功能,是构建实时应用和大规模数据分析平台的首选工具。 …

Linux学习之system V

目录 一,system V共享内存 快速认识接口 shmget(shared memory get) shmat(shared memory attach) shmdt(shared memory delete) shmctl (shared memory control) 编写代码 综上那么共享内存与管道通信有什么区别? system v消息队列 system v信号…

【深度学习笔记】深度卷积神经网络——NiN

网络中的网络(NiN) LeNet、AlexNet和VGG都有一个共同的设计模式:通过一系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进行处理。 AlexNet和VGG对LeNet的改进主要在于如何扩大和加深这两个模块。 或者&am…

Linux------进程地址空间

目录 一、进程地址空间 二、地址空间本质 三、什么是区域划分 四、为什么要有地址空间 1.让进程以统一的视角看到内存 2.进程访问内存的安全检查 3.将进程管理与内存管理进行解耦 一、进程地址空间 在我们学习C/C的时候,一定经常听到数据存放在堆区、栈区、…

4、正则表达式、本地存储

一、正则表达式 1、定义 用事先定义好的一些特定字符,这样的字符组合,组合成一个“规则字符串” 2、正则的组成 特殊字符 字母、数字、下划线、中文、特殊字符… 元字符(常用) 1、\d 匹配至少有一个数字 var reg /\d/ /…

SpringBoot整合rabbitmq-直连交换机队列(二)

说明:本文章主要是Direct定向/直连类型交换机的使用,它的大致流程是将一个队列绑定到一个直连交换机上,并赋予一个路由键 routingkey,当一个消息携带着路由值为routingkey,这个消息通过生产者发送给交换机时&#xff0…

【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘&am…

Python中检查一个数字是否是科技数的完整指南

目录 前言 什么是科技数? 如何判断一个数字是否是科技数? 分割数字并计算平方 Python实现科技数检测的示例代码 科技数的应用场景 1. 数字游戏 2. 数据处理 3. 算法优化 4. 数据结构设计 总结 前言 科技数(Tech Number)是一…