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

发布者:MusicLover123最新更新时间:2021-11-24 来源: eefocus关键字:STM32  BOOT0  BOOT1  下载程序 手机看文章 扫描二维码
随时随地手机看文章

前言

本博文基于STM32F103ZET6和MDK5以及库V3.5.0编写;

本博文以原子开发板为例;

如有不足之处,还请多多指教;

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


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

一: 仿真器下载(J-Link,ULink等等)

步骤:

① 给开发版供电(DC5V),插上J-Link;

② 点击MDK工具栏中的Load按键就可将编译好的程序下载到开发板的Flash;

③ 下载好后根据配置可自动运行,也可以不自动运行(通过对下图中的操作控制);

在这里插入图片描述

** 二:** 串口USART1下载(注意,只能是USART1)

步骤:

① 给开发板供电(DC5V),拔掉J-Link,插上串口线;

② 使用FlyMcu软件下载编译好的.Hex文件,搜索串口为开发板硬件串口,一般为COMx,波特率选为115200,其配置如图;(红色箭头处要注意:因为今天我们想通过单纯的串口去下载程序,所以此选项处选择“不使用RTS和DTR”)

在这里插入图片描述

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

STM32F10x.h的存储结构看下面这位前辈总结的:

https://blog.csdn.net/Vinfcent/article/details/78921974

BOOT0和BOOT1的不同配置决定的CPU启动模式(备注:“x”代表接高电平低电平都可)

在这里插入图片描述

三种启动地址所对应的内存映射地址:

在这里插入图片描述

图片中数字符号的含义:

1: 主闪存存储器 Flash

2: 系统存储器SYSTEMMEMORY

3: SRAM(掉电丢失);

这个启动模式类似于咱们给电脑换系统的时候,可以选择从机械硬盘,固态,或者U盘启动;

注意:虽然有三种启动模式,但是程序无论是从串口下载还是J-Link下载,最后都是下载到Flash里

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

在这里插入图片描述

总结:


从图片中可以看出,J-Link下载的程序在勾选“Reset and Run”后直接运行,程序是一定能下载成功的,但是不一定能运行成功,并且,J-Link下载模式下,但凡BOOT0=1,都不能执行代码,为什么?因为J-Link将代码下载到Flash中,而决定启动模式的BOOT0和BOOT1配置为了启动方式不是从FLash开始的,读不到代码;

在串口下载模式下(注意不使用DTR和RTS电路下载),程序同样被写入Flash;

无论是用哪一种方式下载程序,程序存储的位置都在Flash,然而BOOT0和BOOT1决定了程序从何处开始处理(PC指针的初始值被配置成什么);所以如果程序下载好了之后,需要将BOOT0和BOOT1的接线方式配置成使程序从Flash处开始启动即可,例如:BOOT0 = 0,BOOT1=1即可;

关键字:STM32  BOOT0  BOOT1  下载程序 引用地址:STM32 BOOT0和BOOT1对于下载程序的应用

上一篇:STM32 对外设基地址,总线外设基地址和寄存器基地址的理解
下一篇:STM32 在PC端串口助手上打印中文字符----printf()函数重定向

推荐阅读最新更新时间:2024-11-07 15:23

