STM32 启动流程

目录

一、概要

二、STM32启动流程

1、STM32固件下载位置

2、上电程序入口。

3、复位中断

三、技术名词解释

四、小结


一、概要

本文主要讲解 基于cortex-m3的 STM32单片机从上电到程序运行的流程以及原理。

以下说明均以STM32F103(M3)系列为例。

二、STM32启动流程

1、STM32固件下载位置

STM32固件(编译生成的可执行bin文件)默认下载到0X08000000位置处,即STM32内部flash起始地址处。

2、上电程序入口。

单片机上电后,由硬件触发复位中断,复位中断为最高优先级,不可更改优先级,且不可屏蔽。

设备上电后,硬件会从存放程序的起始地址处读取一个字,作为为栈起始地址,第二个字为复位中断程序的入口地址(上电后pc寄存器被赋予的第一个有效值)。

 如下图,通过编译后生成的map文件,我们可以确定复位向量的入口地址(Reset_Handler)为:0x080001DD。

如下图,我们以16进制的方式查看编译后生成的固件(.bin),发现固件第第二个字(绿框)确实为0X080001DD(以小端方式存放,所以是反序列)。固件中第一个字(红框)为0X2000EB40,在STM32的RAM段,作为栈的起始地址。 

3、复位中断

复位中断的入口定义在汇编源文件startup_stm32f103xe.s中。

主要执行了系统初始化,系统初始化后进入用户main接口。实现如下图:

 LDR     R0, =SystemInit ;将SystemInit函数的入口,读到R0寄存器中。
 BLX     R0              ;跳转到R0寄存器中所指的地址中去执行。

LDR     R0, =__main:将__main函数入口地址写入到寄存器R0中。
BX      R0; 跳转到__main函数。

注意:_main是keil自带的mcu初始化程序,在_main中会调用到c文件中的main函数。

三、技术名词解释

一个字:长度是四字节

大小端:数据存放方式

四、小结

欢迎批评指正!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值