启动方式
BOOT1:接0
BOOT0:接1:可以下载程序; 接0:从用户程序运行
当烧写程序时,我们希望
BOOT0=1,BOOT1=0。当烧写完成后我们希望BOOT0=0,BOOT1=0(这个模式BOOT1可以是0可以是1,这里我们让BOOT1拉低,即整个过程BOOT1都为L接地,简化电路设计)。
只需考虑
BOOT0的高低。
STM32的启动配置
“在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。”
我们可以得到:
1、系统上电,BOOT0需为L,进入模式一。上电复位后,在SYSCLK的第4个上升沿,BOOT引脚的值将被锁存,进入主闪存存储器,执行我们烧写的代码。
2、当我们编译好程序,生成HEX文件。在烧写HEX文件时,BOOT0需为H,进入模式二。然后,系统必须复位一次(因为由1知道,系统上电后默认执行代码,即模式一),让系统重新锁存BOOT引脚。系统进入模式二,开始烧写HEX文件。
3、烧写完成后,我们希望系统再次进入模式一,执行代码。但“一键下载电路”并没有让系统完成烧写程序后再次复位重新锁存BOOT引脚进入模式一。这个原因应该是MCU ISP软件帮我们配置好了,在烧写完成后会有报告:“成功从08000000开始运行”。
主闪存存储器从地址(0x0800 0000)访问,不管是系统自动的还是软件配置的,只要系统指针跳到主闪存存储器的地址(0x0800 0000)处开始执行代码,就可以了,结果是我们想要的。
一键下载电路
我们需要注意一点:
CH340G上电后 “DTR#” 和 “RTS#” 都为高电平,在用 “MCU ISP” 烧写软件时,我们在软件下方选择
“DTR的低电平复位,RTS高电平进BootLoader”;
“CH340G” IC在实际操作时引脚的变化为 “DTR#拉高,RTS#拉低”,即 “软件设置和实际情况“ 是取非的,相反的。
时序图: