STM32启动流程

1.根据boot引脚决定启动方式

启动方式由两个引脚决定,复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。

BOOT0:专用启动引脚只用于BOOT启动方式的改变

BOOT1:启动引脚/GPIO双用途。该引脚在BOOT引脚数值锁存后用途转为GPIO

下面是三种方式的区别:

1.1 常规模式启动方式0+x

该方式下STM32内置FLASH起始地址被重映射在0x00000000地址,代码从该处开始执行。一般使用JTAG或SWD模式下载调试代码,使用该方式。

  • 在此模式下,处理器会执行复位向量表中的复位地址,从而启动芯片。
  • 芯片会执行各种初始化操作,包括时钟初始化、外设初始化等,然后跳转到用户定义的启动代码。

1.2 Bootloader模式 启动方式1+0

内置ROM将被映射到0x00000000地址,该地址有出场预置代码,该部分代码可起桥梁作用,通过USART/CAN/USB将代码写入STM32内置flash中,通常用于更新固件或通过外部接口加载新的程序。这种方式被称为ISP(In System Programing)烧录。

  • 在此模式下,处理器会将启动地址设置为Bootloader的起始地址,而不是复位向量表中的复位地址。
  • Bootloader负责检查外部接口是否有新的程序,如果有,则加载并启动新程序;否则,它会跳转到复位向量表中的复位地址。

1.3 系统内存模式启动方式1+1

从SRAM启动,SRAM的起始地址将被重映射到0x00000000地址,代码从该地址开始运行,该模式烧录不必擦写Flash,速度快,适合调试,但代码掉电丢失。

  • 在此模式下,处理器会将启动地址设置为系统内存中的特定地址,而不是复位向量表中的复位地址。
  • 系统内存包含一个特殊的Bootloader,它可以用于加载新的固件或执行其他恢复操作。

值得注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。

常规启动模式:

 1、初始化堆栈指针 SP = _initial_sp

2、初始化程序计数器指针 PC = Reset_Handler

3、设置堆和栈的大小

4、初始化中断向量表

5、配置外部 SRAM 作为数据存储器(可选)

6、配置系统时钟,通过调用 SystemInit 函数(可选)

7、调用 C 库中的 _main 函数初始化用户堆栈,最终调用 main 函数

参考:

c​​​​​​​http://t.csdnimg.cn/kNnAH

http://t.csdnimg.cn/L5tAl

http://t.csdnimg.cn/KyhJ0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值