历史上的今天
返回首页

历史上的今天

今天是:2024年09月02日(星期一)

正在发生

2019年09月02日 | STM32开发 -- 启动流程

2019-09-02 来源:eefocus

启动模式讲完了,我们知道是主闪存存储器启动的(主闪存存储器就是芯片内部的flash)。主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它。

接下来,再看一下它的启动流程是怎样的。

话说启动流程,我都讲过很多个了。

参看:S5PV210开发 – 启动流程

参看:DM368开发 – Bootloader 开发(转毕设)


一、回顾

这里写图片描述

首先你得知道主闪存存储器、系统存储器、内置SRAM代表什么?它们映射哪个区域。

我主要以STM32F105RC为例来讲一下。

参看:STM32F105RC 介绍

这里写图片描述

主闪存存储器:芯片内部的flash,即256K字节;从用户闪存启动,这是正常的工作模式

系统存储器:应该类似于BL1(18K字节);将程序写入到一快特定的区域,一般由厂家直接写入,不能被随意更改或擦除。

内置SRAM:64K字节;由于SRAM掉电丢失,不能保存程序,一般只用于程序的调试。


二、内存布局

接下来我们就应该看一下,STM32F105RC的内存布局

这里写图片描述

查看,闪存模块的组织

分为:小容量产品(32K,1KB/page)、中容量产品(128K,1KB/page)、大容量产品(512K,2KB/page)、互联型产品(256K,2KB/page)

STM32F105RC的Flash为256K,可见为互联型产品(Connectivity line devices)

这里写图片描述

再看,NAND的地址映像

这里写图片描述

最后,是keil上我们可以设置 IROM起始地址

0x800 0000 – 0x800 4000 为boot


这里写图片描述

三、启动文件

这里之所以有 8 个启动文件,是因为对于不同容量的芯片启动文件不一样。对于 105 系列,主要是用其中 4 个启动文件:

startup_stm32f10x_ld.s: 适用于小容量 产品

startup_stm32f10x_md.s : 适用于中等容量产品

startup_stm32f10x_hd.s: 适用于大容量产品

startup_stm32f10x_cl.s: 适用于互联型产品


小容量产品主存储块最大为4K×64位,每个存储块划分为32个1K字节的页

中容量产品主存储块最大为16K×64位,每个存储块划分为128个1K字节的页

大容量产品主存储块最大为64K×64位,每个存储块划分为256个2K字节的页

互联型产品主存储块最大为32K×64位,每个存储块划分为128个2K字节的页


很显然,STM32F105RC 是互联型产品

那我们就看一下,startup_stm32f10x_cl.s

参看:startup_stm32f10x_cl.s文件解读


1、堆和栈的定义

Stack_Size      EQU     0x00000400


                AREA    STACK, NOINIT, READWRITE, ALIGN=3

                ;AREA 伪指令用于定义一个代码段或数据,定义栈,

                      可初始为0,8字节对齐2*2*2,2的3次方。

                ;STACK 段名 

;NOINIT:指定此数据段仅仅保留了内存单元, 

;READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。 

;ALIGN属性:使用方式为ALIGN 表达式。

   在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,

   表达式的取值范围为0~31,相应的对齐方式为2表达式次方。

Stack_Mem       SPACE   Stack_Size 

                ;SPACE 用来分配一片连续的存储区域并初始化为0。

                ;Stack_Mem  表示分配0x400个连续字节,并初始化为0

__initial_sp    ;表示栈空间顶地址,汇编代码地址标号 


栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。


Heap_Size       EQU     0x00000200


                AREA    HEAP, NOINIT, READWRITE, ALIGN=3 

                ;ALIGN用来指定对齐方式, 8字节对齐

__heap_base ;表示堆空间起始地址 

Heap_Mem        SPACE   Heap_Size

__heap_limit ;表示堆空间结束地址


                PRESERVE8

                THUMB


堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表


2、中断向量表

; Vector Table Mapped to Address 0 at Reset

;实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000) 

                AREA    RESET, DATA, READONLY

                ;定义一块数据段,只可读,段名字是RESET 

;DATA属性:用于定义数据段,默认为READWRITE。指定本段为可读可写 

                EXPORT  __Vectors 

                ;在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用 

                EXPORT  __Vectors_End

                ;在程序中声明一个全局的标号__Vectors_End 

                EXPORT  __Vectors_Size

                ;在程序中声明一个全局的标号__Vectors_Size 


__Vectors       DCD     __initial_sp               ; Top of Stack 

;栈顶地址,该处物理地址值即为 __Vetors 标号所表示的值

;该地址中存储__initial_sp 所表示的地址值,大小为一个字(32bit) 

                DCD     Reset_Handler              ; Reset Handler

                ;复位中断服务入口地址 

                DCD     NMI_Handler                ; NMI Handler

                ;不可屏蔽中断

                DCD     HardFault_Handler          ; Hard Fault Handler

                    ;硬件错误处理 

                DCD     MemManage_Handler          ; MPU Fault Handler

                DCD     BusFault_Handler           ; Bus Fault Handler

                DCD     UsageFault_Handler         ; Usage Fault Handler

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     SVC_Handler                ; SVCall Handler

                DCD     DebugMon_Handler           ; Debug Monitor Handler

                DCD     0                          ; Reserved

                DCD     PendSV_Handler             ; PendSV Handler

                DCD     SysTick_Handler            ; SysTick Handler

                ;系统滴答定时器 


                ;External Interrupts

                DCD     WWDG_IRQHandler            ; Window Watchdog

                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect

                DCD     TAMPER_IRQHandler          ; Tamper

                DCD     RTC_IRQHandler             ; RTC

                DCD     FLASH_IRQHandler           ; Flash

                DCD     RCC_IRQHandler             ; RCC

                DCD     EXTI0_IRQHandler           ; EXTI Line 0

                DCD     EXTI1_IRQHandler           ; EXTI Line 1

                DCD     EXTI2_IRQHandler           ; EXTI Line 2

                DCD     EXTI3_IRQHandler           ; EXTI Line 3

                DCD     EXTI4_IRQHandler           ; EXTI Line 4

                DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1

                DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2

                DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3

                DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4

                DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5

                DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6

                DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7

                DCD     ADC1_2_IRQHandler          ; ADC1 and ADC2

                DCD     CAN1_TX_IRQHandler         ; CAN1 TX

                DCD     CAN1_RX0_IRQHandler        ; CAN1 RX0

                DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1

                DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE

                DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5

                DCD     TIM1_BRK_IRQHandler        ; TIM1 Break

