开发stm32 M3/M4系列一般都是在IDE下开发,通常程序入口都是main函数,但是在执行main函数之前,mcu到底做了哪些工作,就是本文描述的内容。
MCU上电启动第一件事情,就是确定CPU地址及堆栈地址,通过Boot引脚配置。stm32f407的FLASH地址0x0800 0000—0x080F FFFF,合计1兆字节空间,为主FLASH空间。一般固件都烧录地址从0x0800 0000处开始,也可以通过指定固件地址,从别的地址开始,这种用法多用于BootLoader启动方式。
启动流程
硬件引脚配置为从主FLASH空间启动,上电启动瞬间,硬件自动从地址0x0800 0000处取出堆栈指针,这个指针地址=0x2000 0000 + RW Data Size + ZI Data Size,从地址0x0800 0004处取出PC指针,然后开始执行启动文件初始化程序,初始化执行完成以后跳转到main主函数执行。
关键内存分配图: