stm32启动过程(以F1为例)

这篇具有很好参考价值的文章主要介绍了stm32启动过程(以F1为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32启动模式

M3/M4/M7等内核复位后,做的第一件事:

  1. 从地址 0x0000 0000 处取出 堆栈指针 MSP 的初始值,该值为栈顶地址
  2. 从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值是复位向量(Reset_Hander)

通过BOOT0和BOOT1两个引脚的输入选择启动模式
在系统复位后,sysclk的第4个上升沿,BOOT引脚的值将被锁存(锁存后该引脚的值改变不影响已选择模式)

启动模式选择引脚 启动模式 0x0000 0000

映射地址

0x0000 0004

映射地址

BOOT1 BOOT0
x 0 主内存存储器 0x0800 0000 0x0800 0004
0 1 系统存储器 0x1FFF F000 0x1FFF F004
1 1 内置SRAM 0x2000 0000 0x2000 0004

STM32三种启动模式对应的存储介质均是芯片内置的,它们是:

  1. 用户闪存 = 芯片内置的Flash。从用户闪存启动,这是正常的工作模式。
  2. SRAM = 芯片内置的RAM区,就是内存啦。从内置SRAM启动,这种模式可以用于调试
  3. 系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 从系统存储器启动,这种模式启动的程序功能由厂家设置。

STM32启动过程(以内部flash启动为例)

总体概述:
stm32启动过程(以F1为例)

启动文件功能

启动文件由汇编编写,是系统上电复位后第一个执行的程序。
启动文件主要做了以下工作:文章来源地址https://www.toymoban.com/news/detail-417911.html

  1. 初始化堆栈指针 SP = _initial_sp (从 0x8000 0000 获取)
  2. 初始化程序计数器指针 PC = Reset_Handler (从 0x8000 0004 获取)
  3. 设置堆和栈的大小 Heap_Size(堆)、Stack_Size(栈)
  4. 初始化中断向量表
  5. 配置外部 SRAM 作为数据存储器(可选)
  6. 配置系统时钟,通过调用 SystemInit 函数(可选)
  7. 调用 C 库中的 _main 函数初始化用户堆栈,最终调用 main 函数

启动文件常用汇编指令及说明

指令名称 作用
EQU 给数字常量取一个符号名,相当于 C 语言中的 define
AREA 汇编一个新的代码段或者数据段
ALIGN 编译器对指令或者数据的存放地址进行对齐,一般需要跟一个立即数,缺省表示 4 字节对齐。要注意的是,这个不是 ARM 的指令,是编译器的,这里放到一起为了方便。
SPACE 分配内存空间
PRESERVE8 当前文件堆栈需要按照 8 字节对齐
THUMB 表示后面指令兼容 THUMB 指令。在 ARM 以前的指令集中有 16 位的THUMBM 指令,现在 Cortex-M 系列使用的都是 THUMB-2 指令集,THUMB-2
EXPORT 声明一个标号具有全局属性,可被外部的文件使用
DCD 以字节为单位分配内存,要求 4 字节对齐,并要求初始化这些内存
PROC 定义子程序,与 ENDP 成对使用,表示子程序结束
WEAK 弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号,如果外部文件没有定义也不会出错。要注意的是,这个不是 ARM 的指令,是编译器的,这里放到一起为了方便。
IMPORT 声明标号来自外部文件,跟 C 语言中的 extern 关键字类似
LDR 从存储器中加载字到一个存储器中
BLX 跳转到由寄存器给出的地址,并根据寄存器的 LSE 确定处理器的状态,还要把跳转前的下条指令地址保存到 LR
BX 跳转到由寄存器/标号给出的地址,不用返回
B 跳转到一个标号
IF,ELSE,ENDIF 汇编条件分支语句,跟 C 语言的类似
END 到达文件的末尾,文件结束

到了这里,关于stm32启动过程(以F1为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【32单片机学习】(11)STM32启动过程详解

    目录 前言 一、系统架构 二、启动配置 三、启动流程 1.首先复位MCU,获取栈顶指针MSP和PC指针的内容 2.根据PC的值找到复位中断处理函数Reset_Handler 1.进入中断处理函数Reset_Handler 2.进入SystemInit函数 3._main函数 3.进入main函数 总结          通过查阅官方手册和对实际代码进行

    2024年02月08日
    浏览(41)
  • STM32启动模式详解

    一个单片机最小系统由电源、晶振、下载电路、BOOT电路、和复位电路组成。少一个单片机都启动不了。 BOOT电路本质上是单片机的引脚,在ESP32中BOOT电路被称为称为GPIO_Strapping管脚,引脚图如下: 作用: BOOT电路的作用是用于确定单片机的启动模式(启动模式后面会有说明)

    2024年02月10日
    浏览(35)
  • 【嵌入式学习笔记】嵌入式基础9——STM32启动过程

    程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系 删除映像未使用的程序段(Removing Unused input sections from the image):描述工程中未用到被删除的冗余程序段(函数/数据) 映像符号表(Image Symbol Table):描述各符号(程序段/数据)在存储器中的地址、类

    2024年02月15日
    浏览(81)
  • 为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程

    在MDK编译程序设置ROM和RAM地址时候发现: IROM1为片上程序存储器,即片上集成的Flash存储器,对该处理器Flash大小为512KB,即0x80000 地址区间为0x8000000~0x0807FFFF IRAM1为片上数据存储器,即片上集成的SRAM存储器,对该处理器RAM大小为64KB,即0x10000 地址区间为0x20000000~0x20010000 这里问

    2024年01月16日
    浏览(50)
  • stm32F407学习DAY.14 在DMA模式下进行USART串口数据收发(正点原子例程为例)

    目录 一、DMA配置 1、DMA1和DMA2的请求映射 2、DMA挂载总线 3、DMA相关库函数 ​4、DMA配置过程(以串口1为例) 1)进行时钟使能 2)等待DMA可配置 3)初始化DMA(串口1的TX为DMA2 数据流7 通道4,RX为DMA2 数据流5 通道4) a.DMA外设地址par: b.DMA存储器0地址mar: c.数据传输量ndtr: 4)

    2024年02月04日
    浏览(45)
  • STM32F1 - 中断系统

    NVIC:Nested Vectored Interrupt Controller【嵌套向量中断控制器】 管理内核外设和片上外设的所有中断功能; EXTI:External Interrupt 【外部中断控制器】 管理GPIO的中断; STM32F103ZET6总共19个外部中断 PA0~PG0,7个引脚中只有一个可以映射到EXTI0; 外部中断EXTI 9 ~ 5 合并为EXTI9_5中断; 外部

    2024年02月22日
    浏览(42)
  • STM32学习-基于STM32F1具有控制菜单的温控小风扇

    本文仅作个人学习记录,非教程,内容不完整,仅供参考,请勿用于商业用途。 使用ADC读取环境温度,根据环境温度设置PWM占空比,从而控制FAN转速。控制菜单功能:1.设置特定转速,2.切换为手动模式任意控制FAN转速。 整个系统并不复杂:MCU负责运行代码并输出信号;NTC是

    2024年02月06日
    浏览(239)
  • STM32项目设计:基于stm32f1的智能门锁(附项目视频全套教程)

      最近假期比较闲,拿着之前剩下的模块做了一个小玩具, 先制定一下此次玩具的规划,也可以理解为简易项目书。 开发软件:keil 硬件选型:STM32F103C8T6、RFID读卡器、oled屏幕、按键模块、蓝牙通信模块、蜂鸣器、舵机; 上位机: 1.上位机可以对密码进行设置、重置 2.上位机可以

    2024年02月10日
    浏览(41)
  • STM32 keil如何下载STM32芯片F1/F4固件库 .pack文件

    1.用keil打开STM32F407的程序,结果提示下面的问题,就是没有安装固件库 2.然后去keil官网下载对应的固件库,官网地址:https://www.keil.com/ 3.然后选中对应的芯片类型,譬如我这个就是STM32F407IGTx 4.双击下面的图标,即.pack可以直接点击安装,并且目录直接默认是keil安装的目录。

    2024年02月13日
    浏览(44)
  • 基于STM32F1的舵机控制

    一、SG90舵机介绍 SG90是有三个版本的,90度版、180度版和360度版,前两个只是舵机旋转角度的范围不一样,可以在这个范围内任意的控制舵机所转的角度,而360版本的是一直旋转的,我们不能控制它旋转的角度,只能控制它旋转的速度,这里我们在买的时候就要注意一点,根

    2023年04月25日
    浏览(277)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包