STM32F1 - 启动过程

2024-02-09 17:28
文章标签 启动 过程 stm32f1

本文主要是介绍STM32F1 - 启动过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BOOT

  • 1> 内存映射
  • 2> 启动模式
  • 3> .map文件
  • 4> 上电启动过程


1> 内存映射

33

1

Flash起始地址是 【0x0800 0000】
SRAM起始地址是【0x2000 0000】


2> 启动模式

1
STM32F103的BOOT1和BOOT0引脚,
决定哪块存储区,映射到4G内存空间【0x0000 0000】地址处。
例如
BOOT0引脚接地后,则Flash的起始地址【0x0800 0000】被映射到【0x0000 0000】处;


3> .map文件

分析.map文件看看一些关键地址,找点感觉

中断向量表的起始地址:0x0800 0000
中断向量表的结束地址:0x0800 0130
__main函数地址: 0x08000131
复位函数地址: 0x080001b1
初始化堆栈函数地址: 0x080001c9
c语言main函数地址:0x08000265


__Vectors       0x08000000 
__Vectors_End   0x08000130
__main          0x08000131
Reset_Handler   0x080001b1
__user_initial_stackheap       0x080001c9
main            0x08000265

栈顶地址:0x20000660
栈底地址:0x20000260

__initial_sp  0x20000660
Stack_Mem     0x20000260

堆起始地址

HEAP        0x20000060

4> 上电启动过程

启动模式为:Flash启动;
4

Step 1> CPU(Cortex-M3)

从地址0x0000 0000处取栈指针(__initial_sp)赋值给堆栈指针【MSP】;
从地址0x0000 0004处取值赋值给程序计数器【PC】,指向复位函数地址;

Step 2> 复位函数

复位函数调用SystemInit(){设置时钟树} // 可省略
调用__main;

Step 3> __main函数

__main调用__user_initial_stackheap初始化堆栈;
__main函数干了不少活, 处理加载域,执行域,
建立c函数执行环境,
最后调用到用户main()函数;

这篇关于STM32F1 - 启动过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694852

相关文章

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本