STM32F10xxx启动模式分析(详细)
2013-08-09 13:12
253 查看
STM32的启动模式:
STM32有三种启动模式,对应的存储介质均是芯片内置的:
![](http://images.cnitblog.com/blog/279335/201308/09130550-1ba022d189664b21a217e0b61484c8d0.png)
1. User Flash Memory(Main Memory)
= 芯片内置的Flash,用户程序存放在其中,这是正常的工作模式。一般情况下,都是选择这种启动方式。
2. System Memory(System Memory)
= 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域在出厂后没人能进行擦写或修改,是一个ROM区。
3. SRAM
= 芯片内置的RAM去,也就是STM32的内存了。这种模式可用于调试。HOW?如何将程序download到SRAM?仿真器能做到这一点?
下面看一下STM32F10xxx Reference Manual中关于启动配置的描述。
![](http://images.cnitblog.com/blog/279335/201308/09130632-26b28dc8f01d4c0bbf7e3743359d1675.png)
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/24A56D573BF345AB953BC9F5560BC18D/clipboard.png)
1. CPU从地址0x0000 0000 获取堆栈顶的地址,并从启动存储器的0x0000 0004 指示的地址开始执行代码。
——这句话暂时不理解,待学习。
2. STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM 启动。
——这个机制具体是怎么实现的不去深入追究,结合STM32F10xxx的的Memory Map可以更直观的理解一下。
![](http://images.cnitblog.com/blog/279335/201308/09130658-6bbe955f5204469b92c0e5b0aac24e9f.png)
3. 注意:当从内置SRAM 启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,重新映射向量表至SRAM 中。
——如何重新重新映射向量表?
分别分析一下这3种启动方式:
1. Boot from User Flash Memory
这是STM正常的启动方式,STM32从Flash存储的第一条指令开始执行,即执行STM32的启动代码stm32f10x_vector.s(或stm32F10x_xxx_xxx.s或startup_xxx.s 根据STM32 Firmware library的不同而不同),执行启动代码后会跳到main函数,执行用户程序。
2. Boot from System Memory
该启动方式主要是用于下载程序到User Flash Memory中。System Memory即STM32的ROM,该区域中存放着出厂前预置好的bootloader程序,该程序支持Uart,CAN,USB下载(STM32F103XX只支持从UART1下载)。用户可以根据bootloader中的命令定义(可参考《AN3155》),自己编写一个PC客户端程序,通过将PC的串口与STM32的UART1相连,然后将程序下载到User Flash Memory中。
因为最终还是要运行用户的程序,因此必须让STM32跳转到User Flash Memory中运行。有两个方法:
1)当程序成功下载到User Flash Memory后,将bootloader的GO命令的address设置为User Flash Memory中的地址,然后通过PC客户端程序发送GO命令给bootloader,bootloader会根据GO命令的address参数,跳转到User Flash Memory中启动程序。
2)当程序成功下载到User Flash Memory后,将pin BOOT0设置为0,Reset STM32,则STM32会从User Flash Memroy中启动。
3. Boot from SRAM
主要用于JTAG,JLINK仿真调试,暂时还没有仿真器,没有仔细研究。
附录:STM32 Flash组织结构分析:
![](http://images.cnitblog.com/blog/279335/201308/09131016-6743c18bc3b34071b6d71d7b74c7307a.png)
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/9AE50874230147028594351AF25FC870/clipboard.png)
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/2BA89806615543DB839256AA245FF665/clipboard.png)
Main Memory:
Page0 - Page127 = 1KB * 128Page = 128KB total
该区域地址范围:0x08000000 - 0x0801FFFF,总大小为128K字节。
该区域的主要用途:存放STM32的代码段(用户程序)。
Information Block:
System memory:
系统内存,该区域存放着STM32的bootloader,该bootloader是芯片出厂时就设置好的,主要用于通过UARTx下载程序到Main Memory中。用户可以自定义host下载程序,根据bootloader的消息定义,通过UARTx与bootloader通信,实现程序下载和程序启动引导。详细请参考文档《AN3155》。
Options bytes:
What's this used for?
Flash memory interface registers:
操作这些寄存器,可实现对Flash的读写等操作。详细请参考文档《PM0075》
备注:文中提到的文档,均可在STM32的官方网站上下载到,如下载《AN3155》,在http://www.st.com/web/en/home.html网站上搜索‘AN3155’即可。
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/AF1471EE5A9C4434B276287AA38A1CA6/clipboard.png)
STM32有三种启动模式,对应的存储介质均是芯片内置的:
![](http://images.cnitblog.com/blog/279335/201308/09130550-1ba022d189664b21a217e0b61484c8d0.png)
1. User Flash Memory(Main Memory)
= 芯片内置的Flash,用户程序存放在其中,这是正常的工作模式。一般情况下,都是选择这种启动方式。
2. System Memory(System Memory)
= 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域在出厂后没人能进行擦写或修改,是一个ROM区。
3. SRAM
= 芯片内置的RAM去,也就是STM32的内存了。这种模式可用于调试。HOW?如何将程序download到SRAM?仿真器能做到这一点?
下面看一下STM32F10xxx Reference Manual中关于启动配置的描述。
![](http://images.cnitblog.com/blog/279335/201308/09130632-26b28dc8f01d4c0bbf7e3743359d1675.png)
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/24A56D573BF345AB953BC9F5560BC18D/clipboard.png)
1. CPU从地址0x0000 0000 获取堆栈顶的地址,并从启动存储器的0x0000 0004 指示的地址开始执行代码。
——这句话暂时不理解,待学习。
2. STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM 启动。
——这个机制具体是怎么实现的不去深入追究,结合STM32F10xxx的的Memory Map可以更直观的理解一下。
![](http://images.cnitblog.com/blog/279335/201308/09130658-6bbe955f5204469b92c0e5b0aac24e9f.png)
3. 注意:当从内置SRAM 启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,重新映射向量表至SRAM 中。
——如何重新重新映射向量表?
分别分析一下这3种启动方式:
1. Boot from User Flash Memory
这是STM正常的启动方式,STM32从Flash存储的第一条指令开始执行,即执行STM32的启动代码stm32f10x_vector.s(或stm32F10x_xxx_xxx.s或startup_xxx.s 根据STM32 Firmware library的不同而不同),执行启动代码后会跳到main函数,执行用户程序。
2. Boot from System Memory
该启动方式主要是用于下载程序到User Flash Memory中。System Memory即STM32的ROM,该区域中存放着出厂前预置好的bootloader程序,该程序支持Uart,CAN,USB下载(STM32F103XX只支持从UART1下载)。用户可以根据bootloader中的命令定义(可参考《AN3155》),自己编写一个PC客户端程序,通过将PC的串口与STM32的UART1相连,然后将程序下载到User Flash Memory中。
因为最终还是要运行用户的程序,因此必须让STM32跳转到User Flash Memory中运行。有两个方法:
1)当程序成功下载到User Flash Memory后,将bootloader的GO命令的address设置为User Flash Memory中的地址,然后通过PC客户端程序发送GO命令给bootloader,bootloader会根据GO命令的address参数,跳转到User Flash Memory中启动程序。
2)当程序成功下载到User Flash Memory后,将pin BOOT0设置为0,Reset STM32,则STM32会从User Flash Memroy中启动。
3. Boot from SRAM
主要用于JTAG,JLINK仿真调试,暂时还没有仿真器,没有仔细研究。
附录:STM32 Flash组织结构分析:
![](http://images.cnitblog.com/blog/279335/201308/09131016-6743c18bc3b34071b6d71d7b74c7307a.png)
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/9AE50874230147028594351AF25FC870/clipboard.png)
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/2BA89806615543DB839256AA245FF665/clipboard.png)
Main Memory:
Page0 - Page127 = 1KB * 128Page = 128KB total
该区域地址范围:0x08000000 - 0x0801FFFF,总大小为128K字节。
该区域的主要用途:存放STM32的代码段(用户程序)。
Information Block:
System memory:
系统内存,该区域存放着STM32的bootloader,该bootloader是芯片出厂时就设置好的,主要用于通过UARTx下载程序到Main Memory中。用户可以自定义host下载程序,根据bootloader的消息定义,通过UARTx与bootloader通信,实现程序下载和程序启动引导。详细请参考文档《AN3155》。
Options bytes:
What's this used for?
Flash memory interface registers:
操作这些寄存器,可实现对Flash的读写等操作。详细请参考文档《PM0075》
备注:文中提到的文档,均可在STM32的官方网站上下载到,如下载《AN3155》,在http://www.st.com/web/en/home.html网站上搜索‘AN3155’即可。
![](file:///C:/Users/sunny/AppData/Local/youdao/ynote/images/AF1471EE5A9C4434B276287AA38A1CA6/clipboard.png)
![](http://images.cnitblog.com/blog/279335/201308/09131042-460e1db49a144f128b3598726840640f.png)
相关文章推荐
- STM32F10xxx启动模式分析 – 梦想照旧
- 实战出真知:AIX启动过程详细分析
- s3c2440启动文件详细分析
- Android OTA升级原理和流程分析(三)---Android系统的三种启动模式
- S3C6410 SD卡启动uboot分析(详细)
- Activity的四种启动模式分析
- X86内核启动分析五 保护模式小荷尖尖角
- 三星S5PV210开发之外部存储器介绍和启动模式分析
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- upstart 分析 and linux启动分析 (非常详细)
- 386保护模式中段选择子的详细的分析
- activity启动模式分析
- 【内核】linux内核启动流程详细分析
- 第二人生的源码分析(七十五)启动状态详细说明
- arm2440 启动流程详细分析
- java中的23中设计模式详细分析
- UT4418开发板启动模式设置分析
- 【内核】linux内核启动流程详细分析【转】