当前位置: 首页 > news >正文

STM32H562----------启动时钟分析

1、H562启动过程分析

1.1、启动模式

复位方式有三种:上电复位、硬件复位和软件复位。当产生复位后,离开复位状态后 CM33 内核做的第一件事就是

读取堆栈指针 MSP 的初始值及程序计数器指针 PC 的初始值:

1、从地址 0x0000 0000 处读取出堆栈指针 MSP 的初始值,该值即栈顶地址;

2、从地址 0x0000 0004 处读取程序技术器指针 PC 的初始值,该值指向复位后执行的第一条指令;

启动模式选择即将 0x0000 0000 和 0x0000 0004 两个地址重映射到其它地址空间;

对于 H562 系列 TrustZone 功能是否关闭启动模式不一样,如下图:

由上图可知,STM32H5 的启动地址是由 BOOT0 引脚电平状态和 NSBOOTADD[31:8] 或 SECBOOTADD[31:8]

选项字节共同决定的,它们总共可以分为 4 个组合,下面以关闭 TrustZone 为例:

1、产品在 Open 的情况下,BTTO 引脚电平为低电平时,启动地址由用户选项字节 NSBOOTADD[31:8] 来决定

ST 出厂默认的启动地址为 0x0800 0000;

2、产品状态在任意模式下,BOOT0 引脚电平为高时,用户选项字节 NSBOOTADD[31:8] 此时不起作用,启动

地址在 ST 官方的 Bootloader 程序开始启动,此时可以用 ST 官方默认的接口,如:USART、I2C 等下载程序

3、产品状态在 Provisioning 的情况下,此时 BOOT0 引脚和用户选项字节 NSBOOTADD[31:8] 不起作用,程序从

RSS(根安全服务)启动。

4、产品状态在 Provisioned、Closed、Locked 的情况下,BOOT0 引脚电平为低电平时,启动地址由用户选项

字节 NSBOOTADD[31:8] 来决定,ST 出厂默认的启动地址是 0x0800 0000。

1.2、启动文件分析

STM32 启动文件由 ST 官方提供,在官方的 STM32Cube 固件包里,对于 STM32H562 系列芯片的启动文件,选用的

是 startup_stm32h562xx.s 文件。启动文件使用汇编编写,是系统上电复位后执行的第一个程序;

启动文件中的一些指令:

EQU: 将一个标识符与一个固定值或表达式绑定,相当于C语言中的define
AREA: 用于定义代码或数据的内存区域()
SPACE: 用于在内存中分配指定大小的未初始化空间
PRESERVE8: 当前文件堆栈需要按照8字节对齐
THUMB: 表示后面指令兼容THUMB指令
EXPORT: 声明一个标号具有全局属性,可被外部的文件使用
DCD: 以字节为单位分配内存,要求4字节对齐,并要求初始化这些内存
PROC: 定义子程序,与ENDP成对使用,表示子程序结束
WAEK: 弱定义,若外部文件声明了一个标号,则优先使用外部文件定义的标号,若外部文件没有定义也不会出错需注意的是:该指令不是ARM的指令,是编译器的。
IMPORT: 声明标号来自外部文件,跟C语言中的extern关键字类似
LDR: 从内存中将数据读取到寄存器
BLX: 跳转到由寄存器给出的地址,并根据寄存器的LSE确定处理器的状态,还要把跳转前的下条指令地址保存到LR
BX: 跳转到由寄存器/标号给出的地址,不用返回
B: 将程序计数器(PC)的值修改为目标地址
IF,ELSE,ENDIF: 汇编条件分支语句
END: 到达文件结尾,文件结束
1、栈空间初始化

栈初始化源码如下图:

含义:定义一个大小为 0x0000 0800(2KB)的栈空间,段名为 STACK,NOINIT:不初始化;

READWRITE:可读可写;ALIGN=3:按照 2^3=8 字节对齐;

SPACE 分配内存指令,分配大小为 Stack_Size 字节连续的存储单元给栈空间;

_initial_sp:标记初始栈顶地址(标签)

栈主要用于存放局部变量,函数形参等,属于编译器自动分配和释放的内存,栈的大小不能超过内部 SRAM 的大小;

若工程的程序量比较大,定义的局部变量比较多,那么就需要在启动代码中修改栈大小,即修改 S

相关文章:

  • Listener method could not be invoked with the incoming message
  • Linux之基础IO
  • 非线性1无修
  • python + pip 独家秘籍
  • C++ map容器: 插入操作
  • 5.18 day24
  • 新电脑软件配置三 pycharm
  • 【应用开发十】pwm
  • ffmpeg -vf subtitles添加字幕绝对路径问题的解决方法
  • [创业之路-358]:从历史轮回到制度跃迁:中国共产党创业模式的超越性密码
  • 三:操作系统线程管理之用户级线程与内核级线程
  • Milvus(25):搜索迭代器、使用分区密钥
  • 为实时数据构建WebSocket解决方案的挑战
  • Git在与远程仓库建立连接时,不小心输错密码导致连接失败,之后无法弹出用户名密码的输入框解决方案
  • 面试题总结二
  • 记录一次修改nacos安全问题导致服务调用出现404
  • KnowCard:我的知识卡片生成器是怎么炼成的?
  • web中路径问题
  • 能力验证及大练兵活动第一期
  • LeetCode Hot100刷题——除自身以外数组的乘积
  • 消费维权周报丨上周涉汽车类投诉较多,涉加油“跳枪”等问题
  • 国家统计局:消费对我国经济增长的拉动有望持续增长
  • 大学2025丨苏大教授王尧:文科最大的危机是阐释世界的能力弱化
  • 贯彻落实《生态环境保护督察工作条例》,充分发挥生态环境保护督察利剑作用
  • 上海青少年书法学习园开园:少年以巨笔书写《祖国万岁》
  • 病愈出院、跳大神消灾也办酒,新华每日电讯:农村滥办酒席何时休