STM32启动流程

STM32启动流程

  • 前言
  • 一、STM32的三种启动方式?
  • 二、启动流程图
  • 总结


前言

先阐述一个问题,嵌入式应用程序以C语言为主,因此main函数成为程序运行的起点,但是我们忽略了一个问题:MCU(微控制器/单片机)上电之后,是如何寻找并执行main函数的呢?


一、STM32的三种启动方式?

STM32芯片自带的启动方式有3种,通过设置BOOT1、BOOT0的引脚的高低电平即可选择。

  • 主闪存启动是将程序下载到内置的Flash进行启动(该flash可运行程序),该程序可以掉电保存,下次开机可自动启动。
  • 系统存储器启动是将程序写入到一块特定的区域,一般由厂家直接写入,不能被随意更改或擦除。
  • 内置SRAM启动,由于SRAM掉电丢失,不能保存程序,一般只用于程序的调试。
    STM32启动流程_第1张图片

二、启动流程图

STM32启动流程_第2张图片

总结

最后总结一下STM32的启动流程:
①上电后硬件设置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

你可能感兴趣的:(stm32,嵌入式,单片机)