STM32F1或F4芯片启动过程
2016-03-09 11:52
295 查看
STM32F1或STM32F4
启动过程描述:
STM32F1或F4
有三种启动模式,根据上电后两个BOOT脚的电平可以确定是哪种启动:
1、User boot 2、system
boot 3、SRAM boot
![](https://img-blog.csdn.net/20160309115315445?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
根据选定的启动模式
● User boot:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x00000000或0x08000000。
● systemboot:系统存储器被映射到启动空间(0x00000000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFFB000,其它产品原有地址为0x1FFFF000)访问它。
● SRAMboot:只能在0x20000000开始的地址区访问SRAM
注意:
存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总 线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex™-M4FCPU 始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为Flash)可以提供。
即启动后,首先从地址0x0000 0000执行。CPU从地址0x0000 0000获取堆栈顶的地址,并从0x0000 0004指示的地址开始执行代码。
用术语说就是:从地址0x0000 0000处取出MSP的初始值,从地址0x00000004处取出PC初始值
映射概念:比如主闪存存储器被映射到启动空间(0x0000 0000),就是主闪存存储器起始地址0x08000000放在启动空间地址0x0000 0004里面。有点像数学中映射(函数)
user flash的起始地址是0x08000000
system memory 的起始地址是0x1FFFF000
embedded SRAM的起始地址是0x20000000
主闪存存储器就是芯片内部的falsh
使用JLINK调试下载程序,一般下载到芯片内部flash,所以启动模式要设置为User boot启动
--------------------------------------------------------------------------------------------------------------------------------------------------
举例说明:
1、现在假设User flash
里已经烧写有应用程序。
选择user boot启动模式,,主闪存存储器被映射到启动空间(0x0000 0000)。
因为代码区始终从地址0x0000 0000开始执行,即先从地址0x0000 0000处取出MSP的初始值,从地址0x0000
0004处取出PC初始值,然后根据PC值跳转到0x0800000处
2。如果是system boot模式,则上电检测后会跳转到0x1FFFF000
解释STM32程序工程设置:
![](https://img-blog.csdn.net/20160309115339764?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
思考:为什么如此的设置链接起始地址?
答: R/O代表only read只读,即芯片内部flash
R/W代表read and write读写,即芯片内部SRAM
User flash 的起始地址是0x08000000
SRAM的起始地址是0x20000000
参考:
《STM32中文参考手册_V10》
P33
《STM32F4xx中文参考手册》
P56
《第2周 Cortex-M4体系结构》
P24
《STM32神舟王439IGT开发板用户手册20141020-5》
P215
启动过程描述:
STM32F1或F4
有三种启动模式,根据上电后两个BOOT脚的电平可以确定是哪种启动:
1、User boot 2、system
boot 3、SRAM boot
根据选定的启动模式
● User boot:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x00000000或0x08000000。
● systemboot:系统存储器被映射到启动空间(0x00000000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFFB000,其它产品原有地址为0x1FFFF000)访问它。
● SRAMboot:只能在0x20000000开始的地址区访问SRAM
注意:
存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总 线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex™-M4FCPU 始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为Flash)可以提供。
即启动后,首先从地址0x0000 0000执行。CPU从地址0x0000 0000获取堆栈顶的地址,并从0x0000 0004指示的地址开始执行代码。
用术语说就是:从地址0x0000 0000处取出MSP的初始值,从地址0x00000004处取出PC初始值
映射概念:比如主闪存存储器被映射到启动空间(0x0000 0000),就是主闪存存储器起始地址0x08000000放在启动空间地址0x0000 0004里面。有点像数学中映射(函数)
user flash的起始地址是0x08000000
system memory 的起始地址是0x1FFFF000
embedded SRAM的起始地址是0x20000000
主闪存存储器就是芯片内部的falsh
使用JLINK调试下载程序,一般下载到芯片内部flash,所以启动模式要设置为User boot启动
--------------------------------------------------------------------------------------------------------------------------------------------------
举例说明:
1、现在假设User flash
里已经烧写有应用程序。
选择user boot启动模式,,主闪存存储器被映射到启动空间(0x0000 0000)。
因为代码区始终从地址0x0000 0000开始执行,即先从地址0x0000 0000处取出MSP的初始值,从地址0x0000
0004处取出PC初始值,然后根据PC值跳转到0x0800000处
2。如果是system boot模式,则上电检测后会跳转到0x1FFFF000
解释STM32程序工程设置:
思考:为什么如此的设置链接起始地址?
答: R/O代表only read只读,即芯片内部flash
R/W代表read and write读写,即芯片内部SRAM
User flash 的起始地址是0x08000000
SRAM的起始地址是0x20000000
参考:
《STM32中文参考手册_V10》
P33
《STM32F4xx中文参考手册》
P56
《第2周 Cortex-M4体系结构》
P24
《STM32神舟王439IGT开发板用户手册20141020-5》
P215
相关文章推荐
- 【其它】Hello World
- android edittext 限制输入符号表情
- Azure上部署FTP服务
- Android从xml加载到View对象过程解析
- <Head first Java>继承与多态_重载与覆盖
- 解析设计模式中的Prototype原型模式及在C++中的使用
- UILabel自适应高度代码
- 【SSH进阶之路】Hibernate映射——一对多关联映射(七)
- CSS+Div (一)
- jquery实现图片缩小放大的切换
- SkyLine简介
- MySQL多表查询
- Python的下载及安装
- Window Server 2012无线网卡和声卡驱动解决方法
- 【kAri OJ605】陈队的树
- Codeforces Round #345 (Div. 2) D 细节题
- object_id
- NSString转换为char* char*转换为NSString
- 使用easy_install安装python包的方法 与python开源库
- pat1043:输出PATest