推荐阅读

史海拾趣

Ericsson公司的发展小趣事

Ericsson公司在早期就非常注重市场拓展和全球布局。通过与各国电信运营商建立合作关系,Ericsson成功将其产品和服务推广到了全球各地。特别是在中国市场,Ericsson早在19世纪90年代就与中国签订了供货合同,成为中国通信网络建设的重要参与者。如今,Ericsson已经在中国扎根130余年,成为了唯一一家从1G到5G全程参与中国通信网络建设的企业。

永源微电子(APM)公司的发展小趣事

随着国内外市场的不断开拓和技术实力的不断提升,永源微电子开始实施全球化战略。公司积极寻求与国际知名企业的合作机会,通过技术引进和合资合作等方式,不断提升自身的国际化水平。同时,永源微电子还注重内部管理和人才培养,通过建立完善的管理体系和激励机制,吸引和留住了一批优秀的技术人才和管理人才。在全球化战略的推动下,永源微电子实现了持续稳健的发展,成为了电子行业中一颗璀璨的明星。

以上五个故事分别从不同角度描绘了永源微电子(APM)公司的发展历程,包括创立与初步发展、技术突破与产品线拓展、市场拓展与品牌建设、A轮融资与战略合作以及全球化战略与持续发展等方面。这些故事基于事实性的描述,展现了永源微电子在电子行业中的成长轨迹和发展成就。

GISMA Steckverbinder GmbH公司的发展小趣事

GISMA深知产品质量对于企业生存和发展的重要性。因此,公司建立了完善的质量管理体系,并通过了DIN ISO 9001(DNV)等国际质量认证。这一认证不仅证明了GISMA在产品生产过程中的严格质量控制能力,也为其赢得了更多客户的信任和认可。GISMA始终坚持质量第一的原则,不断提升产品质量和服务水平,确保每一款产品都能达到客户的期望和要求。通过持续的质量管理和改进活动,GISMA在电子行业中树立了良好的品牌形象和口碑。

GETEDZ ( HVGT)公司的发展小趣事
电路设计要便于维护和检修,方便在设备出现故障时能够迅速定位并解决问题。
Alpha Semiconductor公司的发展小趣事

Alpha Semiconductor公司于1983年创立,成立之初,公司主要从事代工服务业务。这一策略为Alpha Semiconductor在半导体行业打下了坚实的基础。通过为其他公司提供高质量的代工服务,Alpha Semiconductor逐渐积累了技术实力和行业经验,为后续的自主研发和产品创新奠定了坚实的基础。

Dionics Inc公司的发展小趣事

进入21世纪后,随着物联网、人工智能等技术的快速发展,电子行业也面临着深刻的变革。Dionics Inc敏锐地捕捉到了这一趋势,并开始积极布局相关领域。通过持续的技术创新和产品升级,公司成功推出了一系列具有竞争力的新产品,并在市场上取得了不俗的成绩。同时,公司还加强了与高校、科研机构的合作,共同推动电子行业的创新发展。

问答坊 | AI 解惑

驱动编程中用哪个函数拷贝大容量数据耗时最少?

我用过memorycopy、write_register_buffer_ulong,他们在拷贝16k数据要消耗将近200us时间,有没有更省时间的函数阿?…

查看全部问答>

VC2005开发嵌入式,如何得到模拟器的识别号(id)等标识信息

VC2005开发嵌入式,如何得到模拟器的识别号(id)等标识信息  做软件加密…

查看全部问答>

针对 Xilinx Spartan™-6 LX150 的电源参考设计

此参考设计旨在给Spartan 6 LX150及带有TI Swift Integrated FETS的DC/DC转换器供电…

查看全部问答>

MSP430单片机C语言应用程序设计实例精讲-书pdf

MSP430单片机C语言应用程序设计实例精讲-书pdf…

查看全部问答>

ps2鼠标verilog

最近在看FPGA控制ps2来控制vga的显示,可是ps2鼠标的生成模块有很多输出管脚,不知道是不是都有用或者是有的没有用上呢?至少要多少端口,都是做什么的,谁能告诉一下我啊 这个就是生成的模块 …

查看全部问答>

随便聊聊,为什么我的芯币会增加这么多

搞不懂,自己也没发什么芯币购买附件的帖子,也只是偶尔签个到而已,芯币都好几百了,从哪来的啊。。。…

查看全部问答>

大饱眼福,与飞思卡尔技术论坛FTF的那些事

          2012年8月14日和15日,飞思卡尔FTF 2012在北京国贸大酒店隆重举行,作为行业内人士备受关注的科技盛会,场面自然异常火爆,小编更是兴奋至极,能够近距离目睹到飞思卡尔CEO Gregg Lowe,这位刚刚上任的掌 ...…

查看全部问答>

modesim不能打开。。

这个是警告内容,。。…

查看全部问答>

dcfifo_component

dcfifo_component  是什么 啊  有什么用呢…

查看全部问答>