《嵌入式-STM32开发指南》第一部分 入门篇 -第6章 STM32下载程序及调试

6.1 STM32的启动模式

STM32三种启动模式对应的存储介质均是芯片内置的,它们是:

1)用户闪存 = 芯片内置的Flash。
2)SRAM = 芯片内置的RAM区,就是内存啦。
3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM(只读)区。

在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:

表1 启动模式

在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。

因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。

根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:

  • 从主闪存存储器启动(Main Flash memory)

主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问, 0x00000000或0x0800 0000。STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

  • 从系统存储器启动(System memory)

系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。
系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。
一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动
可以看到,利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。

  • 从内置SRAM启动(Embedded Memory)

只能在0x2000 0000开始的地址区访问SRAM。
注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,重新映射向量表至SRAM中。
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。

图1 启动模式选择.png

综上所述,最简单的硬件设计就是将BOOT0和BOOT1通过一个10k的下拉电阻,直接接地。当然了也可以设计复杂的ISP电路一键下载。

6.2 仿真器下载

6.2.1仿真器在线下载及调试

1、ST-LINK在线调试

写好程序编译通过后,连接好仿真器,单击Debug(crtl+F5)进行在线调试程序,如下图所示

图2.png

调试程序出现的调试界面

图3.png

2、J-LINK在线调试(同ST-LINK在线调试)

6.2.2仿真器在线下载

ST –LINK 也可在ST-LINK Utility 中作为下载器使用,方法如下:

第一步:在STMicroelectronics 中打开STM32 ST-LINK Utility软件

图4.png

第二步:在“File”中选择“Open File”选择要下载的hex文件,选择后如下图所示

图5.png

第三步在“Target” 中的“Connect”, 选择后如下图所示

图6.png

第四步“Target”中的“Program…”

图7.png

单击start如下图所示

图8.png

6.3 串口下载

第一步:打开mcuisp软件(以管理员身份运行)搜索串口

图9.png

第二步:设置如下图所示,选择要下载的hex,单击开始编程

图10.png

下载成功后出现下图所示情况

图11.png

OK,下载成功,按复位键就可执行程序了!

欢迎访问我的网站:
BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
CSDN博客

你可能感兴趣的:(《嵌入式-STM32开发指南》第一部分 入门篇 -第6章 STM32下载程序及调试)