STM32 使用串口下载程序

STM32 使用串口下载程序

1.串口下载的原理

STM32 使用串口下载程序_第1张图片

  • 在ROM区的0x0800 0000位置,存储的就是编译后的程序代码,你把什么程序写入到这个位置,STM32就执行什么样的程序。如果想使用串口下载程序的话,我们只需要把数据通过串口发送给STM32,STM32接收数据,然后刷新到0x0800 0000这一块位置就行了。但是接收并转存数据,这个过程本身也是程序,如果利用程序进行自我更新,这是一个问题。

就像是一个机器人,给自己换电池一样,换电池,需要先拆掉旧电池,再装上新电池,但是一旦把旧电池拆掉,机器人本身就无法工作了,这样之后装上新电池的工作就没法完成了,所以为了能让机器人换电池,我们还需要再额外做一个小机器人,需要换电池的时候,就启动这个小机器人,小机器人完成整个换电池的工作之后,再返回大机器人运行。

同理,STM32通过串口进行程序的自我更新,就需要这样一个小机器人,这个小机器人就是BootLoader,BootLoader是ST公司写好的一段程序代码,这段程序的存储位置,就是ROM区的最后,0x1FFF F000,这段区域叫做系统存储器,存储的是BootLoader程序,或者叫自举程序。用途是程序自我更新,串口下载。在更新过程中,BootLoader接收USART1数据,刷新到程序存储器Flash,这是主程序就处于瘫痪状态,更新好之后再启动主程序,执行新程序,这就是串口下载的流程。

1.1启动配置

STM32 使用串口下载程序_第2张图片

  • 当Boot0 为0时,就是从主闪存,也就是0x0800 0000的位置开始运行
  • 当Boot0为1,Boot1为0时,就是从系统存储器,也就是0x1FFF F000开始运行
  • 当Boot0为1,Boot1为1时,就是从SRAM,也就是0x2000 0000开始运行

由于系统复位后,在SYSCLK的第四个上升沿,BOOT引脚的值将被锁存,所以说,每次切换Boot引脚之后,都要按一下复位。

2.每次串口下载都要切换跳线帽,如何解决

  • 1.STM32一键下载电路
  • 或者在FlyMcu中选择编程后执行,并且取消选择编程到FLASH时写选项字节
  • STM32 使用串口下载程序_第3张图片

STM32 使用串口下载程序_第4张图片

由于其在软件上,人工加入了一条跳转指令(成功从0x0800 0000开始运行),这样就能执行主程序了,但是这样只是一次性的,复位之后,执行的程序仍然是BootLoader

你可能感兴趣的:(stm32,嵌入式硬件,单片机)