一、启动模式(Boot modes) 阅读:STM32中文参考手册_V10.pdf 查看启动配置(Boot modes)。 ; S/ B( P" W$ z) c + F! J" a$ \/ t5 ~/ I 在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。 1 L, s4 r) q' A' L" ~$ q8 P) d4 g STM32三种启动模式对应的存储介质均是芯片内置的,它们是:
在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。
在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。 $ p% l/ T2 F- k- h+ _/ c 因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。
根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:7 H. c2 q4 Y3 q/ B8 {: y( S1 Y ● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。 注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。 1, ST-LINK烧写1 u$ a0 F# O/ O" n & g f, H) [. E0 U 1.1 ST-LINK烧写的SWD模式 ST-LINK烧写的SWD模式 是ST-LINK烧写的一种方式,只需要4根接线。 分别为VCC,GND,SWCLK, SWDIO; 5 u V( b- r2 x/ P# ?' i, h- ~- d 如果用SWD模式下载的话,只需要接:J-LINK的第1脚(VDD)、第7脚(TMS/SWDIO对应stm32的PA13)、第9脚(TCK/SWCLK对应stm32的PA14)、第4.6.8.10.12.14.16.18.20中的任意一个脚(GND地脚)、需要说明的是第15脚(RESET对应stm32的NRST)可接可不接,大家根据实际自己决定(保险起见还是建议接上,不接时可以在MDK仿真器的设置里面不使用硬件复位,而是用system reset或者vect reset)!
用SWD下载参考电路图: 8 m8 o5 y& ?% X/ p
1.2 ST-LINK烧写的JTAG模式) e) z% f' ~. N" N- _$ ?: a U 1 c; x7 q6 g. f4 T
在JTAG模式下的程序烧写过程中需要进行单独对板子进行供电 3 ^& V+ y; t2 z+ t$ h, n7 ISTM32F10XXX JTAG的引脚:
STM32F10XXX 芯片内部的JTAG引脚已带有内部上拉和下拉: 5 |% Y9 Z) P) ]4 e, H
JTAG下载参考电路图: + Q1 n" m' k* e
2 ,USB转串口连接线烧写(又称ISP烧写,且使用的串口必须是串口1)2.1 方法一(该方法用于手动设置下载)5 m- D) `5 f, A/ E8 o8 B Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader;+ D* q" e; V" ?' R 2.2 方法二(该方法用于软件一键下载)2 @- S9 Q; U! R6 L/ c0 u 我们想用串口下载代码,就要配置BOOT0为1,BOOT1为0,但是如果想让STM32一复位就运行代码,就要配置BOOT0为0,BOOT1配置为什么都可以,为了解决这个问题,我们可以设计一个电路,通过串口转USB芯片CH340G的DTR#和RTS#引脚的信号来控制一键下载电路,从而间接控制STM32的RESET和BOOT0引脚的信号,来达到通过串口一键下载和运行的效果。 一键下载电路参考: ) { w, G V$ J6 m G
串口下载软件选用的是FlyMcu或MCUISP,通过串口的DTR和RTS信号来自动配置BOOT0和RESET信号,不需要用户手动切换它们的状态,直接串口软件自动控制,可以方便的下载代码。
我们需要注意一点:CH340G上电后DTR#和RTS#都为高电平,在用MCUISP烧写软件时,我们在软件下方选择“DTR的低电平复位,RTS高电平进BootLoader”,CH340G IC在实际操作时引脚的变化为“DTR#拉高,RTS#拉低”,即软件设置和实际情况是取非的,相反的。
首先,FlyMcu软件控制DTR输出低电平,则DTR#引脚输出高, 然后RTS置高,则RTS#引脚输出低,这样Q3导通了,BOOT0被拉高,即实现设置BOOT0为1,同时Q2也会导通,STM32的复位脚被拉低,实现复位。
然后,延时100ms后,FlyMcu软件控制DTR为高电平,则DTR#引脚输出低电平,RTS维持高电平,则RTS#引脚继续为低电平,此时STM32的复位引脚,由于Q2不再导通,变为高电平,STM32结束复位,但是BOOT0还是维持为1,从而进入ISP模式,接着mcuisp就可以开始连接STM32,下载代码了,从而实现一键下载。
DTR#和RTS#信号的时序图如下图所示: / D4 ]3 S2 ]: \, ?7 W9 L % T3 Y7 l5 K+ |2 g + h9 n: ^" @8 t/ Z. Y# T程序下载完毕后,如果设置了编程后执行,STM32会再次被复位,此时DTR#引脚为高,RTS#引脚为低,STM32复位后,DTR#引脚设置为低,RTS#引脚设置为高,那么Q2和Q3都不导通,此时,STM32重新开始启动后,检测到BOOT0为0,程序开始正常运行,一键下载至此就完成了。8 x8 s; c' E, P: m! n/ M |