STM32 使用串口下载程序
1.串口下载的原理
- 在ROM区的0x0800 0000位置,存储的就是编译后的程序代码,你把什么程序写入到这个位置,STM32就执行什么样的程序。如果想使用串口下载程序的话,我们只需要把数据通过串口发送给STM32,STM32接收数据,然后刷新到0x0800 0000这一块位置就行了。但是接收并转存数据,这个过程本身也是程序,如果利用程序进行自我更新,这是一个问题。
就像是一个机器人,给自己换电池一样,换电池,需要先拆掉旧电池,再装上新电池,但是一旦把旧电池拆掉,机器人本身就无法工作了,这样之后装上新电池的工作就没法完成了,所以为了能让机器人换电池,我们还需要再额外做一个小机器人,需要换电池的时候,就启动这个小机器人,小机器人完成整个换电池的工作之后,再返回大机器人运行。
同理,STM32通过串口进行程序的自我更新,就需要这样一个小机器人,这个小机器人就是BootLoader,BootLoader是ST公司写好的一段程序代码,这段程序的存储位置,就是ROM区的最后,0x1FFF F000,这段区域叫做系统存储器,存储的是BootLoader程序,或者叫自举程序。用途是程序自我更新,串口下载。在更新过程中,BootLoader接收USART1数据,刷新到程序存储器Flash,这是主程序就处于瘫痪状态,更新好之后再启动主程序,执行新程序,这就是串口下载的流程。
1.1启动配置
- 当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时写选项字节
文章来源:https://www.toymoban.com/news/detail-755366.html
由于其在软件上,人工加入了一条跳转指令(成功从0x0800 0000开始运行),这样就能执行主程序了,但是这样只是一次性的,复位之后,执行的程序仍然是BootLoader文章来源地址https://www.toymoban.com/news/detail-755366.html
到了这里,关于STM32 使用串口下载程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!