STM32三种启动模式:【详细讲解】

news2024/10/4 2:45:16

STM32在上电后,从那里启动是由BOOT0和BOOT1引脚的电平决定的,如下表:

BOOT模式选引脚启动模式
BOOT0BOOT1
X0主Flash启动
01系统存储器启动
11内置SRAM启动

BOOT 引脚的值在重置后 SYSCLK 的第四个上升沿时被锁定。在重置后,由用户决定是如何设置 BOOT1 和 BOOT0 引脚,来选择需要的启动模式。

1. 启动代码的位置

启动延迟过后,CPU 从引导存储器中启动代码执行.启动代码位于存储器地址最底部的地址,起始
地址是 0x0000_0000

2. STM32的启动模式

STM32支持多种启动模式,主要由BOOT0和BOOT1这两个引脚的状态决定。常见的启动模式包括:

  1. 主Flash启动:这是最常用的启动模式。在此模式下,STM32的主闪存存储器(Flash Memory)被映射到启动空间(0x0000_0000),但实际上Flash Memory的内容仍然可以在其原有的地址(如0x0800_0000)访问。这样,当CPU从0x0000_0000开始执行时,它实际上是在执行Flash Memory中的程序。
  2. 系统存储器启动:在这种模式下,系统存储器(System Memory)被映射到启动空间(0x0000_0000)。系统存储器中通常存储了STM32自带的Bootloader程序,该程序允许用户通过串行接口(如UART)将新的程序代码下载到Flash Memory中。值得注意的是,系统存储器的物理地址(如0x1FFF_F000)在此时也被映射到了0x0000_0000。
  3. 内置SRAM启动:在这种模式下,STM32的内部静态随机存取存储器(SRAM)被用作启动空间。然而,SRAM的访问仅限于其原始地址(如0x2000_0000开始),并不会被映射到0x0000_0000。因此,在SRAM启动模式下,需要通过特殊的方式(如修改中断向量表)来确保CPU能够正确地找到并执行启动代码。

