在上周写的《stm32烧录方法小结》中,已经写了这部分的简单解析(那篇文章参考:stm32烧录方法小结),但是那篇主要是为了讲各类烧录方法,内容太多了,这里我再重新搞一篇单独讨论这个一键下载电路吧,而且这篇将使用逻辑分析仪抓的实际波形来说明实际的烧录过程。
使用串口芯片CH340中的DTR引脚和RTS引脚来控制单片机复位引脚和BOOT0引脚的电平状态,从而实现一键下载。对于这个一键下载电路,重点是这2个地方没问题就足够理解了:1.得有看懂三极管电路开关状态的能力 2.得明白CH340的DTR RTS引脚电平状态是可以由软件来控制的
1.使用串口下载前,如图1,先这样连接:单片机串口1的tx1 rx1分别和ch340的rx tx连接,同时把boot0 boot1引脚都10k下拉到地(若直接连地则电平状态无法改变了,也就无法切换boot启动配置了)
图1
2.如图2,10k在这里:boot引脚拉一个10k电阻到排针
图2
3.图3为正点原子精英板usb转串口的ch340电路,使用flymcu软件来进行烧录。烧录软件的工作流程为:
(1)初始:DTR和RTS的初始电平都是高电平,如图3,此时Q2和Q3都不导通
(2)如图5的阶段1,DTR维持高电平,RTS拉低,此时Q2和Q3都导通,boot0拉高,同时单片机进入复位状态
(3)如图5的阶段2,DTR也拉低,此时单片机从复位状态释放进行启动,由于boot0已经拉高,参考图4启动模式,单片机将进入系统存储器。从图6可以看到,这个阶段,主要执行单片机信息查询和程序擦除动作
(4)如图5的阶段3,DTR拉高,RTS维持低电平,此时单片机再次进入复位状态,同时boot0维持拉高状态
(5)如图5的阶段4,DTR再次拉低,单片机从复位状态释放,启动进入系统存储器。从图6来看,这个阶段再次读取单片机信息,然后进行烧录,烧录完成后发送协议命令(系统存储器里面的bootloader程序,从flymcu打印的log来推断,至少包含了芯片信息查询、程序烧录、跳转到flash执行这三大功能)让单片机跳转到闪存地址执行,注意这里是从系统存储器程序里面直接跳转的(这一步需要在软件勾选 编程后执行 复选框才有的)
(6)收尾:以上烧录完成并执行以后,拉高DTR和RTS,恢复到平时的电平状态,断开Q2和Q3
图3
4.BOOT0 BOOT1引脚电平对应的启动模式
图4
5.除了初始和收尾,有四个阶段,用2张图来表示。图5是DTR和RTS的实际波形,图6是flymcu烧录软件打印的log信息。其中图6里面关于DTR和RTS电平的描述和实际波形相反,这是flymcu软件的问题。
图5
图6