STM32的启动模式:
STM32有三种启动模式,对应的存储介质均是芯片内置的:     
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中关于启动配置的描述。
1.  CPU从地址0x0000 0000 获取堆栈顶的地址,并从启动存储器的0x0000 0004 指示的地址开始执行代码。
——这句话暂时不理解,待学习。
2. STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM 启动。
——这个机制具体是怎么实现的不去深入追究,结合STM32F10xxx的的Memory Map可以更直观的理解一下。
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组织结构分析:
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’即可。
 
 
 
 

STM32F10xxx启动模式分析(详细)的更多相关文章

  1. 《转》深入理解Activity启动流程(三)–Activity启动的详细流程2

    本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...

  2. 《转》深入理解Activity启动流程(三)–Activity启动的详细流程1

    本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...

  3. 深入理解Activity启动流程(三)–Activity启动的详细流程2

    本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--A ...

  4. 海思uboot启动流程详细分析(转)

    海思uboot启动流程详细分析(一) 海思uboot启动流程详细分析(二) 海思uboot启动流程详细分析(三)  

  5. lk启动流程详细分析

    转载请注明来源:cuixiaolei的技术博客 这篇文章是lk启动流程分析(以高通为例),将会详细介绍下面的内容: 1).正常开机引导流程 2).recovery引导流程 3).fastboot引导流 ...

  6. hadoop namenode启动过程详细剖析及瓶颈分析

    NameNode中几个关键的数据结构 FSImage Namenode 会将HDFS的文件和目录元数据存储在一个叫fsimage的二进制文件中,每次保存fsimage之后到下次保存之间的所有hdfs操 ...

  7. Nginx配置中运行与启动的详细介绍【转】

    原文:http://developer.51cto.com/art/201003/190944.htm 我们在进行Nginx配置的时候会出现很多不明白的地方,其实有些时候只要换一个思维的方式就能找多你 ...

  8. 海思uboot启动流程详细分析(三)【转】

    1. 前言 书接上文(u-boot启动流程分析(二)_平台相关部分),本文介绍u-boot启动流程中和具体版型(board)有关的部分,也即board_init_f/board_init_r所代表的. ...

  9. 海思uboot启动流程详细分析(二)

    1. 第二个start.S 从start_armboot开始,在startup.c中有包含#include <config.h> 在config.h中: /* Automatically ...

随机推荐

  1. C语言数据类型转换

    变量的数据类型是可以转换的.转换的方法有两种,一种是自动转换,一种是强制转换. 自动转换 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成.自动转换遵循以下规则: 若参与运算量的类型不同, ...

  2. Multi-Channel MAC for Ad Hoc Networks: Handling Multi-Channel Hidden Terminals Using A Single Transceiver

    MAC协议 2004 这是一个单纯的Multi-Channel Ad Hoc场景,多信道,但不是DSA.没有PU,只是多信道利用问题,相对传统Ad Hoc,要解决的就是1)信道访问(如何使用多个信道) ...

  3. wordpress教程之the_author_meta()显示用户的信息

    描述 模板标签函数the_author_meta可以显示用户数据.如果该函数在文章主循环(Loop)中,则不必指定作者的ID值,标签所显示的就是当前文章作者的内容.如果在主循环(Loop)外,则需要指 ...

  4. SD card技术了解并WINCE下SDHC驱动开发(updated)

    Suumary: 简单介绍了一下SD卡的历史和发展,同时结合MX31 ADS上的WINCE 下SDHC驱动更深入的了解该硬件的一些行为特点. 了解SD card SD是Secure Digital C ...

  5. C# 反射_基础

    反射用于在程序运行过程中,获取类里面的信息或发现程序集并运行的一个过程.通过反射可以获得.dll和.exe后缀的程序集里面的信息.使用反射可以看到一个程序集内部的类,接口,字段,属性,方法,特性等信息 ...

  6. cf478D Red-Green Towers

    D. Red-Green Towers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. 【转】morgan stanley 电面面经新鲜出炉

    楼楼早上上午大概11点接到的电话,一个声音炒鸡好听的GG,说他是来自morgan stanley的,想和我约一下店面时间.我一听,真是戳不及防,掐指一算,online的IKE测试已经过去20几天了吧, ...

  8. ZOJ3578(Matrix)

    Matrix Time Limit: 10 Seconds      Memory Limit: 131072 KB A N*M coordinate plane ((0, 0)~(n, m)). I ...

  9. 自定义View的封装

    通过上一个博文的自定义View的编写后,发现代码其实挺复杂的,所有这里通过对代码进一步的优化,即用到了java的一个重要的特点:封装.通过对父类的方法进行封装,然后在子类继承后实现相应的函数即可,达到 ...

  10. Struts2(一)——总体介绍

    这篇博客开始将总结一下有关框架的知识,在开发中合适的利用框架会使我们的开发效率大大提高.当今比较流行的开源框架: 关注数据流程的MVC框架 (Struts1/2, WebWork, Spring MV ...