0 前言
大学期间写过几个基于STM32F103xxx的项目,由于项目对于性能没有严格要求,所以当时没有去捣腾启动文件、内核、外设等的联系和作用,面试时被问及,哑口无言,所以再学习学习。
1 上电启动流程
本次学习是基于STM32F4XXXX芯片,接下来的描述也都是基于该芯片。
片内Flash中存在两个可执行文件,boot和app。上电之后执行boot,其功能是跳转到app存放地址,运行app。
app运行,先执行复位操作,触发复位中断,进入Reset_Handler函数。在该函数中先执行SystemInit()函数,然后执行__main()函数。其中SystemInit()函数实现了FPU配置、复位各时钟寄存器、初始化外部SRAM/SDRAM、设置系统时钟、向量表重定位,__main()实现了库函数初始化、堆栈初始化、跳转至用户main()函数。如下图示。