[Skill] STM32的启动方式、启动文件、程序下载方式和下载电路——深度解读(全网最全最详细)

目录

前言

一、STM32的存储器类型

1.1 存储器组织结构

1.2  嵌入式Flash(闪存)

Flash架构

Flash结构

1.3  嵌入式SRAM

系统SRAM架构

系统SRAM结构 

二、STM32的启动

2.1 启动流程

2.2  STM32启动硬件配置——BOOT【1:0】引脚

 BOOT[1:0]引脚配置描述        

 启动方式

2.3  STM32启动软件配置——启动文件

启动文件名称

启动文件内容

2.4  STM32启动举例详细介绍

三、三种启动方式

3.1 ISP

简介

STM32中的ISP下载方式

3.2 ICP

简介

STM32中的ICP下载方式

3.3 IAP

简介

STM32中的ICP下载方式

四、三种硬件电路

4.1 串口ISP电路

 4.2 JTAG下载调试电路

 4.3 SWD下载调试电路

五、参考资料


前言

为了大家更好的理解STM32的启动方式,这里将以上资料进行整合并从以一下几点进行详细介绍:

一、STM32的存储器类型

二、STM32的启动

三、三种下载方式

四、三种硬件电路

一、STM32的存储器类型

1.1 存储器组织结构

程序存储器、数据存储器、寄存器、I/O端口排列在同一顺序的4GB地址空间内。

可寻址的存储空间分为8个主要块,每个块为512MB;未分配给片上存储器和外设的所有存储区域视为“保留区”。

请参考数据手册中的存储器映射图。

每次芯片复位后,所有外设时钟都被关闭(SRAM和Flash接口除外)。使用外设前,必须在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其时钟。

1.2  嵌入式Flash(闪存)

Flash架构

Flash接口可管理CPU通过AHB I-Code和D-Code对Flash进行访问。该接口可针对Flash执行擦除和编程操作,并实施读写保护机制。

Flash接口通过哦指令和缓存机制加速代码执行。

由于本人使用的STM32F407系列开发板,因此将其作为参考讲解:

 Flash接口具体系统架构:

Flash结构

  • 主存储块,分为4个16KB扇区、1个64KB扇区和7个128KB扇区,起始地址:0x0800 0000
  • 系统存储器期间在系统存储器启动模式下从该存储器启动,起始地址:0x1FFF 0000
  •  512字节OTP(一次性可编程),用于存储用户数据。OTP区域还有16个额外字节,用于锁定对应的OTP数据块
  • 选项字节,用于配置读写保护、BOR级别、软/硬件看门狗以及器件处于待机或停止模式下复位。

1.3  嵌入式SRAM

STM32F405xx/07xx STM32F415xx/17xx 带有 4 KB 备份 SRAM和 192 KB 系统 SRAM

系统SRAM架构

系统SRAM结构 

可按照字节、半字(16位)或全字(32位)访问,执行速度cpu速度,且等待周期为0。

  • 映射在地址0x2000 0000的112KB和16KB的SRAM,可供所有AHB主控总线访问。
  • 映射在地址0x2002 0000的64KN,可供所有AHB主控总线访问。
  • 映射在地址0x1000 0000映射的64KB块,只能供CPU通过数据总线访问。

二、STM32的启动

在这里插入图片描述

2.1 启动流程

        在嵌入式开发过程中,由于是使用C编程,很少涉及到机器底层寄存器的执行,一般都会从main函数里开始写代码,也都知道代码运行是从main函数开始执行。在C语言代码执行过程中通常是机器先读取下一条语句的地址,然后从程序存储器中读取该地址的程序,然后再执行这条语句。那么问题来了,下一条语句的地址可以根据本条语句的地址来寻找到,但是main函数最开始的程序的入口地址如何找到?

        事实上微控制器是无法从硬件上去定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,因此main函数的入口地址在编译后并不是固定不变的,因此需要通过一个启动文件来寻找到main的入口地址。

        以前接触无论是PIC、AVR、MSP430或51过程中都会有涉及到启动文件的配置,仅仅只有熔丝位或配置字是需要根据实际使用配置来设置,其实并非没有,而是大部分开发环境往往自动完整提供了这个启动文件,不需要开发人员对其进行配置和干预,只需要从main函数开始程序涉及即可。但是对于嵌入式来说,当接触到嵌入式内核,在片上跑系统时却是很重言的环节。如Linux系统移植过程“bootloader”。启动文件完成微控制器从“复位”到“开始执行main函数”中间这段时间必要启动配置。

启动流程:

  1. 硬件选择启动模式

  2. 读取启动模式对应的存储器的中断向量表

  3. 初始化栈

  4. 初始化PC指针,指向Reset_Hander

  5. 初始化系统时钟

  6. 执行C库函数_main,进入C语言世界,执行main函数

        相对于ARM上一代主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了很大的变化。ARM7/9内核的控制器在复位后,CPU会从存储空间的绝对地址0x0000 0000取出第一条指令执行复位中断服务程序的启动方式,即固定了复位后的起始地址为0x00000000(PC=0X00000000)同时中断向量表的位置并不是固定的。而Cort

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐者-桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值