江科大stm32项目的启动过程分析

启动流程

以内部flash启动为例,上电重启后,cpu从0x08000000地址开始的4个字节获取MSP的初始值,从0x08000004地址开始的4个字节获取PC的值。0x08000004地址存储的是Reset_Handler函数的地址值加1(因为CM通过LSB位,即最低位判断cpu是Thumb态还是ARM态,复位异常Reset_Handler只能在Thumb态下执行,所以赋给PC的地址值必须是奇数,但Reset_Handler的实际地址值为偶数)

Reset
从0x08000000地址获取MSP初值
从0x08000004地址获取PC值
Reset_Handler
startup_stm32xxx.s
main函数

stm32启动文件

stm32启动文件由st官方提供,在官方的固件包里。启动文件由汇编编写,是系统上电复位后第一个执行的程序。

启动文件主要做了以下工作:

1 初始化堆栈指针SP=__initial_sp

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

3 设置堆和堆的大小

4 初始化中断向量表

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

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

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

内存布局

boot0=0,boot1=x(0或1都可以) 从flash启动,将0x08000000映射到0x00000000

1 内核会从地址0x08000000处取出堆栈指针MSP的初始值,该值是栈顶地址。

2 从地址0x08000004处取出PC的初始值,该值指向中断服务程序Reset_Handler

CPU会从PC指向的地址取出第一条指令开始执行,就是执行复位中断服务程序Reset_Handler

系统启动后,初始化堆栈,MSP和PC后的内存情况

请添加图片描述

通过反汇编和仿真可以查看MSP和PC的值。

生成反汇编文件

在项目目录下编写和 生成反汇编文件.bat ,内容如下,双击即可生成反汇编文件

C:\software\Keil_v5\ARM\ARMCC\bin\fromelf --text -a -c --output=Project.axf.txt Objects\Project.axf

请添加图片描述

IROM规定了内部存储器ROM的地址空间,其中0x08000000是内部flash的起始地址;IRAM规定了内部存储器RAM的地址空间,其中0x20000000是内部sram的地址空间。根据启动模式的选择和栈空间的划分,修改IROM1和IRAM1。

反汇编代码

** Section #1 'ER_IROM1' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
    Size   : 4612 bytes (alignment 4)
    Address: 0x08000000

    $d.realdata
    RESET
    __Vectors
        0x08000000:    20000670    p..     DCD    536872560;->MSP
        0x08000004:    08000189    ....    DCD    134218121;->PC
        0x08000008:    08000489    ....    DCD    134218889
        0x0800000c:    08000369    i...    DCD    134218601
        ...

MSP栈空间:0x20000000~0x2000066f

reset向量地址:0x08000188 (MSP的LSB位置1)

仿真

使用keilv5成功编译后,选择Debug->Start/Stop Debug Session

View->Memory Windows->Memory 1,然后在Memory 1窗口中 Address地址栏

输入0x08000000后按回车,就可以查看内存信息

生成bin文件

C:\software\Keil_v5\ARM\ARMCC\bin\fromelf --bin -a -c --output=Objects\Project.bin Objects\Project.axf

打开bin文件,可以看到前8字节为70 06 00 20 89 01 00 08分别对应MSP的初始值0x20000670和PC的初始值0x08000189

参考文献

STM32F103的启动过程及BootLoader作用:https://blog.csdn.net/qq_52907930/article/details/134892983

《Cortex-M3权威指南》

【STM32入门教程-2023版 细致讲解 中文字幕】 https://www.bilibili.com/video/BV1th411z7sn/?share_source=copy_web&vd_source=d0f633652d9c65dbc8655dcbf681e5b0 本文按采用该教程的项目进行反汇编分析。

1th411z7sn/?share_source=copy_web&vd_source=d0f633652d9c65dbc8655dcbf681e5b0 本文按采用该教程的项目进行反汇编分析。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值