昨天把我弄晕了,CH340的DTR
和RTS
。。。
原子的原ISP一键下载图:
《STM32F1开发指南-库函数版本_V3.1 》中对下载电路的解释:
更直观的解释应该上张图:
总而言之,就是对BOOT0
和BOOT1
的赋值,为了简化电路,把BOOT1
下拉到地,只需要控制BOOT0
即可。
有个问题,不容忽视,复位完之后,进入ISP下载程序,下载完之后,并没有再用上位机控制BOOT0
,反而也可以直接执行程序。
网上有人这样解释,
说实话不太能懂。
下载完之后,两个三极管断开,BOOT0,BOOT1全部被硬件上的电阻拉低,然后自动进入了运行模式?!~
附一张今天刚列的直观理解图,注意了,刚看的时候,一直有个误区,我以为DTR和RTS的变化是自动的,但是实际上是可以由上位机控制的!
但是参考《STM32库开发实战指南》P15页,有提到:
“单片机上电瞬间,CH340的DTR和RTS引脚是变化的。”
那刚上电的时候,CH340DTR和RTS的输出电平是什么样的呢?
这个还没实测过,但是看这本书里介绍,“当RTS为低电平的时候,DTR也是低电平”,那也意味着,会处于ISP的边缘,它离ISP只差一个复位脉冲。这两个IO还存在竞争冒险,也有可能出现一个RST的复位情况,此时也会进入ISP模式,但是想着,稳定后RTS和DTR都为高,又定会从程序开始执行。而我们软件控制肯定是等电平稳定之后。似乎这样分析起来没毛病,但是实践才是检验真理的唯一标准。
后期补上DTR和RTS的上电瞬间实测信号,这个应该多测几遍,避免偶然性。(说给自己听)
当然,直观上想避免这种上电的意外不可控情况,我们不想碰到,可以把它给隔过去,如何隔呢?延时。
不然DTR和RTS的变化影响到系统复位,换句话来讲就是,复位在1s后再受ch340的变化为变化不就可以了呢!
具体方案也有很多了,延时电路。。。。
参考资料
1、http://www.openedv.com/forum-2-1.html
2、http://www.cnblogs.com/einstein-2014731/p/4885300.html
3、《STM32F1开发指南-库函数版本_V3.1 》