stm32三种启动方式及配置方式
stm32三种启动方式及配置方式
更多
STM32 微控制器有三种主要的启动方式,由芯片上特定的 BOOT 引脚(通常是 BOOT0 和 BOOT1)在上电或复位时的电平状态决定。每种方式定义了 CPU 复位后从哪个存储区域开始执行程序。
以下是三种启动方式及其配置方法:
? 1. 从主闪存存储器启动 (Main Flash Memory)
- 功能: 这是最常见的启动方式。复位后,CPU 从内置的 Flash 存储器(
0x0800 0000地址)开始执行用户编写的应用程序。这是产品出厂后的正常工作模式。 - 配置方式:
- 硬件配置: 将 BOOT0 引脚拉低(连接到 GND)。
- 软件配置: 通常无需额外的软件配置。用户编译器生成的代码默认链接到 Flash 的起始地址
0x0800 0000,该地址也是初始 SP 和 PC(复位向量)的存放位置。开发环境(如 Keil MDK, IAR EWARM, STM32CubeIDE)的链接脚本会自动处理。有时需要在软件中设置向量表偏移寄存器(SCB->VTOR)(如果程序在 Flash 中的实际起始地址不是0x0800 0000,例如使用了 Bootloader)。
⚙ 2. 从系统存储器启动 (System Memory - Embedded Bootloader)
- 功能: ST 在芯片出厂前,在内部 ROM 区域(称为“系统存储器”)预烧录了一个特殊的 Bootloader 程序。复位后,CPU 执行这个 Bootloader(起始地址通常是
0x1FFF 0000或类似,具体地址查芯片手册)。这个 Bootloader 支持通过特定接口(如 USART, CAN, USB DFU, I2C, SPI 等,具体支持哪些接口取决于芯片型号)接收来自 PC 端的指令,将新的应用程序编程(烧录)到主 Flash 存储器中。常用于无需外部编程器(如 ST-Link)的串口/USB 下载(ISP - In System Programming)。 - 配置方式:
- 硬件配置: 将 BOOT0 引脚拉高(连接到 VDD),并将 BOOT1(如果有)拉低(连接到 GND)。? 大部分 STM32 只有 BOOT0 和 BOOT1 两个引脚,此时 BOOT0 高 + BOOT1 低即为此模式。少数较新的系列(如某些 F7/H7)可能只有 BOOT0,其行为可能不同。
- 软件配置: 无需用户开发 Bootloader 软件(已固化在芯片内部)。用户需要使用 ST 提供的对应 PC 端软件(如
STM32CubeProgrammer的 UART/USB DFU 模式、Flash Loader Demonstrator等)来通过 Bootloader 进行通信和烧录。烧录完成后,通常需要将 BOOT0 改回低电平(或设置 BOOT1 为高电平)才能重新启动执行用户程序(即切换回第一种模式)。
? 3. 从内置 SRAM 启动 (Embedded SRAM)
- 功能: 复位后,CPU 从内置 RAM(
0x2000 0000地址)开始执行程序。由于 SRAM 掉电后数据会丢失,这种方式不是用来存储最终的用户程序的。它主要用于调试:- 在开发阶段快速测试代码片段或驱动程序,无需每次修改都烧写到 Flash(速度快)。
- 运行 RTOS 或复杂应用时,为了提高关键部分的执行速度,可以将部分代码(如中断服务程序)拷贝到 RAM 执行(需配合 Flash 启动并运行一个初始化程序来完成拷贝)。
- 与其它启动模式(如 Bootloader)配合,先将接收到的用户程序加载到 RAM 中执行(更少见)。
- 配置方式:
- 硬件配置: 将 BOOT0 引脚拉高(连接到 VDD),并将 BOOT1 引脚(如果有)也拉高(连接到 VDD)。
- 软件配置:
- 关键步骤: 必须将你的应用程序代码(或你打算在 RAM 中运行的那部分代码)正确加载到 RAM 的起始区域(
0x2000 0000)。这通常不是在 IDE 里简单编译链接就能完全自动完成的。 - 开发环境设置:
- 修改链接脚本: 在项目链接脚本(
.ld文件)中将程序的加载地址(ROM区域)和执行地址(RAM区域)都设置为 SRAM 的首地址(如0x20000000)。告诉链接器代码应该在 RAM 中运行。 - 向量表重映射: 在上电初始化代码中(通常在
main()之前,如Reset_Handler或SystemInit()函数中),必须设置系统控制块(SCB)的向量表偏移寄存器(SCB->VTOR),将其指向 RAM 中的向量表位置(通常是0x2000 0000)。这样 CPU 才能找到正确的栈指针初始值和复位入口地址。
- 修改链接脚本: 在项目链接脚本(
- 加载程序: 如何将二进制代码放入 RAM 是个挑战:
- 方式一(最常用): 在 "从 Flash 启动" 的模式下,运行一个位于 Flash 中的加载程序。这个程序的作用是通过某种方式(如通过 Bootloader、JTAG/SWD、UART 等)将目标代码从外部源(上位机、外部存储器)读取或拷贝到 SRAM,然后跳转到
0x2000 0000执行。烧录时只需烧录这个很小的加载程序到 Flash。 - 方式二(调试时方便): 使用 JTAG/SWD 调试器(如 ST-Link)直接将编译生成的二进制镜像下载到 RAM 中并运行。这需要在 IDE 的 "Debug" 或 "Run" 配置里设置目标为 RAM。
- 方式一(最常用): 在 "从 Flash 启动" 的模式下,运行一个位于 Flash 中的加载程序。这个程序的作用是通过某种方式(如通过 Bootloader、JTAG/SWD、UART 等)将目标代码从外部源(上位机、外部存储器)读取或拷贝到 SRAM,然后跳转到
- 速度限制: 代码在 RAM 中执行速度比在 Flash 更快(等待周期少)。
- 关键步骤: 必须将你的应用程序代码(或你打算在 RAM 中运行的那部分代码)正确加载到 RAM 的起始区域(
? 补充 - 软件配置(BOOT 引脚复用)
- 在很多 STM32 上,BOOT1 引脚在芯片复位后,如果其状态没有被硬件锁存器保留用于后续启动选择(部分型号有专门的启动锁存器),它可能会被配置成一个普通的 GPIO 引脚(例如
PB2/BOOT1)。这意味着用户程序运行后可以更改其方向(输入/输出)和电平。但请注意:复位时的电平决定了启动模式。程序运行后改变 BOOT1 的状态不会立即改变启动模式;只有下次复位时采样 BOOT 引脚的电平才会再次决定启动源。
? 重要提示
- 查阅数据手册: 以上是通用描述,务必查阅你所使用的具体 STM32 型号的参考手册和数据手册。不同系列、不同封装的芯片,BOOT 引脚的具体名称(是否叫BOOT0/BOOT1?还是别的?)、支持的启动接口种类、启动模式下的引脚状态要求、系统存储器 Bootloader 的具体功能和支持的通信接口等都可能存在差异。
- 典型应用: 产品工作模式几乎是 100% 采用 "从主闪存启动"。系统存储器启动主要用于没有或不便使用调试器时的程序烧录。"从内置 SRAM 启动" 主要用于特定调试场景。
- Bootloader 限制: 系统存储器 Bootloader 的功能(速度、接口)有限,通常使用 UART1/USART1 或 USB FS Device (DFU)。
- 向量表偏移 (
VTOR): 在非标准 Flash 地址(如使用了 Bootloader 的用户应用程序)或者 RAM 启动模式下,设置SCB->VTOR = <你的向量表起始地址>;是让中断能正常工作的关键! - 安全启动 (Option Bytes): 部分高端 STM32(H7)提供更复杂的启动选项和安全启动机制(如信任区域、安全启动向量),这些是通过配置选项字节(Option Bytes)实现的,配置方式不同(通常通过编程工具或软件库设置)。BOOT 引脚主要用于基本启动源选择。
通过正确配置 BOOT 引脚电平,并结合软件设置(链接脚本、VTOR),你可以灵活地控制 STM32 的启动行为,满足开发、调试和生产的不同需求。 ?
终于明白了:STM32三种启动方式
:一般程序的下载有三种方法:ISP(In System Programing)、ICP(In Circuit Programing)、IAP(In applicating Programing)这三种下载方式都是个啥
资料下载
佚名
2021-12-17 18:11:36
PCB八层板的三种叠层方式资料下载
电子发烧友网为你提供PCB八层板的三种叠层方式资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
资料下载
佚名
2021-04-03 08:51:31
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机