一文了解STM32启动过程
    1 概述
    说明
         每一款(芯片)的启动文件都值得去研究,因为它可是你的程序跑的最初一段路,不可以不知道。通过了解启动文件,我们可以体会到处理器的架构、指令集、中断向量安排等内容,是非常值得玩味的。
        (STM32)作为一款高端 Cortex-M3系列(单片机),有必要了解它的启动文件。打好基础,为以后优化程序,写出高质量的代码最准备。
         本文以一个实际测试代码--START_(TE)ST为例进行阐述。
    整体过程
        STM32整个启动过程是指从上电开始,一直到运行到 main函数之间的这段过程,步骤为(以使用微库为例):
    ①上电后(硬件)设置SP、PC
    ②设置系统(时钟)
    ③软件设置SP
    ④加载.data、.bss,并初始化栈区
    ⑤跳转到C文件的main函数
    代码
         启动过程涉及的文件不仅包含 startup_stm32f10x_hd.s,还涉及到了MDK自带的连接库文件 entry.o、entry2.o、entry5.o、entry7.o等(从生成的 map文件可以看出来)。
    2 程序在Flash上的存储结构
    在真正讲解启动过程之前,先要讲解程序下载到 Flash上的结构和程序运行时(执行到main函数)时的S(RAM)数据结构。程序在用户Flash上的结构如下图所示。下图是通过阅读hex文件和在MDK下调试综合提炼出来的。
   
         上图中:
    MSP初始值由编译器生成,是主堆栈的初始值。
    初始化数据段是.data
stm32怎么使用printf
    未初始化数据段是.bss
         .data和.bss是在__main里进行初始化的,对于(ARM) Com(pi)ler,__main主要执行以下函数: