STM32 BOOT0和BOOT1对于下载程序的应用

前言

  1. 本博文基于STM32F103ZET6和MDK5以及库V3.5.0编写;
  2. 本博文以原子开发板为例;
  3. 如有不足之处,还请多多指教;

其实本没有必要写这篇文章,因为只要按照开发板配套的教程去做就可以对芯片写入程序即可,而且开发板上往往设计的都有一键下载的相关电路,能够产生DTR和RTS信号,从而将程序直接下载到芯片,对于用户来说,大大多短了下载程序的时间,提高了效率;但是毕竟以后如果要做开发这块的,总不能碰见一个项目就买一个买开发板,然后才能下载程序,这简直有点不可思议,还是要懂得脱离开发板,对一个芯片进行下载程序,从而形成一个完整的系统,这算得上是一个稍微成熟的开发;

STM32开发板下载程序的两种方式

一: 仿真器下载(J-Link,ULink等等)
步骤:
① 给开发版供电(DC5V),插上J-Link;
② 点击MDK工具栏中的Load按键就可将编译好的程序下载到开发板的Flash;
③ 下载好后根据配置可自动运行,也可以不自动运行(通过对下图中的操作控制);
STM32 BOOT0和BOOT1对于下载程序的应用_第1张图片
** 二:** 串口USART1下载(注意,只能是USART1)
步骤:
① 给开发板供电(DC5V),拔掉J-Link,插上串口线;
② 使用FlyMcu软件下载编译好的.Hex文件,搜索串口为开发板硬件串口,一般为COMx,波特率选为115200,其配置如图;(红色箭头处要注意:因为今天我们想通过单纯的串口去下载程序,所以此选项处选择“不使用RTS和DTR”)
STM32 BOOT0和BOOT1对于下载程序的应用_第2张图片

STM32F10x.h的存储器以及启动配置(这个知识作为对今天研究概念的补充)

  1. STM32F10x.h的存储结构看下面这位前辈总结的:
    https://blog.csdn.net/Vinfcent/article/details/78921974
  2. BOOT0和BOOT1的不同配置决定的CPU启动模式(备注:“x”代表接高电平低电平都可)
    STM32 BOOT0和BOOT1对于下载程序的应用_第3张图片
  3. 三种启动地址所对应的内存映射地址:
    STM32 BOOT0和BOOT1对于下载程序的应用_第4张图片
    图片中数字符号的含义:
    1: 主闪存存储器 Flash
    2: 系统存储器SYSTEMMEMORY
    3: SRAM(掉电丢失);
    这个启动模式类似于咱们给电脑换系统的时候,可以选择从机械硬盘,固态,或者U盘启动;
    注意:虽然有三种启动模式,但是程序无论是从串口下载还是J-Link下载,最后都是下载到Flash里

针对BOOT0和BOOT1的不同接线方式(高电平,低电平,不接线),开发板的下载情况分析如下图:(“x”代表不接线,“√”代表能成功下载)

STM32 BOOT0和BOOT1对于下载程序的应用_第5张图片
总结:

  1. 从图片中可以看出,J-Link下载的程序在勾选“Reset and Run”后直接运行,程序是一定能下载成功的,但是不一定能运行成功,并且,J-Link下载模式下,但凡BOOT0=1,都不能执行代码,为什么?因为J-Link将代码下载到Flash中,而决定启动模式的BOOT0和BOOT1配置为了启动方式不是从FLash开始的,读不到代码;
  2. 在串口下载模式下(注意不使用DTR和RTS电路下载),程序同样被写入Flash;
  3. 无论是用哪一种方式下载程序,程序存储的位置都在Flash,然而BOOT0和BOOT1决定了程序从何处开始处理(PC指针的初始值被配置成什么);所以如果程序下载好了之后,需要将BOOT0和BOOT1的接线方式配置成使程序从Flash处开始启动即可,例如:BOOT0 = 0,BOOT1=1即可;

你可能感兴趣的:(stm32)