从BOOT说起

BOOT在词典的解释为:

boot:(亦作 boot-up)[usu. as modifier] the process of starting a computer and putting it into a state of readiness for operation (电脑的)启动

既然是引申义,写者想它和靴子的联系,于是想到如下情景:当从屋子里要出门时,需要穿上长靴才能走后续的路,而程序需要知道指令首地址才能运行。不要问我为什么不是shoe.

在标准模式下,当复位发生时,由BOOT脚及BOOT_ADD0/1选项字将确定内核跳转到的地址。BOOT脚接低电平时,启动地址为0x08000000,即用户闪存存储空间(user Flash memory)的首地址;BOOT脚接高电平时,启动地址为0x1FF00000,即系统闪存存储空间(system Flash memory)的首地址,而在也是启动引导程序bootloader的首地址(后者属于前者)。

在评估板的BOOT脚一般接低电平,那么程序直接运行用户程序,即“.s”文件中的程序,那部分属于汇编和Cortex-M架构的内容了,这里不细展开。而当用户程序编写时有BUG,如写Flash时把Flash锁了,或设置低功耗模式,将导致新的程序下载不进去。那么把BOOT脚接高电平,程序将运行意法固化在系统存储中的BootLoader程序,对用户来说相当于ROM区域的程序,没有BUG,用户就可以在这个模式下通过SWD或bootloader的方式下载程序了。

BootLoader

在bootloader中,程序将在主循环等待和确定上位机通过某种方式(如UART,SPI)与它通信[2],而上位机可用通过如MCUISP这个的上位机软件实现具体的通信过程。

如果确认是串口与它通信,那么程序将在子循环通过具体的通信协议来擦除闪存、读/写保护设置和写入用户程序。

访问方式

注:前面说的是在默认访问方式——标准模式下进行的。

标准模式:用户存储(User memory)包含应用程序代码和数据,同时通过STM32 bootloader程序加载系统内存。当复位发生时,由BOOT脚及BOOT_ADD0/1选项字将确定内核跳转到的地址。(STM32 bootloader程序是出厂时固化到Flash的程序)

安全访问模式:此模式下,微控器总是从 secure bootloader 程序启动。于是,如果不需要安全服务,代码将安全地跳转到由BOOT脚及BOOT_ADD0/1选项字确定的(用户程序)启动地址。

从安全区域运行的代码才能访问Secure-Only区域 .安全访问模式是通过置位SECURE选项字位并且单片机复位进入的。

由“Table 17. Option byte organization”的出厂默认值知,默认情况下(即意法半导体交付设备时),使用的是标准模式,存储映射位SWAP_BANK==0。

注:这里需要对照着“2.6 Boot configuration”来看。寄存器BOOT_ADD0/1的值表示4字节地址值的高两字节。

存储映射

记得stm32f103的是将Flash地址从0x0800,0000映射到了0x0000,0000,而在stm32h743中,Flash的0x0000,0000地址是给ITCM的(这一点在程序调试时需要特别注意)。Stm32743中的存在着另一种存储映射,由SWAP_BANK选项位控制(默认设置为0,下电不丢失),具体见表15。存储映射是在上电复位或系统复位后确定的,在程序正常运行过程中不会改变,修改存储映射见图10。

由于地址映射的不同,stm32f103上错误地进行了空指针的解引用(dereference null pointer),将出现总线错误,但在stm32h743上,将会不知不觉地改变ITCM内的值,而不会直接出发错误。

参考资料

[1] RM0433 Reference manual :STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm®-based 32-bit MCUs

[2] AN2606 Application note :STM32 microcontroller system memory boot mode

[3] AN3155 Application note : USART protocol used in the STM32 bootloader

