STM32启动流程


前言

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


一、STM32的三种启动方式?

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

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

二、启动流程图

在这里插入图片描述

总结

最后总结一下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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值