浅识STM32的三种boot模式
文章目录
任务摘要
请说明STM32的三种Boot模式的差异,并在之前第11-12周“C语言各种变量的存储地址”作业代码基础上,研究至少两种boot模式下,代码下载(烧录)运行后所在的地址位置,与理论对比验证。
一、认识boot
1.三种BOOT模式介绍
所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK
的第4个上升沿,BOOT
引脚的值将被锁存。用户可以通过设置BOOT1
和BOOT0
引脚的状态,来选择在复位后的启动模式。
如图所示,一般情况下如果我们想用用串口下载代码,则必须配置BOOT0为 1, BOOT1为 0,而如果想让 STM32 一按复位键就开始跑代码,则需要配置 BOOT0 为 0,BOOT1 随便设。
2.开发BOOT模式选择
- 通常使用程序代码存储在主闪存存储器,配置方式:BOOT0=0,BOOT1=X;
- Flash锁死解决办法:
开发调试过程中,由于某种原因导致内部
·Flash
锁死,无法连接SWD
以及Jtag
调试,无法读到设备,可以通过修改BOOT
模式重新刷写代码。
修改为BOOT0=1,BOOT1=0
即可从系统存储器启动,ST
出厂时自带Bootloader
程序,SWD
以及JTAG
调试接口都是专用的。重新烧写程序后,可将BOOT
模式重新更换到BOOT0=0,BOOT1=X
即可正常使用
3.STM32三种启动模式
STM32三种启动模式对应的存储介质均是芯片内置的,它们是:
1)用户闪存 = 芯片内置的Flash。
2)SRAM = 芯片内置的RAM区,就是内存啦。
3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:
BOOT1=x BOOT0=0
从用户闪存启动,这是正常的工作模式。
BOOT1=0 BOOT0=1
从系统存储器启动,这种模式启动的程序功能由厂家设置。
BOOT1=1 BOOT0=1
从内置SRAM启动,这种模式可以用于调试。
4.三种模式的存储地址
主闪存存储器——访问地址为
0x 0000 0000 或 0x 0800 0000
系统存储器——访问地址为0x 0000 0000 或 0x 1FF0 0000
内置SRAM——启动时地址为0x 0000 0000 或 0x 2000 0000
二、示例验证
此在以前做过的博客基础上完成,为大家附上链接。
运行结果
主闪存存储器:
置BOOT1、BOOT0
均为 0
,再烧录程序;
系统存储器:
置BOOT1
为0
、BOOT0
为0
,并按 RESET
复位键.
串口结果显示
总结
通过这次作业对STM32的三种启动模式有了一个浅显的认识。我们常用到的就只有主闪存存储器。希望这篇文章对你有所帮助。