打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32固件IAP程序实现

1.写在前面

IAP全称是In Application ProgrammingIAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级

2.系统BootLoader

对于STM32来说芯片出厂时已经预置了一段Bootloader,但是启动Bootloader需要设置单片机的BOOT引脚:BOOT1=0BOOT0=1,并复位才能进入系统BootloaderBOOT引脚设置可通过硬件来实现自动设置和复位,从而利用系统Bootloader实现IAP。电路图如下:

电路比较简单就不详细分析了。程序升级需要配合专用的软件MCUISP。升级时MCUISP软件会控制DTR引脚和RTS引脚BOOT0引脚拉高,并实现单片机复位,从而进入系统Bootloader。之后可以通过USB转串口程序进行升级。

3.自己编写BootLoader

系统Bootloader只能通过特定的接口对程序进行升级增加额外的硬件设计有时候并不适用。这时候就需要自己编写Bootloader程序实现IAP。

实现IAP需要两个程序:Bootloader程序和应用程序系统启动后首先进入Bootloader程序,判断是否需要升级如果不需要直接跳转到应用程序运行如果需要则通过指定的接口和协议接收数据并写入到Flash中,实现应用升级。这种方式灵活很多,接口和协议都可以自定义实现的关键是协议的设计和对Flash进行读写。这里以STM32F1系列单片机为例,采用串口1和通用的Ymodem协议进行介绍。

YModem协议

YModem协议是一个非常高效的文件传输协议每包数据可以达到1024字节YModem协议传输的完整的握手过程如下。这里就不进行详细介绍了,用户也可以采用自定义的协议,协议设计要主要发送、反馈和校验,保证传输数据的正确性。

Bootloader程序

STM32Cube文件中提供了相关的例程,可以进行参考:

STM32Cube_FW_F1_V1.8.0\Projects\STM3210C_EVAL\Applications\IAP\IAP_Main

可以看到,程序初始化后通过检测按键来判断是否需要升级应用程序

很多时候,用户的硬件上可能没有按键,则需要通过其它办法来实现判断。比如,需要升级时,应用程序在Flash某个位置写入一个标志,然后复位进入BootLoader程序,BootLoader程序读取该标志自动判断是否需要升级应用程序。

应用程序

由于BootLoader程序存在,应用程序在Flash中的存储位置也发生了改变,需要对程序中的中断向量表偏移地址进行修改。首先在Bootloader程序中确定应用程序的起始地址:

应用程序工程修改程序编译的地址

应用程序中system_stm32f10x.c文件,找到

修改

地址为偏移地址,不是绝对地址,与上面的地址有区别

最后,MDK默认只生成HEX文件,要生成bin文件需要添加一条指令在User选项卡中,勾选 'Run # 1',在后面输入框写入bin文件生成方式

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=Bin\@L.bin !L 

       上位机

上位机采用SecureCRT,该软件支持YModem协议打开软件,连接串口,使电路板进入Bootloader程序根据菜单进行操作即可。

   采用其它方式和协议进行IAP升级的方法将在以后的文章中继续介绍。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
 STM32固件IAP升级实战
STM32串口IAP分享
使用IAP在应用编程轻松更新固件
完整且超简化的linux下stm32开发环境(编译,下载)
stm32实现iap远程固件更新
STM32F103C8T6实现串口IAP方式升级固件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服