STM32H743:程序的启动相关推荐

  1. 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”...

    [VS2005]解决"由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题" 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现 ...

  2. android 自动打开第三方应用程序,Android如何做到应用程序图标隐藏,由第三方程序显示启动...

    Android如何做到应用程序图标隐藏,由第三方程序显示启动 发布时间:2020-07-13 03:25:02 来源:51CTO 阅读:11353 作者:ord1nary 在AndroidManife ...

  3. iOS 应用程序的启动流程及其代理

    应用程序的启动步骤 main函数调用UIApplicationMain. UIApplicationMain创建了一个UIApplication UIApplicationMain创建了一个AppDe ...

  4. 解决应用程序配置不正确,程序无法启动

    在使用 VC++2005环境下生成的程序,放置到未安装VC环境的机器下后,有时候会出现程序无法执行的错误,其提示是:应用程序配置不正确,程序无法启动,重新安装应用程序可能解决问题. 实际上,重装是解决 ...

  5. 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”(转贴)...

    [VS2005]解决"由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题" 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现 ...

  6. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8987342  这篇文章算是对整个引导界面开发专题的一个终结了吧,个人觉得大部 ...

  7. 解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题

    解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题 参考文章: (1)解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题 (2)https://www.cnblogs.com/xu ...

  8. PB程序“无法启动此程序,因为计算机中丢失PBvm90.dll。尝试重新安装该程序以解决此问题”的解决方法

    PB程序"无法启动此程序,因为计算机中丢失PBvm90.dll.尝试重新安装该程序以解决此问题"的解决方法 参考文章: (1)PB程序"无法启动此程序,因为计算机中丢失P ...

  9. MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误

    MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误 老姐笔记本中毒太深于病入膏肓,无奈迫写一程序"曲线救国".刚启动自己写的程序就出现应用程序配置不正确,应用程序未能 ...

  10. iOS程序的启动过程介绍

    大家在学习iPhone开发时候,都会写HelloWorld程序.大家一般都是通过向导,生成项目,然后通过模拟器启动应用程序.但是大家知道其背后的启动过程吗?也就是当点击程序图标启动程序开始到退出程序整 ...

最新文章

  1. Learn OpenGL (五):向量
  2. python文件的读取和写入
  3. Java线程中wait、await、sleep、yield、join用法总结
  4. Apache常见配置错误
  5. Android 时间维护服务 TimeService(针对于特殊定制设备)
  6. 智慧发电厂+智能发电厂web端平台管理系统+Axure高保真智慧电厂系统+能耗管理+告警管理+生产监控+安防设备管理+运维设备管理+监控面板+系统管理+智慧电厂+电厂系统+axure源文件+rp原型
  7. 黑马程序员 Java多态
  8. python 定时任务框架APScheduler
  9. 孙过庭草书:《景福殿赋》(图像古昔,以当箴规),韵味十足!
  10. 解决Windows照片查看器加载慢和颜色问题
  11. [3维影像]360度杯子环绕拍摄
  12. 图扑软件基于钻孔数据的三维地质模型可视化
  13. 【游戏】LOL只能攻击英雄,点不了小兵解决办法
  14. Svn中的tag标签的用法和意义
  15. controller(控制器)
  16. 华三交换机irf堆叠以及BFD检测配置
  17. StarUML 代码生成(C++)
  18. 安装r 源代码 linux,在RStudio中从源代码安装R软件包时遇到问题-Ubuntu 16.04
  19. 设计模式、架构、框架
  20. 【每日新闻】三星电子市值跌至全球第18位,落后中国阿里腾讯 | 中国AI领袖人物吴甘沙:无人驾驶技术距离我们已经不再遥远

热门文章

  1. Simulink中Delay模块的使用
  2. linux编译有线程的文件要加什么参数,Linux多线程实例,在编译中要加 -lpthread参数...
  3. 纳米器件,量子点理论文献拾遗
  4. Android elevation使用
  5. 3、PIC Harmony组件安装、工程创建及烧录
  6. 计算任意正整数的阶乘
  7. Java 8-Duration 详解
  8. 计算机考研408专业课 思维导图
  9. microsoft exchange server 2007 mrm
  10. 游标+bulk collect into limit的不同方法查询数据