先放原理图(补充:图中的BOOT0通过10K的电阻接到地),再解释为什么这么设计:
STM32启动方式:BOOT0和 BOOT1用于设置 STM32的启动方式 ,见下表:
BOOT0=1,BOOT1=0:串口下载模式;
BOOT0=0,BOOT1=X:程序启动模式,从内部flash启动。
设计思路:串口一键下载需要做的就是下载时,为串口下载模式,下载完成后,为启动模式。
电路设计:一般在使用软件进行串口烧录程序的时候用到这个电路(这不是废话吗),例如使用FlyMCU软件下载程序;CH340G芯片的13脚DTR、14脚RTS的电平是可以被下载软件控制的。通过串口的DTR 和 RTS 信号,来自动配置 BOOT0 和 RST 信号。他们的状态如下:
> RTS#和DTR#初始状态时为高电平;
> 在启用下载的时候,DTR#维持高,RTS#拉低,此时Q3和Q4都导通,那么BOOT0为高电平状态,RESET为低电平复位,然后DTR#变低,Q3不导通,复位结束,此时的BOOT0为高电平,经过4个SYSCLK,BOOT0的状态会被锁存,变成串口下载模式,那么就会启用串口下载程序,开始和FlyMCU下载软件进行通信,进行代码下载;
> 等到代码下载结束时,RTS#先变高电平,然后DTR#再变高电平,变成程序启动模式。(这个顺序不能变,如果DTR#先变到高电平,Q3会导通,RESET变成低电平,这样又会产生复位。)
时序如下图:
关于疑问1:启动模式的切换,是在复位后的4个SYSCLK后,再确定的,那么在烧录完成后,为什么没有复位,就切换成了程序启动模式呢?不是应该还是在烧录模式吗?
小白看了下网上的解答,说是烧录软件已经帮我们配置好了,结果就是在烧写完成后会有报告:“成功从08000000开始运行”。这个回答小白不认同,总之结果是这样,要搞清楚,就只能有时间再用示波器抓下时序看看,这个疑问暂存吧!
关于疑问2:软件配置为“DTR的低电平复位,RTS高电平进BootLoader”,这样配置不是进入串口下载模式了吗?
小白看了下网上的解答,说是IC在实际操作时引脚的变化为“DTR#拉高,RTS#拉低”,即软件设置和实际情况是相反的。