STM32H743:程序的启动
从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:程序的启动相关推荐
- 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”...
[VS2005]解决"由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题" 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现 ...
- android 自动打开第三方应用程序,Android如何做到应用程序图标隐藏,由第三方程序显示启动...
Android如何做到应用程序图标隐藏,由第三方程序显示启动 发布时间:2020-07-13 03:25:02 来源:51CTO 阅读:11353 作者:ord1nary 在AndroidManife ...
- iOS 应用程序的启动流程及其代理
应用程序的启动步骤 main函数调用UIApplicationMain. UIApplicationMain创建了一个UIApplication UIApplicationMain创建了一个AppDe ...
- 解决应用程序配置不正确,程序无法启动
在使用 VC++2005环境下生成的程序,放置到未安装VC环境的机器下后,有时候会出现程序无法执行的错误,其提示是:应用程序配置不正确,程序无法启动,重新安装应用程序可能解决问题. 实际上,重装是解决 ...
- 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”(转贴)...
[VS2005]解决"由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题" 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现 ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8987342 这篇文章算是对整个引导界面开发专题的一个终结了吧,个人觉得大部 ...
- 解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题
解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题 参考文章: (1)解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题 (2)https://www.cnblogs.com/xu ...
- PB程序“无法启动此程序,因为计算机中丢失PBvm90.dll。尝试重新安装该程序以解决此问题”的解决方法
PB程序"无法启动此程序,因为计算机中丢失PBvm90.dll.尝试重新安装该程序以解决此问题"的解决方法 参考文章: (1)PB程序"无法启动此程序,因为计算机中丢失P ...
- MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误
MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误 老姐笔记本中毒太深于病入膏肓,无奈迫写一程序"曲线救国".刚启动自己写的程序就出现应用程序配置不正确,应用程序未能 ...
- iOS程序的启动过程介绍
大家在学习iPhone开发时候,都会写HelloWorld程序.大家一般都是通过向导,生成项目,然后通过模拟器启动应用程序.但是大家知道其背后的启动过程吗?也就是当点击程序图标启动程序开始到退出程序整 ...
最新文章
- Learn OpenGL (五):向量
- python文件的读取和写入
- Java线程中wait、await、sleep、yield、join用法总结
- Apache常见配置错误
- Android 时间维护服务 TimeService(针对于特殊定制设备)
- 智慧发电厂+智能发电厂web端平台管理系统+Axure高保真智慧电厂系统+能耗管理+告警管理+生产监控+安防设备管理+运维设备管理+监控面板+系统管理+智慧电厂+电厂系统+axure源文件+rp原型
- 黑马程序员 Java多态
- python 定时任务框架APScheduler
- 孙过庭草书:《景福殿赋》(图像古昔,以当箴规),韵味十足!
- 解决Windows照片查看器加载慢和颜色问题
- [3维影像]360度杯子环绕拍摄
- 图扑软件基于钻孔数据的三维地质模型可视化
- 【游戏】LOL只能攻击英雄,点不了小兵解决办法
- Svn中的tag标签的用法和意义
- controller(控制器)
- 华三交换机irf堆叠以及BFD检测配置
- StarUML 代码生成(C++)
- 安装r 源代码 linux,在RStudio中从源代码安装R软件包时遇到问题-Ubuntu 16.04
- 设计模式、架构、框架
- 【每日新闻】三星电子市值跌至全球第18位,落后中国阿里腾讯 | 中国AI领袖人物吴甘沙:无人驾驶技术距离我们已经不再遥远