历史上的今天
返回首页

历史上的今天

今天是: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 

推荐阅读

史海拾趣

Bce Sud公司的发展小趣事

随着公司规模的扩大和市场份额的提升,Bce Sud开始实施国际化战略。公司先后在多个国家和地区设立了研发中心和销售网络,进一步扩大了市场份额。通过与国际知名企业的合作与交流,Bce Sud不断提升自身的技术水平和国际竞争力。

FARNELL公司的发展小趣事

FARNELL公司成立于1937年,由创始人在英国利兹创建。起初,公司专注于电子元器件的分销,凭借其优质的产品和可靠的供货能力,逐渐在电子行业中崭露头角。在那个时代,电子产品正处于快速发展阶段,FARNELL公司凭借其前瞻性的市场洞察力和灵活的供应策略,赢得了众多客户的信赖。

Black Box Corporation公司的发展小趣事

为了进一步扩大市场份额,Black Box积极寻求与全球各地的企业合作。通过与跨国公司的战略合作,Black Box不仅获得了先进的技术和管理经验,还成功打开了多个国际市场。同时,公司也在全球范围内设立了多个分公司和办事处,以便更好地服务当地客户。这一系列的全球扩张行动使Black Box成为了真正意义上的国际企业。

Digital Core Design公司的发展小趣事

1988年,Core Design由Jeremy Heath-Smith创立,起初仅有8名员工和1万6千英镑的注册资金。这家新兴的游戏开发公司很快凭借其首款游戏《Rick Dangerous》在英国游戏市场崭露头角。这款游戏凭借其独特的游戏机制和引人入胜的故事情节,迅速登上英国游戏销量榜的榜首,并赢得了欧洲年度游戏奖,为Core Design的未来发展奠定了坚实的基础。

Faraday Electronics Inc公司的发展小趣事

随着技术的不断进步,Faraday Electronics Inc意识到单一的产品线已无法满足市场的多样化需求。于是,公司开始积极拓展市场布局,将产品线拓展至智能家居、汽车电子等领域。通过不断的技术创新和市场拓展,公司逐渐在多个领域取得了领先地位,成为了电子行业的佼佼者。

General Cable公司的发展小趣事
YN5103支持射频输出和红外遥控输出。射频输出时,工作频率在VHF(48.5MHz~223MHz)频段范围内;红外遥控时,红外载波频率为38MHz~40kHz。

问答坊 | AI 解惑

新产品快递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语句可以保 ...…

查看全部问答>

关于WINCE应用程序

我把整个的NAND FLASH读出来,然后通过一些办法把NK文件读出来了。。 但是我发现里面的都是系统文件,里面原先写入NAND FLASH文件的文件不能导出来。请问有什么办法把这些导出来。。 我写个示意图: 00000000H:xx xx xx xx xx xx xx xx xx xx ...…

查看全部问答>

GSM家居电器控制和远程数据采集大讨论,大家快来,有积分!!!

GSM家居电器控制和远程数据采集大讨论大串联,大家快来,有积分!!!…

查看全部问答>

wince驱动新手新手新新手[2]

在一本书里面有着样一段 \"先安装了wince5.0 然后将优龙提供的wince5.0 的BSP,即bvdmain文件夹拷贝到 wince500\\platform目录下\" 请问  是不是必须要 “优龙提供的wince5.0 的BSP”吗? 还是人人的bsp都可以??如果不可以 又请 ...…

查看全部问答>

招聘WINCE人才

招聘:要求计算机专业毕业,一年至三年工作经验,应届话需要优秀才会考虑。       熟练掌握C++或VC编程。       工作环境平台:嵌入式系统跑WINCE操作系统。     公司名:广州日创科技 &nb ...…

查看全部问答>

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是 ...…

查看全部问答>

菜鸟疑问

各位老鸟们:         我在ccs3.1中定义了一个数组,是全局变量。然后对他赋值,数组前面的元素赋对了,可后面的赋不上,在watch window中后面的元素也不能修改。有没有老鸟遇到过此类情况啊,求分析!!…

查看全部问答>

atmega48ADC两路采集问题

单路采集的时候可以。两路采集的切换也只能采集到一路的信号。我已经把采集到的第一个数据对调了。用的是单次转换…

查看全部问答>