STM32使用JLINK的SWD接口下载程序(keil环境下)
我的keil版本为:V5.24 一、安装Jlink驱动 可移步到网盘下载 传送门 ,提取码:fua6 二、替换dll文件 1、首先找到你安装Keil5的目录,找到ARM这个目录。我的目录如下图,keil的JLINK的dll就在这个目录下。 2、下载dll文件,覆盖上述keil目录下的dll文件 三、设置keil 1、选择jlink驱动 2、选择SW,并配置为5M 3、配置好相应的Flash Download选项(今天忘记勾选Reset and Run导致debug半天!!!)
[单片机]
<font color='red'>STM32</font>使用JLINK的SWD接口<font color='red'>下载程序</font>(keil环境下)
STM32在IAR中调用之printf函数的一个方法
在串口都配置好的情况下,在main.c文件中加入 #include stdio.h #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { USART_SendData(USART1, (u16) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return ch;
[单片机]
STM32蜂鸣器-库函数
需要注意的是,使用了库函数的模板就不能胡乱套用寄存器的操作,之前还想放个大招结果出丑了,这里的实验要求是绿灯亮,蜂鸣器响,红灯亮,蜂鸣器停止,蜂鸣器响起间隔半秒,led的文件我这里就不给出了,主要放出beep的文件吧,这里操作的是PF8口。 1.beep.h #ifndef __BEEP_H #define __BEEP_H #include sys.h #define BEEP PFout(8) void beep_init(void); #endif 2.beep.c #include beep.h void beep_init() { GPIO_InitTypeDef GPIO_InitS
[单片机]
stm32快速学习3——简单按键中断
2个按键中断,控制2个LED Main文件 #include stm32f10x.h void RCC_Configuration(void); void GPIO_Configuration(void); void EXTI_Configuration(void);//外部中断设置 void NVIC_Configuration(void);//中断优先级别设置 unsigned char led_bit1=0; unsigned char led_bit2=0; int main(void) { RCC_Configuration(); GPIO_Configuration(); EXTI_
[单片机]
STM32之RTC实时时钟
RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运行来看,它是STM32中唯一一个具有这个功能功能的外设.(RTC外设的复杂之处不在于它的定时,而在于它掉电还可以继续运行的特性) 所谓掉电,是指电源Vpp断开的情况下,为了RTC外设掉电可以继续运行,必须给STM32芯片通过VBAT引脚街上锂电池.当主电源VDD有效时,由VDD给RTC外设供电.当VDD掉电后,由VBAT给RTC外设供电.无论由什么电源供电,RTC中的数据始终都保存在属于RTC的备份域中,如果主电源和VBA都掉电,那么
[单片机]
STM32的DMA用串口的接收
测试终端,打算设计成串口直接到串口转发,中间使用DMA是否可行?支持外设到外设? 1. 假如使用DMA去传输的,从一个串口到另外一个串口(或者数组),DMA如何确定每次接收到的串口数据有更新,DMA是否需要中断,DMA两端只需要有地址就行,那么DMA每次去读取串口的接收寄存器和程序去读效果一样的吗?DMA和串口FIFO存在同时使用的情况吗? 2. DMA设置好自动运行的吗?有中断,比如发送完成中断 3. DMA如何确定串口的上一个数据发送完成?如果太快,岂不是乱? 4. 假设是串口接收的话,使用DMA,不需要串口中断?DMA知道串口数据更新? 5. 在STM32的书上,是DMA把数组里面的数据传给串口,只要设置好串口即可。 6.
[单片机]
STM32硬件调试详解
STM32的基本系统主要涉及下面几个部分:   一、电源   1)、无论是否使用模拟部分和AD部分,MCU外围出去VCC和GND,VDDA、VSSA、Vref(如果封装有该引脚)都必需要连接,不可悬空;   2)、对于每组对应的VDD和GND都应至少放置一个104的陶瓷电容用于滤波,并接该电容应放置尽量靠近MCU; 3)、用万用表测试供电电压是否正确。调试时最好用数字电源供电,以便过压或过流烧坏板子。电压最好一步一步从进线端测试到芯片供电端。   二、复位、启动选择   1)、Boot引脚与JTAG无关。其仅是用于MCU启动后,判断执行代码的起始地址;   2)、在电路设计上可能Boot引脚不会使用,但要求一定要外部连接电阻到地或
[单片机]
<font color='red'>STM32</font>硬件调试详解
STM32 PWM问题
本文不提供完整程序,仅点出要点 1:时钟配置。因为PWM输出属于复用功能,所以时钟使能必须使能RCC_APB2Periph_AFIO ; 2:IO口使能。因为PWM属于复用功能,所以IO输出设置要配置成GPIO_Mode_AF_PP;而不能配置成普通输出IO的GPIO_Mode_OUT_PP模式; 3:PWM初始化代码如下,本程序只用通道3输出,所以pwm输出只配置了通道3,TIM_OC3Init(TIM3, &TIM_OCInitStructure);需要多通道输出PWM则需要配置多个PWM输出通道,通过改变TIM_Pulse 的值可以改变pwm的占空比(可以通过直接操作寄存器TIM3- CCR3=2400来实现)。 /* Ti
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved