STM32的三种Boot模式地址分配
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模式地址分配相关推荐
- STM32的三种Boot模式的差异
STM32的三种Boot模式的差异 一. STM32启动配置 二. 内置SRAM简介 三. 例程验证 3.1 硬件设置 3.2 创建工程调试版本 3.3 配置分散加载文件 3.5 配置中断向量表 3. ...
- 浅谈STM32的三种Boot模式的差异以及用汇编语言设计一个LED灯程序
STM32的三种Boot模式的差异 1.三种方式的比较 用汇编程序完成LED的程序 1.三种方式的比较 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值 ...
- 浅谈STM32的三种Boot模式
文章目录 一.关于BOOT模式的介绍 二.实际例子进行分析 三.分析上电启动流程 四.小结 五.参考资料 一.关于BOOT模式的介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的 ...
- STM32的三种BOOT模式
文章目录 一.三种BOOT模式的对比 1.内部 FLASH 启动方式 2.内部 SRAM 启动方式 3.系统存储器启动方式 二.BOOT模式下代码运行后所在地址分析 1.从内部 FLASH 启动 2. ...
- 探究 STM32 的三种 BOOT(启动) 模式并实例验证
目录 一.什么是 Boot 模式 二.实例验证 三.总结 四.参考资料 说明 STM32 的三种 Boot 模式的差异,并在之前第11-12周"C语言各种变量的存储地址"作业代码基 ...
- STM32三种BOOT模式
探究STM32三种BOOT模式 简介 一.三种BOOT模式比较 二.开发BOOT模式选择 三.实验项目 (1)实验要求 (2)实验过程 a.STM32内置的Flash启动--最常用 b.从系统存储器启 ...
- STM32单片机的启动模式 三种BOOT模式介绍
在绘制32单片机时,参考别人的原理图对单片机的启动方式BOOT有疑问, 这里写目录标题 自己的理解和应用 一.三种BOOT模式启动的介绍 二.自己开发BOOT模式的选择 官方的文档介绍 自己的理解和应 ...
- STM32三种BOOT模式介绍
一.三种BOOT模式介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存.用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启 ...
- STM32三种BOOT模式的差异
文章目录 前言 三种BOOT模式 主闪存存储器 系统存储器 内置SRAM 烧录程序验证 主要代码 主闪存存储器烧录验证 系统存储器烧录验证 内置SRAM烧录验证 前言 本篇文章分析了3种BOOT模式下 ...
最新文章
- android http协议添加Authorization认证方式
- MySql批量更新死锁案例分析
- 读《爱的艺术》书评而问
- python相比于excel的优势_对照Excel使用Python进行数据分析,更快掌握
- 用PHPMailer在本地win环境,可以接收到邮件和附件,但在linux环境只能接收邮件信息接不到附件,是我的路...
- PHP防注入安全代码
- 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]
- 又拍云 php,GitHub - NoDurex/php-sdk: 又拍云存储PHP SDK
- 【考古向翻译】Pwn2Own 2010 Windows 7 Internet Explorer 8 exploit
- HDU-5876 Sparse Graph
- UIcollectionView 加入尾部视图
- oracle 给用户授权
- 软件测试自学指南---从入门到精通
- 有限差分法MATLAB程序
- 当前位置 计算机英语,计算机常用英语词汇,计算机常用英语词汇
- 设计模式--工厂模式(一个关于工厂的故事)
- linux 薄膜键盘驱动,一份*级薄膜键盘的简历— HHKB 静电容 键盘
- (组合数 +快速幂+逆元+费马小引理)acwing 886. 求组合数 II
- pandas如何将两个表根据某个数组合并
- java微信公众号开发及源码分享