历史上的今天
今天是:2024年11月24日(星期日)
2021年11月24日 | STM32 BOOT0和BOOT1对于下载程序的应用
2021-11-24 来源:eefocus
前言
本博文基于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即可;
史海拾趣
|
分别用C语言和汇编语言进行程序设计,计算正弦函数值,并比较代码效率。 1)C语言编程 #include #define NX 180 //最大正弦角度 #define pi 3.14159 short i; double x[NX] //定义输入正弦角度数组(弧度值) double r[NX] //定义输出 ...… 查看全部问答> |
|
我现在知道的在ARM里软件中断(SWI call)是用来将模式转换成超级用户模式的(SVC mode) 然后用这两句话可以将SWI的参数储存在R0里面 LDR R0,[LR,#-4] BIC R0,R0, #0xFF000000 因为刚刚学习ARM, 现在我不理解的是这个SWI的参数到底可以用来干什么 ...… 查看全部问答> |
|
求助:VS.NET 2008下WINCE模拟器 需要带网络连接功能 VS.NET 2008不像03提供了WINCE模拟器 求助 刚折腾了一个版本 不带网络功能 即希望在模拟器上可以配置IP PING通 这样可以测试一些访问MSSQL的程序 谢谢 不知道表达清楚了没有……汗… 查看全部问答> |
|
流小驱动SRB.NumberOfPhysicalPages时钟为0 修改DDK中testcap 做的摄像头驱动,想使用DMA得到数据。DDK文档中说SRB的ScatterGatherBuffer就是作为DMA使用的,NumberOfPhysicalPages是其中的元素个数。但是我在生成图像的ImageSynth函数中得到的NumberOfPhysicalPages却始终为0. ...… 查看全部问答> |
|
NandFlash块大小为16K,如果写一个不足16K的文件进去,是不是要把该块剩下的空间写成0? NandFlash块大小为16K,如果写一个不足16K的文件进去,是不是要把该块剩下的空间写成0?… 查看全部问答> |
|
利用控制面板中的“校准”,校准后总是不能正常退出。串口打印提示 : M 474,507 507,520 33,13M 2061,1655 2099,1655 38,0Maximum Allowed Error 7: Maximum error 13325 exceeds calibration th ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 苹果公司的iPhone把智能手机从专注于通讯的设备变成了以应用为中心的多用途移动平台,可以用于许多产业之中。据iSuppli公司,其它智能手机平台迅速跟进,纷纷增加了多点触控用户界面、应用开发 ...… 查看全部问答> |
|
我设计的无限温度传感网络由一个路由设备和两个温度测量节点组成。两个测温节点的程序应该是一样的吧?我是通过长地址(IEEE地址)来在路由设备上区分两个节点的数据的,部分原代码如下:unsigned int current_temperature1 = 0;unsigned int curre ...… 查看全部问答> |




