![img](file://C:\Users\zwsd_cad3\Desktop\zhangyuan_task\%E6%96%B0%E6%97%A5%E8%AE%B0\markdown.assets\20220407.assets\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjc3ODE1,size_16,color_FFFFFF,t_70%23pic_center.png?lastModify=1649399724) ![img](markdown.assets/芯片启动流程.assets/5950dcc1ad947c0b9b8bf210430edf51.png) ``` 5.芯片启动流程 ①上电后硬件设置SP、跳转到 Reset_Hander ②设置系统时钟(SystemInit) ③软件设置SP ④加载.data、.bss,并初始化栈区(__main) ⑤跳转到C文件的main函数 值得注意的是:Keil编译完成后: Code:代表程序代码段 RO_DATA:代表只读数据段 RW_DATA:代表已经初始化全局数据 ZI_DATA:代表未初始化全局数据 由于程序在 FLASH 中直接通过总线进行访问,程序运行在 FLASH 上,而可更改的数据存于 SRAM 中,故: RO_SIZE = Code + RO_DATA(占用 Flash ) RW_DATA = RW_DATA + ZI_DATA(占用 SRAM) ROM_SIZE = Code + RO_DATA + RW_DATA ( 烧写到 FLASH 大小空间 ) 针对 ZI 数据,是不存 FLASH 中,直接在 SRAM 中初始化为 0 ``` ![image-20220408145225880](markdown.assets/芯片启动流程.assets/image-20220408145225880.png) ``` https://www.bilibili.com/video/BV1ZB4y1A7nS/ ``` ![image-20220408151051998](markdown.assets/芯片启动流程.assets/image-20220408151051998.png)