主Flash启动:(正常情况下使用

一般使用 JTAG或者 SWD接口下载程序固件时,程序将被下载到这里,芯片重启后也将直接从这里读取并启动程序

系统存储器启动:(非正常情况使用,用来实现ISP下载

这种模式启动的程序功能是由芯片厂家设置的。这种启动方式一般情况不使用。系统存储器是芯片内部一块特定的区域,STM32 出厂时由ST公司在这个区域内部预置了一段BootLoader, 即我们常说的 ISP程序, 这是一块ROM, 出厂后无法修改
我们选用这种启动模式时,大多是为了使用 串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的 Flash 中。但是这个下载方式需要以下步骤:
Step1:将 BOOT0 设置为 1,BOOT1 设置为 0,然后按下复位键,这样才能从系统存储器启动 BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从 Flash 中启动。所以使用串口下载程序较为 麻烦, 需要频繁切换BOOT0与BOOT1。

内置 SRAM:

内置SRAM,SRAM没有程序存储的能力,这个模式一般用于频繁的程序调试,这样可以减少flash的擦写次数,保护flash。
这种模式可以用于 程序调试。 假如只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到SRAM中

主流用法:

一般比较主流boot模式是主Flash启动,使用ST-LINK+keil5 debug起来比较方便,速度也比较快

3:引脚配置

4:ISP和IAP

ISP就是in-system programming(在系统烧录,在系统编程)。

以前烧录bin/hex文件到单片机内部flash中是需要借助专用的烧录器的,比较麻烦。随着时间推移衍生出来了一种不需要借助烧录器也不需要将单片机从板子上拆卸下来的烧录方法,这种方法就是ISP。一般ISP都是PC通过串口把bin/hex文件ISP到单片机内部的flash。例如STM32从系统存储器启动模式,就是在系统存储器中存储了一段可以接收串口数据的代码来实现将bin/hex文件烧录到主闪存存储器,烧录完成后再将启动模式手动切换成主闪存存储器执行刚刚烧录的程序。

IAP就是in-application programming(在应用编程,在应用烧录,在线升级)。

IAP的核心是用户需要在自己的应用程序中去操作单片机内部flash的控制器的寄存器,实现对内部flash的烧录功能。IAP的时候用户程序通过串口、usb、ethernet等,来实现接收PC发送过来的bin/hex文件,然后将之烧录到内部flash中去完成IAP,完成后再次启动后就会从用户存储器区执行,更新就会起效果。一般实现iAP需要人为的将用户存储器区分为2部分:bootloader+app

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

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

相关文章

硬件开发笔记(三十):TPS54331电源设计(三):设计好的原理图转设计PCB布板,12V输入电路布局设计

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142694484 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

挖矿病毒记录 WinRing0x64.sys

之前下载过福晰pdf编辑器,使用正常。 某天发现机器启动后,过个几分钟(具体为5min)会自动运行几个 cmd 脚本(一闪而过),但是打开任务管理器没有发现异常程序(后面发现病毒程序伪装成System系统程序,见下图)…

Ascend C算子加速:优化与创新

Ascend C算子加速:优化与创新 随着大模型的迅速发展和人工智能计算需求的剧增,优化硬件性能变得尤为重要。针对这一需求,昇腾推出了Ascend Operator Library(AOL)算子加速库,专注于为开发者提供高效的算子…

C++-vector模拟实现

###vector底层相当于是数组,查看源码可以发现,这个类的私有成员变量是三个迭代器;在实现时迭代器就可以当作是vector里面的元素的指针类型; ###vector是一个类模板,实现时也应当按照这样的写法用一个模板去实现&#…

某项目实战代码(一)

1.下载安装并配置环境变量openssl,可自行在网上寻找。 2.在项目中导入opensll中的“包含(include)”和“库(lib)” 3.选择debug x86平台,不然会报错。 4.运行结果如下。可自行比对 md5 value: 33b3bc8e05b4fcc16bd531dd9adac166 5.代码如下 #define…

基于STM32的智能家居灯光控制系统设计

引言 本项目将使用STM32微控制器实现一个智能家居灯光控制系统,能够通过按键、遥控器或无线模块远程控制家庭照明。该项目展示了如何结合STM32的外设功能,实现对灯光的智能化控制,提升家居生活的便利性和节能效果。 环境准备 1. 硬件设备 …

unix中的exec族函数介绍

一、前言 本文将介绍unix中exec族函数,包括其作用以及使用方法。当一个进程调用fork函数创建一个新进程后,新进程可以直接执行原本正文段的其他内容,但更多时候,我们在一个进程中调用fork创建新的进程后,希望新进程能…

在pycharm中设置后直接运行js代码

环境: pycharm专业版2020.3.2 已经安装nodejs和npm,并已经加入环境变量。 nodejs的安装参考在pycharm中运行js文件以及附加node.js下载步骤_python_脚本之家 下面开始在pycharm中设置,让其可以直接运行js代码,即需要安装一个叫…

C# 字符与字符串

本课要点: 1、字符类Char的使用 2、字符串类String的使用 3、可变字符串****StringBuilder 4、常见错误 一 何时用到字符与字符串 问题: 输出C#**课考试最高分:**98.5 输出最高分学生姓名:张三 输出最高分学生性别&#x…

六.应用层

目录 ​编辑 4.11 DHCP 6.1应用层的概述 6.2网络应用模型 CS P2P 6.3DNS 域名 www是什么,http是什么,到底什么区别? DNS出现及演化 DNS概括 DNS域名解析过程 6.4FTP FTP客户/服务器 FTP工作原理 FTP传输模式 6.5电子邮件 电…

King of Range 2024牛客国庆集训派对day3

原题 King of Range 解析 m 的值不大, 每次时间在 n logn 以内即可 我们遍历整个数组, 以 i 为右边界, 检测是否有满足条件的左边界, 一次只加上左面的所有可能, 用两个双向队列维护两个单调栈, 一个存最大值, 一个存最小值, 这样可以帮助找到合适的左边界 代码 #include …

JAVA并发编程系列(13)Future、FutureTask异步小王子

美团本地生活面试:模拟外卖订单处理,客户支付提交订单后,查询订单详情,后台需要查询店铺备餐进度、以及外卖员目前位置信息后再返回。 时间好快,一转眼不到一个月时间,已经完成分享synchronized、volatile、…

Linux应用——简易日志

1. 日志要求 对于一个日志来说,我们任认为其应该具有以下的内容 1. 日志时间 2. 日志等级 3. 日志内容 4. 文件名称与行号 在此基础上我们对不同的日志做出分级,即 info: 常规信息 warning: 报警信号 error: 严重信号,可能需要立…

UNIAPP 动态菜单实现方法

1. 封装tabbar组件,组件UI使用uview的tabbar allList 定义出全部的菜单 list 定义当前用户能看到的菜单使用 u-tabbar 渲染出来 list 2. 权限判断处理 3. 使用方式 在 tab 页,底部放入该 tab 组件,并设置当前回显的页面,这里使用…

STM32F407寄存器操作(DMA+I2C)

1.前言 因为后面需要用到大量基础通讯传输的问题,于是今天折腾了一下DMA传输I2C与SPI的效果,其实我先是把DMASPI搞出来了。但是考虑到网上对于STM32的I2C微词颇多,基础的协议都没有调试出来,更遑论DMA控制了,前面调不…

排序算法之——归并排序,计数排序

文章目录 前言一、归并排序1. 归并排序的思想2. 归并排序时间复杂度及空间复杂度3. 归并排序代码实现1)递归版本2)非递归版本 二、计数排序1. 计数排序的思想2. 计数排序的时间复杂度及空间复杂度3. 计数排序代码实现 总结(排序算法稳定性&am…

计算机毕业设计 基于Python的无人超市管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

深度学习基础—残差网络ResNets

1.残差网络结构 当网络训练的很深很深的时候,效果是否会很好?在这篇论文中,作者给出了答案:Deep Residual Learning for Image Recognitionhttps://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_…

使用html写一个能发起请求的登录界面

目录 head部分 内联样式部分 body部分 login-form类的div myModal类的div id script部分 总的代码 界面与操作演示 <!DOCTYPE html> <html lang"en"> <!DOCTYPE html> 这是文档类型声明&#xff0c;告诉浏览器这是一个 HTML文档。 <…

jmeter学习(1)线程组与发送请求

1、线程组 执行顺序 &#xff1a;setUp线程组 > 线程组 > tearDown线程组 2、 发送请求 可以发送http、java、dubbo 请求等 下面讲解发送http 1&#xff09;Http请求默认值 作用范围是该线程组下的所有HTTP请求&#xff0c;如果http请求设置的与默认值冲突&#xff0…