历史上的今天
今天是:2024年11月04日(星期一)
2021年11月04日 | STM32 启动过程简述
2021-11-04 来源:eefocus
根据启动模式分析的结论:
1、 通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x02000000,同时复位后PC指针位于0x02000000处;
2、 通过boot引脚设置可以将中断向量表定位于FLASH区,即起始地址为0x08000000,同时复位后PC指针位于0x08000000处;
3、 通过boot引脚设置可以将中断向量表定位于内置Bootloader区,本文不对这种情况做论述;
STM32 将0x8000000 映射到 0x00000000,即如果从内部FLASH启动,会从 0x08000004 处进行取指令 (CM3定义的 0x08000000 用于存放SP指针),故,0x00000000 与 0x8000000 内容完全相同,如下所示:
整体过程为:
①上电后硬件设置SP、跳转到 Reset_Hander
②设置系统时钟(SystemInit)
③软件设置SP
④加载.data、.bss,并初始化栈区(__main)
⑤跳转到C文件的main函数
在.s文件中,已经将中断向量表定义完整,系统会跳转到固定地址进行执行。第一条执行 Reset_handler。接着执行SystemInit设置运行时钟信息(72MHz)。
__main函数是内部的一个库函数,在此函数中调用了_scatter_load, _scatterload_null, _scatterload_copy 等函数,负责初始化堆栈,RW-DATA搬运,ZI段初始化等等操作。并最终跳转到 main 函数。
值得注意的是:Keil编译完成后:
Code:代表程序代码段
RO_DATA:代表只读数据段
RW_DATA:代表已经初始化全局数据
ZI_DATA:代表未初始化全局数据
由于程序在 FLASH 中直接通过总线进行访问,程序运行在 FLASH 上,而可更改的数据存于 SRAM 中,故:
RO_SIZE = Code + RO_DATA(占用 Flash )
RW_DATA = RW_DATA + ZI_DATA(占用 SRAM)
ROM_SIZE = Code + RO_DATA + RW_DATA ( 烧写到 FLASH 大小空间 )
针对 ZI 数据,是不存 FLASH 中,直接在 SRAM 中初始化为 0
史海拾趣
|
新产品快递Allegro’s LED Backlight Driver IC for Large Displays Allegro’s LED Backlight Driver IC for Large Displays The new device integrates a scalable-output boost controller operating in constant-frequency current mode control – adjustable between 300kHz and 1MHz - drivin ...… 查看全部问答> |
|
【FPGA设计问题】Xilinx的IOBUF移植到Altera器件中,RTL代码如何修改? Xilinx的IOBUF移植到Altera器件中,RTL代码如何修改? Xilinx的IOBUF移植到Altera器件中,RTL代码如何修改?本人以前使用的是Xilinx的FPGA,现在改用Altera的FPGA,不知道在对双向端口的控制在Altera中是怎样实现的,直接用下面的assign语句可以保 ...… 查看全部问答> |
|
我把整个的NAND FLASH读出来,然后通过一些办法把NK文件读出来了。。 但是我发现里面的都是系统文件,里面原先写入NAND FLASH文件的文件不能导出来。请问有什么办法把这些导出来。。 我写个示意图: 00000000H:xx xx xx xx xx xx xx xx xx xx ...… 查看全部问答> |
|
在一本书里面有着样一段 \"先安装了wince5.0 然后将优龙提供的wince5.0 的BSP,即bvdmain文件夹拷贝到 wince500\\platform目录下\" 请问 是不是必须要 “优龙提供的wince5.0 的BSP”吗? 还是人人的bsp都可以??如果不可以 又请 ...… 查看全部问答> |
|
embedded visual c++4.0安装过程中 sp4安装不成功 尝试很多次,一直安不成功。 本人使用电脑为联想的笔记本,自带操作系统,是不是因为他里面装了一些软件导致冲突造成。 错误提示 Internal Error2349! 非常感谢各位大虾! 另,我是一初学者,还请各位指教本书来尽快上手。… 查看全部问答> |
|
【M4开发板Hanker试用狂-Shower.Xu】9、有容乃大-基于USB设备的SD读卡器实现 失败了无数次之后,一瞬间竟然可以了。成功和失败只隔了一层纸,但是个中滋味却相差甚远...简单记录一下移植过程:1、在SD实现读写的移植基础上展开。2、usb端口初始化和USB鼠标一样,无需改变。3、在此基础上加入下图几个文件usb_msc_structs.c是 ...… 查看全部问答> |






