【成功解决】stm32 的bootloader程序设计

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

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)
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 STM32H723串口IAP BootLoader程序介绍 STM32H723是意法半导体推出的STM32H7系列微控制器中的一员,采用Cortex-M7内核,兼具高速处理与低功耗优势。在某项目中,我们聚焦于其串口IAP BootLoader程序,该程序基于Keil uVision5开发环境构建。 IAP功能解读:IAP即在应用编程,允许在不脱离应用的前提下对MCU闪存编程,便于设备升级、修复错误或拓展功能,减少硬件替换。 STM32H723特性:该型号具备高速FPU、浮点运算、高精度模拟功能及丰富外设接口。在BootLoader中,其闪存和串口通信能力被充分运用。 Keil uVision5优势:作为一款广泛使用的嵌入式开发工具,Keil uVision5支持C和C++编程,集成了IDE、编译器、调试器等功能,利于STM32项目开发。 串口UART作用:UART是微控制器常用通信接口,用于设备间串行数据传输。在该BootLoader中,它承担固件下载和编程任务,可通过标准串口线缆或USB转串口适配器实现远程更新。 BootLoader适应性:该BootLoader设计灵活,只需对配置文件及外设初始化稍作修改,就能适配其他STM32型号。 工程结构组成:典型BootLoader工程涵盖启动代码、固件更新协议、错误处理、内存管理及安全特性等。本项目中,这些要素都已纳入考量并实现。 使用流程:用户将新固件经UART传至运行BootLoaderSTM32设备,BootLoader验证数据后,将新程序写入指定位置并跳转执行。 安全可靠性:设计时需保障固件完整性和安全性,如用校验和或数字签名验证新固件,避免非法或损坏代码加载。 调试测试:借助Keil5调试器,开发者可调试BootLoader
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值