以下内容可能有一些错误什么的,欢迎各位同学指正。
关于战舰STM32开发板上的BOOT0和BOOT1,很多人会有疑问,特别是软件mcuisp上为什么是DTR的低电平,RTS的高电平进入下载模式,先不管硬件上的BOOT0和BOOT1连接。
要了解BOOT0和BOOT1,首先要知道有三种模式,
(1)BOOT0接高电平,BOOT1接低电平,如果此时RESET I/O口产生复位信号,软件上点击下载,此时会把程序烧写进32里面
(2)BOOT0接低电平,BOOT1接低电平,如果此时RESET I/O口产生复位信号,32会读取FLASH的程序执行。
(3)BOOT0接低电平,BOOT1接高电平,如果此时RESET I/O口产生复位信号,32会读取FLASH的程序执行。
我们可以看到(2)和(3)是同一种模式,而(1)和(2)中BOOT1都是接高电平,所以我们在硬件上BOOT1是直接接低点平,这样我们在控制模式的时候其实就只是控制BOOT0而已。
现在看到我们的CH340控制,首先,我们在mcuisp中可以看到是选择DTR的低电平,RTS的高电平进入下载模式,此时先忽略硬件的接口,此时当我们点击下载程序的时候,软件mcuisp会控制DTR为低电平,RTS为高电平;此时CH340中的DTR#为高电平,RTS#为低电平,(#字表示相反)。
此时可以看到Q2和Q3三极管都导通,此时BOOT则为高电平,RESET则为低电平,而由于产生复位信号还需将RESET拉回高低平,所以软件此时控制DTR#输出低电平,这样RESET则变为高电平,此时软件mcuisp会自动下载,此时模式(1)所有的条件已经满足,所以我们可以知道是将程序烧写进STM32里面,此时软件就不会再控制CH340,相当于CH340为断开一样,如果我们下载之前把mcuisp里面的(编程后执行)的选项也勾选上,那么该软件会通过串口控制STM32读取FLASH上的程序,所以我们会看到开发上在执行我们的程序,例如跑马灯。
所以我们在选择模式的时候是选择(DTR的低电平,RTS的高电平进入下载)模式,而不是其他。
接下来是开发板上BOOT0硬件接口,有很多人都不明白为什么BOOT0硬件接口已经固定,软件却还是能控制,原因如下:
CH340软件控制上的BOOT接的电阻R71为1K,硬件跳线帽BOOT0连接的R40为100K,两者相差上百倍,很明显可以看出,只有我们想要使用到软件接口,硬件接口就相当于可以忽略,因为软件接口的BOOT0电位更接近于VCC3.3或GND,而在我们不使用软件CH340的同时,硬件接口就派上用场了,因为此时软件控制的CH340相当于断开的,所以BOOT硬件连接上虽然固定也不会受影响。
而现在模式(2),我们把PA9,PA10和RXD,TXD上的跳线帽拿走时,然后把BOOT0接到0,再手动按上RESET复位键之后,我们可以看到STM32开始复位执行FLASH里面的程序。
而我们要下载程序到32里面也可以像51单片机一样,不需要CH340等电平转换,只需用到一条PL2303下载线,直接接到PA9和PA10,然后把BOOT0接高电平,BOOT1接低电平,再单击RESET按键,点击mcuisp上的程序下载,此时同样可以下载程序进去。
(在此过程中需要注意到的几点:有可能下载不成功,mcuisp窗口上显示一堆数字,此时可能是PL2303的驱动问题,只需要重新安装下驱动就好)。
还有就是有人做实验的时候可能会发现刚把BOOT0从高电平换到低电平,此时还是可以进行下载模式,这可能是芯片上电容储能的问题,因为只要电容上的电荷超过一半则为高电平,所以只要过一会儿等电容上的电荷释放就好。
注意:程序烧写和执行的时候烧写(模式1)和执行(模式2)是分为两种模式,两步执行的