STM32 F1 三种启动方式使用说明

1、文章概述: 

        此文档大致介绍了三种启动(BOOT)方式以及具体操作方法。介绍文档请自行查看STM32参考手册。注意:BOOT中文翻译是启动的意思。BOOT方式就是启动方式。

三种启动方式分别为: 从主闪存存储器、系统存储器、内置SRAM启动。所谓主闪存就是STM32 自带的片内Flash。系统储存器为STM32片内自带的ROM,该区域由STM32生产时固化,用户无权且无须改动。SRAM即STM32自带的64K片内SRAM,正常使用中SRAM一般是储存程序运行中的一些变量。 

2、启动方式的实质:

        所谓STM32的启动方式,其实质为:STM32把代码下载到什么地方的问题。KEIL编译的程序最终转换为二进制下载到STM32的储存器件(STM32只有SRAM和FLASH能放代码)。如何告知STM32内部电路应该将程序下载到何处?  此时就是通过BOOT引脚告知STM32内部电路该把程序下载到何处。BOOT一共两个引脚,BOOT0、BOOT1。根据这两个引脚上的电平,风别对应以下三种下载选择:

 启动之后的具体寻址、指针跳转等访问细节可以查看中文参考手册2.4启动配置一章。下面讲述三种启动方式实操。

3、启动实操

3.1 主闪存存储器启动

        这个启动方式即为FLASH启动。该方式很常见:使用ST-LINK连接开发板,然后在KEIL(MDK)设置Options for Target等,设置完毕后点击菜单栏 Download绿色箭头,然后就可以下载到FLASH了。把鼠标放在绿色箭头会出现一行解释:Download code to flash memory。该方式需要把BOOT0置0,BOOT1随意。

 3.2、系统存储器启动

        在系统存储器放置着出厂设置的下载引导电路:这个电路你可以理解为一段固定作用的代码。该代码的名字就叫BootLoader,也叫自举程序。他的作用就是把通过串口发送过来的代码放到FLASH。该启动方式就是大家所熟悉的串口下载。此启动方式的流程:用户编译产生二进制文件 ->二进制文件通过串口发送到stm32 ->stm32自举程序将二进制文件写入FLASH。所以实质也是把代码下载到FLASH。

        该启动方式的配置流程:

        1、将BOOT0连接高电平,BOOT1连接低电平。
        2、使用CH340连接电脑与MCU串口1引脚,
        3、使用FlyMcu串口下载软件:设置DTR低电平复位,RTS高电平进Bootloader,选中STMISP,在该栏下选中校验、编程后执行、以及编程前重装文件,然后点击”开始编程“下载代码,注意下载时需要按一下复位才能烧录。
        4、代码下载完毕之后程序开始运行。需要注意:如果按复位之后,程序是不会运行的,此时需要将BOOT0设置为0,按复位之后程序方可运行。这是因为复位之后BOOTLOADER没有从串口接收到代码,而代码是存放在Flash的,所以复位之后再从系统存储器启动自然不会成功。而将BOOT0该为0之后,是从存放着程序的Flash区域启动的,所以会成功启动。

3.3、SRAM启动

        一般情况下,用户代码都是放在FLASH,SRAM则用来存放一些用户定义的变量等。所以想要从SRAM启动,那么必须要使SRAM既保留其原来的功能,又要使其作为FLASH使用。这里就涉及到将SRAM分区,一部分作为ROM固定存放用户代码,一部分用作RAM存放用户变量。 SRAM分区需要用户自己写代码完成。

        具体分区代码:首先在工程目录(只要在工程路径下的任一文件夹就行)定义.sct文件。文件名自行定义,这里定义为sram_load.sct。该文件内容如下:STM32F1系列可以直接复制。在该文件中,我们将F1的64K SRAM分为两个区,虚拟Flash(ROM区)、虚拟SRAM(RAM区),大小各占64K的四分之三、四分之一。

LR_IROM1 0x20000000 0x00010000 { ; load region size_region  总储存区域起始地址以及大小(这里为sram起始地址及大小)
	ER_IROM1 0x20000000 0x0000C000 { ; load address = execution address 虚拟Flash(ROM)起始地址及大小
		*.o (RESET, +First)
		*(InRoot$$Sections)
		.ANY (+RO)
	}
	RW_IRAM1 0x2000C000 0x00004000 { ; RW data 虚拟SRAM(RAM)起始地址及大小
		.ANY (+RW +ZI)
	}
}      

        至此,分区所需文件完成。

        此外还需准备另一个.ini文件。该文件用来指示系统启动方式。这里以Debug_RAM.ini命名。文件具体内容如下。该文件可在ST安装包里的相关文件里面找到。

FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
XPSR = 0x01000000; // Set Thumb bit
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}

LOAD %L INCREMENTAL // Download to RAM
Setup();

g, main

        至此两个所需文件准备完毕。

        下面开始讲述具体详细设置步骤:

        1、将BOOT0连接高电平,BOOT1连接高电平。
        2、在工程目录下创建.sct文件(分散加载文件)在“ Options for Target->linker”的选项中取消勾选第一个√,自己把刚刚新建的分散加载文件添加进来并 edit
        3、配置中断向量表:Options for Target-> c/c++ ->Define”框中输入宏VECT_TAB_SRAM,与其他宏之间用逗号隔开
        4、修改Flash的下载配置:
                Options for Target->Debug->Settings:选择Do not erase
                Options for Target->Target:
                        IRAM1:0x2000C000 ,大小:0x4000 
                        IROM1:0x20000000,大小:0xC000
                flashDownload -> Programming Algorithm:把他改成虚拟 ROM 的空间信息即:                         start:0x20000000,size:0x0000C000
               flashDownload ->RAM for Algorithm:start:0x2000C000,size:0x4000.(如下图配置)
        

        5、Debug->Load Application at Statup 取消勾选,并在Initialization FIle:添加Debug_RAM.ini并Edit。

        6、主函数开头增加如下代码:

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);


       7、下载方式是通过KEIL(MDK) 红色DEBUG 按钮进入仿真(此时将将代码下载至SRAM),然后点击Run按钮运行。

       9、 Options for Target ->C/C++ ->Define 中添加宏VECT_TAB_SRAM,与前面的宏用英文逗号隔开

        至此操作步骤完毕。

4、总结

        以上就是三种启动方式。若有疑问以及错误欢迎在评论区交流。

  • 14
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MongoDB的启动方法有多种。一种最原始的启动方式是通过命令行启动。首先,需要打开命令提示符(cmd)并切换到MongoDB安装目录下的bin文件夹,例如`C:\Program Files\MongoDB\Server\4.0\bin`。然后,在命令行中输入启动命令即可启动MongoDB。 另外,还可以通过配置环境变量的方式来方便地启动MongoDB。首先,需要将MongoDB的安装路径添加到系统的环境变量中。然后,在任意位置打开命令提示符(cmd)并输入启动命令即可启动MongoDB。 对于Windows系统中的安装与启动方式,可以参考上述方法,根据自己的需求选择适合的方式启动MongoDB。希望对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MongoDB的启动方法](https://blog.csdn.net/m0_58190023/article/details/127482101)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [MongoDB的安装和启动](https://blog.csdn.net/sdasadasds/article/details/123976622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值