stm32在线升级方案

目录

下载固件流程:

Bootloader程序设计流程

普通工程改为APP工程的步骤


背景:当嵌入式软件需要固件升级时,有时需要拆卸设备,较为麻烦,为方便升级,提供远程升级的功能,可通过网络或其他通讯接口传输固件进行升级。

系统分为两大模块:Bootloader和APP应用程序,系统复位后先运行Bootloader程序,此程序负责升级APP应用程序。Bootloader执行结束后跳至APP应用程序。APP负责接受新的APP程序。

下载固件流程:

  1. 将待升级的新固件命名为mcu.bin后通过产品支持的方式传输的SD卡中,可以是通过网络tftp传输,或者can通信传输,也可以直接拷贝到SD卡,取决于app自身所含有的功能。必须保证固件是完整的、功能正常的,可用于升级的,若固件不完整将导致升级固件后设备无法正常启动。
  2. 传输好固件后,需要通过下发升级指令置起需要升级的标志,协议可以自定,该标志存储在backup ram的起始位置处,backup ram复位不会丢失,仅断电会丢失,置好标志后,延时一会进行复位。               

*(volatile int *)BKPSRAM_BASE = 1;

 

  1. 复位后将跳转到Bootloader的程序。

 

下载固件流程

Bootloader程序设计流程

  1. 读取升级标志位判断是否需要升级,若不需要升级直接跳转到app
  2. 若需要升级,打开sd卡里的mcu.bin文件,以512字节/包的方式进行固件对的读取和擦写,当读取的数据小于512字节,表明固件已经读取完毕,擦除完以后就可以跳转到app,使用新固件了。

普通工程改为APP工程的步骤

  1. 在keil工程里,需要修改app的flash起始地址和大小,默认起始地址是0x8000000,大小为0x100000,需根据flash的空间划分进行修改,例如Bootloader预留64k,那么app的起始地址就为0x8010000,Size改为:0xF0000。在keil里,打开Options for Target ‘target 1’对话框或者点击魔术棒,点击Target,找到IROM1,将0x8000000改为0x8010000,0x100000改为0xF0000

     

    1. 继续选择User标签页,勾选Run#1,在框里输入fromelf.exe --bin -o "$L@L.bin" "#L" ,该步骤是开启编译时生成bin文件
    2. 在main里,需要重映射中断向量表,使用如下语句
    SCB->VTOR = FLASH_BASE | 0x10000;  //偏移0x10000,需与步骤1中的工程配置保持一致
    1. 将升级标志清除,升级标志存储在backup ram里,需要先初始化一下,(stm32F7系列产品)添加并调用如下BKP_SRAM_Init函数进行初始化,再执行 *(volatile int *)BKPSRAM_BASE = 0xAAAABBBB;//清除升级标志,人为定义的特殊值,其值含义需与Bootloader一致。

void BKP_SRAM_Init(void)
{
	/* 电源接口时钟使能 (Power interface clock enable) */
	__HAL_RCC_PWR_CLK_ENABLE();
 
	/* DBP 位置 1,使能对备份域的访问 */
	HAL_PWR_EnableBkUpAccess();
 
	/* 通过将 RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR) 中的 BKPSRAMEN 位置 1, 使能备份 SRAM 时钟 */
	__HAL_RCC_BKPSRAM_CLK_ENABLE();
 
	/* 应用程序必须等待备份调压器就绪标志 (BRR) 置 1,指示在待机模式和 VBAT 模式下会保持写入 RAM 中的数据。 */
	HAL_PWREx_EnableBkUpReg();
}

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32在线升级IAP功能是指通过网络或其他通信方式,对STM32单片机进行固件(软件)的升级在线升级能够方便、高效地更新设备的软件,提供更好的用户体验和功能支持。 STM32单片机支持在线升级IAP功能的原因有以下几点: 1. 灵活性:在线升级使得设备的软件可以随时更新,无需停机或更换硬件。通过网络通信,可以快速且实时地获取最新的固件版本,从而提供更好的用户体验。 2. 可定制性:在线升级IAP功能使得设备的软件可以按照用户需求进行修改、更新。用户可以根据自己的需求选择合适的固件版本,实现个性化定制。 3. 效率提升:在线升级可以通过批量更新的方式,一次性对多个设备进行软件更新,节省了大量的时间和人力成本。同时,还可以远程监控设备状态,提前预警并解决软件问题,提高了系统的稳定性和可靠性。 4. 安全性:在线升级功能可以通过加密和认证机制,确保升级过程的安全性和可靠性。防止不合法的固件篡改,保护设备和用户数据的安全。 从实现的角度来看,STM32在线升级IAP功能需要以下几个步骤: 1. 通过网络或其他通信方式,与设备建立连接。 2. 检查设备的固件版本,与服务器上的最新版本进行比较。 3. 如果设备的固件版本低于最新版本,下载并更新设备的固件。 4. 在固件更新完成后,对设备进行重启,并验证新固件的完整性和正确性。 5. 更新完成后,断开与设备的连接。 需要注意的是,在进行STM32在线升级IAP功能时,应该确保网络的稳定性和安全性,以防止不合法的固件下载和篡改。同时,还应该对升级过程进行日志记录,以便后续的故障排查和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值