基于STM32的BOOT程序(二)

本文详细描述了STM32单片机BOOT程序的升级步骤,涉及分包传输协议、数据缓存管理、不同缓存策略以及APP程序的地址配置,包括NVIC_VectorTable的设置。
摘要由CSDN通过智能技术生成

上篇回顾

上一篇写了flash地址的分配,硬件函数的初始化和简单讲述了程序的升级。
具体连接如下:
基于SMT32的BOOT程序(一)
源码连接:
一种基于STM32单片机的boot升级程序
这章我们来详细讲解升级过程。下一章我们将讲解上位机的编写。

升级步骤

1.上一篇章告诉大家最后定义三条协议用来升级,第一个准备升级命令,由于升级程序bin文件可能会比较大,所有我们需要将文件进行分包传输,建议在升级命令内容中包括上 分包的包数,每包传输的大小以及最后一包的大小,这样方便处理。
2.发送完准备协议以后,开始发送数据内容,协议中最好带上当前包的编号,以便和准备协议中进行对比。如果文件不是很多或者单片机flash比较大,可以直接定义一个大缓存进行存储。如果flash 不够大,那就只能定义一个小缓存存储。
3.当boot程序检测到步骤二已经到了最后一包以后,就知道内容传输完毕。
4.当步骤二用的大缓存,则可以所有的数据接收完成后,直接一次性的写入flash中,写入的flash的首地址为 最初定义的 app入口地址,当步骤二用的小缓存的时候,那么需要才去的方式是 接收到一包数据,进行一次flash 的写入,这时候每次写入的地址注意需要累加,不要写错。
5.当所有的内容写完以后,可以发送一条升级程序的指令,这是进行程序跳转即可。

app程序的配置

第一章中我们已经定义好了app程序的入口地址,如果我们在应用程序中不进行地址配置,那么默认的程序运行地址就是0X8000000,由于我们修改了起始地址,所以app程序的地址我们需要进行偏移,其中两个进行修改的地方:
1.修改起始地址和空间大小
app地址分配
2.在程序中进行偏移,在程序的最开始,加入如下这句代码即可:

NVIC_SetVectorTable(NVIC_VectTab_FLASH, FLASH_SIZE_BOOT); //FLASH_SIZE_BOOT指我们定义的boot大小

3.至此,我们的boot程序完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点点点点丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值