STM32的三种Boot模式地址分配

  • 一、STM32的三种Boot模式
    • 1、主闪存存储器
    • 2、系统存储器
    • 3、内置SRAM
  • 二、三种模式地址分配验证
    • 主闪存存储器
    • 系统存储器
  • 三、汇编程序完成每间隔1秒钟闪烁一次LED的程序

一、STM32的三种Boot模式

三种boot启动模式:
一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

1、主闪存存储器

第一种方式(boot0 = 0):Flash memory启动方式。启动地址:0x08000000 (stm32F207系列)
是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。基本上都是采用这种模式。

2、系统存储器

第二种方式(boot0 = 1;boot1 = 0:System memory启动方式。启动地址:0x1FFF0000 (stm32F207系列)
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader 中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。

3、内置SRAM

第三种方式(boot0 = 1;boot1 = 1):SRAM启动方式。启动地址:0x20000000(stm32F207系列)
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的 地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。

二、三种模式地址分配验证

主闪存存储器

  • 使用st-link连接开发板
  • 更改实验代码,main.c更改如下
#include "stm32f10x.h"
#include "bsp_usart.h"
#include <stdio.h>
#include <stdlib.h>
int k1 = 1;
int k2;
static int k3 = 2;
static int k4;void delay(uint32_t count)
{while(count--);
}
int main(void)
{   USART_Config();while(1){    static int m1=2, m2;int i = 1;char *p;char str[10] = "hello";char *var1 = "123456";char *var2 = "abcdef";int *p1=malloc(4);int *p2=malloc(4);free(p1);free(p2);printf("栈区-变量地址\n");printf("                i:%p\n", &i);printf("                p:%p\n", &p);printf("              str:%p\n", str);printf("\n堆区-动态申请地址\n");printf("                   %p\n", p1);printf("                   %p\n", p2);printf("\n.bss段\n");printf("全局外部无初值 k2:%p\n", &k2);printf("静态外部无初值 k4:%p\n", &k4);printf("静态内部无初值 m2:%p\n", &m2);printf("\n.data段\n");printf("全局外部有初值 k1:%p\n", &k1);printf("静态外部有初值 k3:%p\n", &k3);printf("静态内部有初值 m1:%p\n", &m1);printf("\n常量区\n");printf("文字常量地址     :%p\n",var1);printf("文字常量地址     :%p\n",var2);printf("\n代码区\n");printf("程序区地址       :%p\n",&main);delay(5000000);}
}

  • 点击魔法棒设置如下

  • 输出如下

系统存储器

  • 使用usb连接开发板,烧录
  • 输出

三、汇编程序完成每间隔1秒钟闪烁一次LED的程序

  • 创建工程
  • 选择如下

  • 新建.s文件

  • 代码如下
LED0 EQU 0x422101a0
RCC_APB2ENR EQU 0x40021018
GPIOA_CRH EQU 0x40010804Stack_Size      EQU     0x00000400AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_spAREA    RESET, DATA, READONLY__Vectors       DCD     __initial_sp               ; Top of StackDCD     Reset_Handler              ; Reset HandlerAREA    |.text|, CODE, READONLYTHUMBREQUIRE8PRESERVE8ENTRY
Reset_Handler BL LED_Init
MainLoop        BL LED_ONBL DelayBL LED_OFFBL DelayB MainLoopLED_InitPUSH {R0,R1, LR}LDR R0,=RCC_APB2ENRORR R0,R0,#0x04LDR R1,=RCC_APB2ENRSTR R0,[R1]LDR R0,=GPIOA_CRHBIC R0,R0,#0x0FLDR R1,=GPIOA_CRHSTR R0,[R1]LDR R0,=GPIOA_CRHORR R0,R0,#0x03LDR R1,=GPIOA_CRHSTR R0,[R1]MOV R0,#1 LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}LED_ONPUSH {R0,R1, LR}    MOV R0,#0 LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}LED_OFFPUSH {R0,R1, LR}    MOV R0,#1 LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}             DelayPUSH {R0,R1, LR}MOVS R0,#0MOVS R1,#0MOVS R2,#0DelayLoop0        ADDS R0,R0,#1CMP R0,#330BCC DelayLoop0MOVS R0,#0ADDS R1,R1,#1CMP R1,#330BCC DelayLoop0MOVS R0,#0MOVS R1,#0ADDS R2,R2,#1CMP R2,#15BCC DelayLoop0POP {R0,R1,PC}    NOPEND
  • 显示如下

STM32的三种Boot模式地址分配相关推荐

  1. STM32的三种Boot模式的差异

    STM32的三种Boot模式的差异 一. STM32启动配置 二. 内置SRAM简介 三. 例程验证 3.1 硬件设置 3.2 创建工程调试版本 3.3 配置分散加载文件 3.5 配置中断向量表 3. ...

  2. 浅谈STM32的三种Boot模式的差异以及用汇编语言设计一个LED灯程序

    STM32的三种Boot模式的差异 1.三种方式的比较 用汇编程序完成LED的程序 1.三种方式的比较 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值 ...

  3. 浅谈STM32的三种Boot模式

    文章目录 一.关于BOOT模式的介绍 二.实际例子进行分析 三.分析上电启动流程 四.小结 五.参考资料 一.关于BOOT模式的介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的 ...

  4. STM32的三种BOOT模式

    文章目录 一.三种BOOT模式的对比 1.内部 FLASH 启动方式 2.内部 SRAM 启动方式 3.系统存储器启动方式 二.BOOT模式下代码运行后所在地址分析 1.从内部 FLASH 启动 2. ...

  5. 探究 STM32 的三种 BOOT(启动) 模式并实例验证

    目录 一.什么是 Boot 模式 二.实例验证 三.总结 四.参考资料 说明 STM32 的三种 Boot 模式的差异,并在之前第11-12周"C语言各种变量的存储地址"作业代码基 ...

  6. STM32三种BOOT模式

    探究STM32三种BOOT模式 简介 一.三种BOOT模式比较 二.开发BOOT模式选择 三.实验项目 (1)实验要求 (2)实验过程 a.STM32内置的Flash启动--最常用 b.从系统存储器启 ...

  7. STM32单片机的启动模式 三种BOOT模式介绍

    在绘制32单片机时,参考别人的原理图对单片机的启动方式BOOT有疑问, 这里写目录标题 自己的理解和应用 一.三种BOOT模式启动的介绍 二.自己开发BOOT模式的选择 官方的文档介绍 自己的理解和应 ...

  8. STM32三种BOOT模式介绍

    一.三种BOOT模式介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存.用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启 ...

  9. STM32三种BOOT模式的差异

    文章目录 前言 三种BOOT模式 主闪存存储器 系统存储器 内置SRAM 烧录程序验证 主要代码 主闪存存储器烧录验证 系统存储器烧录验证 内置SRAM烧录验证 前言 本篇文章分析了3种BOOT模式下 ...

最新文章

  1. android http协议添加Authorization认证方式
  2. MySql批量更新死锁案例分析
  3. 读《爱的艺术》书评而问
  4. python相比于excel的优势_对照Excel使用Python进行数据分析,更快掌握
  5. 用PHPMailer在本地win环境,可以接收到邮件和附件,但在linux环境只能接收邮件信息接不到附件,是我的路...
  6. PHP防注入安全代码
  7. 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]
  8. 又拍云 php,GitHub - NoDurex/php-sdk: 又拍云存储PHP SDK
  9. 【考古向翻译】Pwn2Own 2010 Windows 7 Internet Explorer 8 exploit
  10. HDU-5876 Sparse Graph
  11. UIcollectionView 加入尾部视图
  12. oracle 给用户授权
  13. 软件测试自学指南---从入门到精通
  14. 有限差分法MATLAB程序
  15. 当前位置 计算机英语,计算机常用英语词汇,计算机常用英语词汇
  16. 设计模式--工厂模式(一个关于工厂的故事)
  17. linux 薄膜键盘驱动,一份*级薄膜键盘的简历— HHKB 静电容 键盘
  18. (组合数 +快速幂+逆元+费马小引理)acwing 886. 求组合数 II
  19. pandas如何将两个表根据某个数组合并
  20. java微信公众号开发及源码分享

热门文章

  1. iPhone应用程序编程指南
  2. HTML视频(Video)播放
  3. HTML中小球沿着直线滚动,js炫酷小球沿着直线跑动导航条特效源码分享
  4. 分布交互式CosiMate 8.1 2016.04多学科协同仿真计算平台
  5. 链读好文:热加密存储与冷加密存储有什么区别?
  6. Ubuntu搜狗输入法, 输入中文时不显示选择框
  7. 如何实现全链路营销效果跟踪?
  8. 2020 远景智能笔试 成绩排序 第二题 Python3
  9. 系统与应用监控的思路和方法
  10. 橘子学设计模式之策略模式