STM32的三种Boot模式的差异

  • 1.三种方式的比较
  • 用汇编程序完成LED的程序

1.三种方式的比较

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

Main Flash memory
是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。
主函数:

#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include <stdlib.h>
int k1 = 1;
int k2;
static int k3 = 2;
static int k4;int main(void){ 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); u16 t;  u16 len;    u16 times=0;free(p1);free(p2);delay_init();          //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);   //串口初始化为115200KEY_Init();          //初始化与按键连接的硬件接口while(1){for(t=0;t<len;t++){ while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}USART_RX_STA=0;times++;if(times%500==0){printf("栈区-变量地址\r\n");printf("              i=%p\r\n", &i);printf("              p=%p\r\n", &p);printf("             str=%p\r\n", str);printf("\n堆区-动态申请地址\r\n");printf("                 %p\r\n", p1);printf("                 %p\r\n", p2);printf("\r\n.bss段");printf("\n全局外部无初值 k2:%p\r\n", &k2);printf("静态外部无初值 k4:%p\r\n", &k4);printf("静态内部无初值 m2:%p\r\n", &m2);printf("\r\n.data段");printf("\n全局外部有初值 k1:%p\r\n", &k1);printf("静态外部有初值 k3:%p\r\n", &k3);printf("静态内部有初值 m1:%p\r\n", &m1);printf("\r\n常量区\n");printf("文字常量地址     :%p\r\n",var1);printf("文字常量地址     :%p\r\n",var2);printf("\r\n代码区\n");printf("程序区地址       :%p\n",&main);}delay_ms(10);   }}

System memory
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,
出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:

Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。
栈区-变量地址i=20000760p=2000075cstr=20000750堆区-动态申请地址20000198200001a8.bss段
全局外部无初值 k2:20000004
静态外部无初值 k4:2000000c
静态内部无初值 m2:20000018.data段
全局外部有初值 k1:20000000
静态外部有初值 k3:20000008
静态内部有初值 m1:20000014常量区
文字常量地址     :08000318
文字常量地址     :08000324代码区
程序区地址       :080001dd

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

用汇编程序完成LED的程序

1.新建工程

2.Add new item

3.源代码

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



如果有不懂得地方,可以参考这篇博客
链接: link.https://www.bbsmax.com/A/B0zq8RZdvL/

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

  1. 浅谈STM32的三种Boot模式

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

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

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

  3. STM32的三种Boot模式地址分配

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

  4. STM32的三种BOOT模式

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

  5. STM32三种BOOT模式的差异

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

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

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

  7. STM32三种BOOT模式

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

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

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

  9. STM32三种BOOT模式介绍

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

最新文章

  1. PyTorch在NLP任务中使用预训练词向量
  2. 简单配置nginx反向代理,实现跨域请求
  3. 女朋友啥时候怒了?Keras识别面部表情挽救你的膝盖
  4. Laravel-admin添加模型路由报错出现问题:Model does not exists !
  5. Spark _17 _SparkShuffle、HashShuffleManager、SortShuffleManager
  6. C#字符串的基本操作
  7. 58个PPT下载丨2019 PostgreSQL中国技术大会资源放送
  8. 分布式选举协议:Paxos
  9. 可以记录阅读进度的 pdf 电脑阅读器
  10. 人工智能:从单细胞生物的智能说起
  11. js中改变原数组的方法以及解决改变原数组的方法
  12. 私有服务器虚拟化软件市场排名,操作系统、数据库和虚拟化软件2017年市场格局分析...
  13. 前端开发实习生第一天都在做什么?需要准备什么东西
  14. 无人机欧拉角万向节锁死详解
  15. 跳步游戏2--返回最小跳步数
  16. Word转换PDF的三种方法使用教程
  17. 淘宝自动回复机器人配置手册——利用旺旺分流针对性配置
  18. 什么是互联网营销?看一篇这就够了
  19. 获取Android_Studio模拟器root权限的方法
  20. 河南大学计算机学院吴哲2008年,计算机与信息工程学院86级校友荣归母校

热门文章

  1. seo附加篇-搜索引擎优化
  2. C++中关于类的析构函数无法调用的问题
  3. Java三大框架SSH与MVC的设计模式
  4. ThinkPad T460进入BIOS的方式
  5. 微信小程序开发设置苹方字体
  6. app无法访问相册,设置-隐私-相册里也没有该app
  7. 粤嵌实习智能家居day3--基于6818开发板
  8. 图像分割·基于边缘检测
  9. 挂耳式蓝牙耳机什么牌子好?口碑最好的挂耳式耳机
  10. Argon扩展板智能温控调速开关控制