在初写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函数都还没进,看起来中断向量的重映射位置还是够早的。

STM32从Flash地址0x08000000的启动重映射相关推荐

  1. 为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程

    STM32F103ZE芯片存储空间的地址映射关系图. 在MDK编译程序设置ROM和RAM地址时候发现: IROM1为片上程序存储器,即片上集成的Flash存储器,对该处理器Flash大小为512KB, ...

  2. STM32工作笔记0050---端口复用和重映射

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 端口复用重要,端口重映射作为了解,有些复杂.

  3. STM32学习日记3---定时器TIM3重映射PWM波呼吸灯实验

    文章目录 1. 代码 关于PWM波的输出,我们需要用到定时器的4个通道(通用定时器和高级定时器有,基本定时器没有这4个通道)里面的PWM生成.然后查看数据手册,了解定时器的重映射引脚情况.所以配置时, ...

  4. stm32运行java_STM32之——3种启动方式学习

    参考: https://blog.csdn.net/wwt18811707971/article/details/78678059 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第 ...

  5. OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结

    飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其中遇到的一些问题. 一键烧写本质上是启动位于SD卡中的Uboot ...

  6. STM32——端口复用与重映射

    目录 端口复用的概念 内置外设的概念 端口复用的概念 端口复用的配置 配置示例(串口1) 复用GPIO的配置 STM32中文参考手册 110页 端口重映射概念 端口重映射概念 部分重映射 完全重映射 ...

  7. for根据ID去重_汽车ECU参数标定之配置Overlay RAM实现Qorivva MPC57xx系列MCU参数在线标定和代码重映射原理和方法详解...

    内容提要 引言 1. MPC5744P的Overlay RAM工作原理介绍 2 MPC5744P的Flash Overlay配置详解 2.1 平台Flash标定区域描述字寄存器配置字0--PFLASH ...

  8. stm32内部Flash读写

    文章目录 1.stm32内部flash介绍 2.读写驱动编写 3.源码 上篇文章讲到了STM32来驱动外部flah的操作,flash真是好东西啊,内存大,能存的东西多,这样我们就可以用它来做一些大点的 ...

  9. 基于STM32的Flash擦除方式

    基于STM32的Flash擦除方式 前言 介绍 STM32 FLASH 闪存的编程和擦除 Flash擦除的标准库函数 软件设计 直接使用固件库函数擦除当前地址所在的内容 擦除对应地址和大小的Flash ...

最新文章

  1. LeetCode刷题记录13——705. Design HashSet(easy)
  2. Python 的编码问题UnicodeDecodeError: 'ascii' codec can't decode byte ××× in postition
  3. python3 logging 句柄释放 shutdown 简介
  4. C++11 std::bind std::function 高级用法
  5. python语言编程入门先学什么-初学者先学习python语言还是C语言
  6. 每日站立会议12/19
  7. Nature论文解读 | 基于深度学习和心脏影像预测生存概率
  8. GDAL/ORG之Python获取与安装
  9. C语言 strcat_s 函数 - C语言零基础入门教程
  10. delphi读取xml中的内容property name传递参数_Python 进阶知识全篇-XML 解析
  11. java高级之泛型详解
  12. 做折线图_Excel折线图这样做,老板看了要崩溃
  13. 查看docker内部路径_web应用在Docker容器中部署(Windows)
  14. html旅途模版,HTML黄色欧美形式探险旅途指南网页模板代码
  15. 批量查询ip地址的归属地
  16. 程序虽小但功能强大!5个实用的微信小程序,每款都是生活好帮手
  17. php字面量,浅谈js之字面量、对象字面量的访问、关键字in的用法
  18. 【C】指针的相关运算练习题
  19. 如何成为学术论文写作高手(更新ing)
  20. okhttputils使用(zhuan)

热门文章

  1. android p 华为p10,华为P10测评:市场上真心没有比华为更强劲的安卓机了
  2. 试分别简述udp和tcp的特点_小学语文试讲稿--落花生
  3. iOS 答题功能实现 —— HERO博客
  4. 2021-10-17 FLASK下的公共网盘以及私有网盘的写法
  5. c++简单随机数的获得
  6. 达梦数据库错误代码[-524]:超出全局hash join空间
  7. Qt之实现图片或按钮等控件的倒影效果
  8. mysql锁与性能_MySQL性能与锁
  9. 机器学习中常用的线性回归问题
  10. 计算机组织与结构徐苏版电子书百度云,计算机组织与结构(计算机科学与技术21世纪高等学校规划教材)...