历史上的今天
返回首页

历史上的今天

今天是:2025年05月06日(星期二)

正在发生

2018年05月06日 | 为什么STM32从Flash地址0x08000000的启动重映射

2018-05-06 来源:eefocus

在初写STM32程序时,遇到一个困惑,STM32的Flash在MDK里被设置为起始地址0x0800 0000,而CM3手册规定芯片复位时要从0x0000 0000地址开始取出中断向量 ,那STM32怎么样执行代码呢?地址重映射?或者在0x0000 0000里有对应有实际存储器?

仔细阅读手册,发现这件事是因为STM32设计的Flash起始地址是在0x0800 0000位置开始的。全部代码都只能从这里开始存储。详见STM32 referenc manual手册第54页。

那既然从这里才能存储代码,就必须在MDK里设置Flash地址为0x0800 0000,下面是MDK设置页面,这个应该都看到过。

这样就还有一个问题,理论上,CM3中规定上电后CPU是从0地址开始执行,但是这里中断向量表却被烧写在0x0800 0000地址里,那启动时不就找不到中断向量表了?既然CM3定下的规矩是从0地址启动,SMT32当然不能破坏ARM定下的“规矩”,所以它做了一个启动映射的过程,就是和芯片上总能见到的BOOT0和BOOT1有关了,当选择从主Flash启动模式后,芯片一上电,Flash的0x0800 0000地址被映射到0地址处,不影响CM3内核的读取,所以这时的CM3既可以在0地址处访问中断向量表,也可以在0x0800 0000地址处访问中断向量表,而代码还是在0x0800 0000地址处存储的。这就是最难理解的地方,其实,这是基本上所有ARM芯片采用的启动映射方法。ARM7,ARM9没有内部Flash的通常都是这样做的。这个过程出自STM32 referenc manual手册,里面是有说明的。

还要注意,这个中断向量表是可以在程序中再次被映射的。控制它的就是CM3已经规定的NVIC寄存器SCB->VTOR。在STM32库中给出的启动代码里,startup_stm32f10x_hd.s文件里,第146行,是上电后读取中断向量表中的复位中断位置,并执行复位中断处理代码,代码如下:

; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP

 注意复位后第一个被执行的是SystemInit代码,这个代码在库目录下的system_stm32f10x.c文件里,它初始化了时钟,NVIC等一系列操作,这里摘要与中断向量有关的代码:

void SystemInit (void)

{

......

#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif 
}

可以看出中断向量重映射是一个选择性编译,通常宏定义VECT_TAB_SRAM都没有被定义,所以这里执行结束后,SCB->VTOR就是FLASH_BASE了,值为0x0800 0000。以后CM3再取中断向量里,就会根据SCB->VTOR的设置,从这里取向量执行了。中断向量自此终于转正。

注意这时连__main函数都还没进,看起来中断向量的重映射位置还是够早的。


推荐阅读

史海拾趣

Ametek公司的发展小趣事

Ametek公司成立于1930年,总部位于美国宾夕法尼亚州伯温。它是一家跨国公司,涉足电子仪器和电子设备的设计、制造和销售。以下是关于Ametek公司发展的五个相关故事:

  1. 初期成立与增长:Ametek最初成立为一个机械仪器制造商,专注于生产电动车和电动车零部件。随着时间的推移,公司逐渐扩展业务,开始涉足电子仪器和设备的制造,并迅速取得了成长。

  2. 收购与多元化发展:Ametek通过一系列收购和合并扩大了业务范围。这些收购使得公司能够进入新的市场领域,并获得新的技术和产品线。例如,1998年Ametek收购了Programmable Power,进入了电源和电源测试设备市场。这种多元化战略为公司带来了更广泛的客户群和收入来源。

  3. 技术创新和研发投入:Ametek不断投入研发,并推出了一系列技术创新产品。公司在测量、测试和分析技术方面取得了重大突破,为客户提供高质量的解决方案。Ametek的产品包括精密仪器、检测设备、传感器等,广泛应用于航空航天、能源、制造业等领域。

  4. 全球扩张与市场布局:Ametek通过建立全球销售网络和设施,实现了全球市场的扩张和布局。公司在北美、欧洲、亚洲等地设有多个生产基地和销售办事处,为客户提供及时的服务和支持。这种全球化战略使得Ametek能够更好地满足不同地区客户的需求,并加强了在全球市场的竞争力。

  5. 持续增长与业绩表现:Ametek持续实现了稳健的增长和良好的业绩表现。公司不断推出新产品、拓展市场,并通过提高生产效率和降低成本等措施提升盈利能力。Ametek的业绩稳步增长,为股东创造了可观的价值,并使得公司成为电子仪器和设备行业的领先企业之一。

这些故事展示了Ametek公司从成立初期到如今在收购与多元化发展、技术创新与研发投入、全球扩张与市场布局以及持续增长与业绩表现等方面取得的重要进展。

Dowosemi公司的发展小趣事

随着业务的不断发展,Dowosemi公司开始积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,将产品推向全球。在海外市场拓展的过程中,Dowosemi公司也遇到了不少挑战,但他们凭借优质的产品和服务,成功克服了这些困难。如今,Dowosemi公司的产品已经遍布全球多个国家和地区,为公司的发展注入了新的活力。

