文章目录
STM32的bootloader程序设计
通常在使用MCU进行开发设计的电子产品中,只存在固件的概念,并没有所谓的 Boot Loader。其实在此类设备中,同样是可以存在 Bootloader的。正因为有Bootloader,所以不需要拆机就能对产品进行固件升级。万一产品固件有缺陷,那么利用 Bootloader进行升级非常方便,非常节省精力和成本,因此越来越多的基于
MCU的产品也开始使用 Bootloader.
要实现这种设计会用到IAP技术。IAP是 In Application Programming(在应用中编程)。一般情况下芯片的代码区只有一个用户程序。而在IAP方案下将代码区划分为两部分,各存放一个程序,一个为 Bootloader(引导加载程序),另一个为user application(用户应用程序)。 Bootloader在产品出厂时就固定下来了,当需要变更 user application I时,只需要通过触发 Bootloader对 user application的擦除和重新写入,就可完成对用户应用程序的升级

实现的机制如下。
当复位发生时,开始执行 Bootloader。 Bootloader会检测一个特定的条件,比如
说按下组合键。当条件触发时, Bootloader会进行一个分支判断,以更新用户应用程
序或者直接执行用户应用程序。
用户应用程序需要和 Bootl oader分开。最常见的做法是将 Bootloader放置在存储 Flash中的最开始处,并将用户应用程序放置在其后的可用的存储 Flash中;这样就可以独立配置两块区域的内存保护。
boot 工程配置截图如下

程序流程图

int main(void)
{
/* H7 V1.6.0版本 Hal库 2020-03-04更新 */
HAL_Init();
/* 系统时钟 */
SystemClock_Config();
/* GPIO初始化 */
MX_GPIO_Init();
/* 打印串口LPUART */
MX_LPUART1_UART_Init();
/* 读取应用程序 */
ReadAppPro();
/* 跳转到应用程序区 -> 0x08020000(512K) */
Quit_IAP_Process();
}
ReadAppPro();
void ReadAppPro(void)
{
updateInfo_TypeDef updateInfo; /*升级信息参数*/
uint32_t NbOfSectors = 0; /*占用Flash扇区数*/
uint32_t count = 0; /*分包写入个数*/
uint32_t i = 0;
uint32_t calcCRC = 0;
uint32_t programCRC = 0;
uint32_t fileLen = 0;
uint8_t *papp_data = (uint8_t *)(0x24000000)

本文深入解析STM32的Bootloader设计及IAP技术,介绍如何利用Bootloader进行固件升级,详细解释程序流程、APP程序起始地址设置及中断向量表偏移量设置方法。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



