Bootloader开发

文章详细描述了STM32Bootloader的开发过程,包括使用STM32CUBEMX配置USART和LED,采用Ymodem协议进行bin文件传输,设置Flash分区进行固件升级,以及MDK工程的配置和编译。此外,还涵盖了看门狗的配置和IAP(In-ApplicationProgramming)逻辑,实现程序的备份和恢复功能。
摘要由CSDN通过智能技术生成

1、摘要

1)bin文本传输采用Ymodem协议,移植协议代码。
2)触发进入BootLoader下载可以通过接收协议帧触发。另外用宏配置一个按键或者跳线帽进行下载模式的硬件触发模式。
3)芯片分配Bootloader区、APP区、参数区(存储APP的名称、版本、大小、当前下载的地址),如果芯片大小充足的话,再分配一个APP2,备份下载区,采用备份搬运升级的方式。
4)如果采用乒乓升级的话,APP代码工程需要设定不同的IROM1区域,所以不采用该方式。
5)与上位机兼容。方式一:上位机按协议进行开发;方式二:硬件触发进入BootLoader用XShell等支持Ymodem的软件进行下载。
6)BootLoader的串口打印信息用暂时用相同的串口进行打印。如果没有影响可以保留。如果不兼容则使用不同串口或者关闭打印,用指示灯来指示。
7)暂时不使用SPI-FLASH来做片外的程序备份区,如果需要要先移植。BOOTLOADER的程序分区就要更大些。

2、STM32CUBEMX工程

1)创建STM32CUBEMX工程,并且创建Usart和LED灯、按键的驱动。串口不使用中断方式。
在这里插入图片描述
在这里插入图片描述

2)晶振选用外部石英晶振,系统选择JTAG(5 pins)。实际开发时根据硬件电路确定。
在这里插入图片描述
在这里插入图片描述

3)串口波特率采用115200 Bits/s。实际使用时根据情况调整。如果使用的是RS485则需要配置使能引脚。
在这里插入图片描述
在这里插入图片描述

4)时钟配置按照最大实际配置,选择使用外部高速时钟HSE
在这里插入图片描述

5)工程管理配置,生成.c/.h文件。未使用的引脚设置为analog优化功耗
在这里插入图片描述

6)生成配置说明文件。点击file->Generate report生成文件。

7)生成MDK代码工程,配置好后点击GENERATE COD生成MDK工程
在这里插入图片描述

3、MDK工程设置

1)打开MDK工程文件夹,在第一层文件夹下创建DownloadFiles文件夹,用于保存hex和bin文件。在MDK-ARM文件夹下创建Build文件夹,用于保存编译文件。
2)CopyHex.bat和keilkill.bat拷贝到MDJ-ARM文件夹下。并且将CopyHex.bat内的工程名称改为当前工程的名称。
3)进入Core文件夹创建不同层级的文件文件夹。在BOOTLOADER中只移植Unitity公共文件。
在这里插入图片描述

4)打开MDK工程点击File Extensions添加源文件
在这里插入图片描述

5)点击Options for Target配置工程
在这里插入图片描述

配置编译输出文件夹Build
在这里插入图片描述

6)配置输出bin文件和将hex/bin文件拷贝到DownloadFiles文件夹并重命名加上编译时间。

D:\Program Files\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output .\Build\STM32F103ZET6_BOOTLOADER.bin .\Build\STM32F103ZET6_BOOTLOADER.axf

在这里插入图片描述

7)优化等级调整为0。并且添加头文件路径
在这里插入图片描述
在这里插入图片描述

8)调试器和芯片设置
在这里插入图片描述

4、Flash分区设置

Flash分区

在这里插入图片描述
16Kb BOOT
在这里插入图片描述
32Kb BOOT
在这里插入图片描述

修改应用程序地址
在这里插入图片描述

BANK

由于STM32F103只有一个bank所以在flash操作函数中需要判断FLASH_BANK2_END第二个bank是否有定义,未定义则将bank2的操作屏蔽。
在这里插入图片描述

5、程序修改及编译测试

1)修改Ymodem函数中串口定义
在这里插入图片描述

2)在Main函数中添加代码测试
在这里插入图片描述

3)报错:芯片空间不足,说明定义的boot区域空间太小了0x2000,8Kb。 重新定义为16Kb编译成功。
在这里插入图片描述

用上位机交互没有问题。
在这里插入图片描述

6、修改BOOT程序,采用YModem通信协议传输

在这里插入图片描述
如上图所示,采用了开源的ymodem协议进行数据传输,通过开源的flash_if对flash进行操作。并且设计了通信菜单和打印返回。并且支持下载片上程序,拷贝到其他的板子上。详细见资源代码。
在这里插入图片描述

7、修改APP的工程

在这里插入图片描述

设置USER_VECT_TAB_ADDRESS 和 VECT_TAB_OFFSET
在这里插入图片描述

7.1 启动逻辑

启动时通过判断升级标志物或者升级触发按钮(触发条件可修改,按钮触发可删除),如果需要升级则跳转到等待接收串口的数据,判断接收完成YModem数据帧后对flash进行擦除然后写入flash,操作成功则更新升级标志,然后跳转到应用程序。如果接收失败,直接跳转到应用程序,执行更新前的程序。如果接收成功但是flash操作失败则继续等待升级数据,再次对flash进行升级操作。资源代码中还有一些备份区的操作,更新失败从备份区拷贝程序到运行区进行运行的操作,可参考亦可不参考。
在这里插入图片描述

8、窗口看门狗配置

在这里插入图片描述
在这里插入图片描述

T = (40962^256(4095+1))/36Mhz APB1 =

9、独立看门狗

●溢出时间计算: Tout=((4*2^prer)*rlr)/40 (ms)
●prer:预分频系数:0~7(只有低3位有效),由预分频寄存器(IWDG_PR)设置。
●rlr:重载值:0~4095(低11位有效),由重装载寄存器(IWDG_RLR)设置。
在这里插入图片描述

10、IAP逻辑

1)收到升级指令。从APP跳转到BOOT下载程序到备份区;
2)下载完成验证OK,就将备份区程序COPY到运行区,启动运行;
3)下载失败,或者验证失败,直接返回运行区运行旧的程序;
4)APP无程序,怎在BOOT启动下载到运行区;(如果APP区无程序,则先去判断备份区是否有程序,有的话搬运到APP区使用)
5)如果备份区也没有程序则进入下载模式,请求下载程序。

11、资源

STM32单片机bootloader开发-STM32103ZET6-BOOTLOADER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Geek__1992

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

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

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

打赏作者

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

抵扣说明:

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

余额充值