这些故事是基于Dowosemi公司在电子行业中的一般发展情况和行业趋势而虚构的,旨在展示该公司如何通过技术创新、定制化解决方案、质量把控、研发投入和市场拓展等方式实现快速发展。

B+B SmartWorx公司的发展小趣事

B+B SmartWorx在成立初期便注重全球市场布局,特别是在美国和欧洲市场。通过多年的深耕细作,公司在这些地区建立了广泛的销售渠道和优秀的团队。其产品在美洲市场占据了58%的份额,欧洲市场占28%,其余地区占14%。这种全球布局不仅提升了公司的品牌知名度,也为其后续发展奠定了坚实的基础。

晨晶电子(Chenjing Electronics)公司的发展小趣事

在追求经济效益的同时,晨晶电子也积极履行社会责任,致力于绿色环保事业。公司通过了ISO14001环境管理体系认证,严格遵守环保法规,实施清洁生产。同时,晨晶电子还积极推广环保理念,倡导绿色消费,为保护环境、促进可持续发展做出了积极贡献。

这五个故事不仅展示了晨晶电子在电子行业中的发展历程和成就,也体现了其不断创新、追求卓越的企业精神。在未来的发展中,晨晶电子将继续秉承这一精神,努力成为电子行业的佼佼者。

高博(GBG)公司的发展小趣事

在巩固功率MOSFET市场地位的同时,谷峰公司还积极拓展其他应用领域。公司的半导体产品广泛应用于PD快充、机器人、电动工具、LED照明、5G基站、充电桩等多个领域,满足了不同客户的多样化需求。此外,谷峰还紧跟行业发展趋势,不断推出新产品和技术解决方案,以应对市场的快速变化。这种多元化的发展策略不仅为公司带来了新的增长点,还增强了其抵御市场风险的能力。

AMI Semiconductor公司的发展小趣事

在巩固功率MOSFET市场地位的同时,谷峰公司还积极拓展其他应用领域。公司的半导体产品广泛应用于PD快充、机器人、电动工具、LED照明、5G基站、充电桩等多个领域,满足了不同客户的多样化需求。此外,谷峰还紧跟行业发展趋势,不断推出新产品和技术解决方案,以应对市场的快速变化。这种多元化的发展策略不仅为公司带来了新的增长点,还增强了其抵御市场风险的能力。

问答坊 | AI 解惑

联想前高管自述“我的职场十年”!

谢耘,1963 年生,清华大学电子工程系博士,神州数码副总裁兼首席技术官。曾任联想科技发展有限公司副总经理, 中科院计算技术研究所副所长,联想研究院副院长,神州数码软件公司总经理。…

查看全部问答>

入行十多年的电子工程师对研发工作的一点感悟

一、现有状况分析 不觉新人来到我们研发已近一年,这一年里,同一批人员,有的已经很快适应了环境,经过自己的努力和付出,能为研发工作独挡一面,成为某一方面的小专家;有的尽管前期不太适应,但是通过指导和修正,业已慢慢进入了工作状态,相信 ...…

查看全部问答>

关于OEMInit()中调用NandFlash总是编译不通过问题

RT,项目中需要显示开机LOGO,BootLoader中显示图片过后,lanch os的时候,屏幕的图片消失,所以决定在OEMInit中添加显示LOGO函数。由于图片数据是放在flash里制定的区域的,所以说要调用flash的读写函数,来完成这个功能。我在OEMInit中直接调用Bo ...…

查看全部问答>

按键 数码管闪动 问题

各位大侠    我的问题是  板上 5 个按键 5 个数码管  由于电路中没法加电容 我在按键时 采用延时防抖 可是 这样出现了 程序以为是连续按键  这样产生了 程序 连续运行 和 延时时  数码管黑掉 ...…

查看全部问答>

怎样使wince桌面图标文字背景透明???

改壁纸后图标文字背景还是蓝色,怎么改成透明??…

查看全部问答>

Falcom A2D-1 能否GPRS上网?

现在用的是Falcom A2D-1型号的GSM模块,用模块自带的上位机软件直接接PC的串口: 能打电话,能接电话 能发短信,能收短信 但是我实际要做的是用这个模块实现GPRS上网。 请问: 1.这个模块能实现GPRS上网么? 2.GPRS上网和GSM模块有没有关系? ...…

查看全部问答>

求WINCE API大全

求WINCE5.0 API大全,或者有相关的详细资料也更好. 现在做MODEM通信方面的,如果有相关的API使用方法说明,也请给献出.…

查看全部问答>

DSP速成

新建的DSP2812学习交流群,118296485,欢迎加入。…

查看全部问答>

请教:STM32USBHID的例程里能增加批量传输的端点吗?

                                 现在例程用中断传输的,想增加批量传输的端点,不知道是否可以?能可以,是否可以描述一下,怎么做?谢谢!…

查看全部问答>

招聘FAE

招聘FAE: 要求: 1. 工作三年以上; 2. 做过嵌入式开发; 3. 熟练linux驱动开发或Android系统开发; 4. 有相关FAE工作经验也可。 职责: 1. 主要负责wifi无线产品技术支持; 有意者请将简历发送到lvpeng52@hotmail.com和perryl@edom-tech. ...…

查看全部问答>