STM32F1或F4芯片启动过程

来源:互联网 发布:nodejs res.json 编辑:程序博客网 时间:2024/06/05 00:12

STM32F1STM32F4启动过程描述:

STM32F1F4有三种启动模式,根据上电后两个BOOT脚的电平可以确定是哪种启动:
1
User boot  2system boot 3SRAM 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

0 0
原创粉丝点击