你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32固件IAP程序实现

[复制链接]
STMCU小助手 发布时间:2021-2-1 10:51
STM32固件IAP程序实现
/ K. j- u8 X6 @. q+ \: Q
1.写在前面
6 N) p0 m" P0 G  [
IAP全称是InApplication Programming,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
6 O: i! f7 P: Z* X3 t
2.系统BootLoader
( x5 K0 ~6 J! e- M" d, H+ p
对于STM32来说,芯片出厂时已经预置了一段Bootloader,但是启动Bootloader需要设置单片机的BOOT引脚:BOOT1=0,BOOT0=1,并复位后才能进入系统Bootloader。BOOT引脚的设置可通过硬件来实现自动设置和复位,从而利用系统Bootloader实现IAP。电路图如下:
' S: N$ e$ m0 f$ v* {" G$ a
5.1.png

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

8 _  c$ o) g, R* p
5.2.png
; \, J1 a: {: s' g
3.自己编写BootLoader

3 \: p+ E% K7 h3 I
系统Bootloader只能通过特定的接口对程序进行升级,且会增加额外的硬件设计,有时候并不适用。这时候就需要自己编写Bootloader程序实现IAP。
实现IAP需要两个程序:Bootloader程序和应用程序。系统启动后首先进入Bootloader程序,判断是否需要升级,如果不需要直接跳转到应用程序运行;如果需要则通过指定的接口和协议接收数据并写入到Flash中,实现应用升级。这种方式灵活很多,接口和协议都可以自定义,实现的关键是协议的设计和对Flash进行读写。这里以STM32F1系列单片机为例,采用串口1和通用的Ymodem协议进行介绍。
) f* j$ @, W. I/ E3 @% o0 a1 C
YModem协议
YModem协议是一个非常高效的文件传输协议,每包数据可以达到1024字节。YModem协议传输的完整的握手过程如下。这里就不进行详细介绍了,用户也可以采用自定义的协议,协议设计要主要发送、反馈和校验,保证传输数据的正确性。
5.3.png

) G2 h! [; S6 o+ B
Bootloader程序
STM32Cube库文件中提供了相关的例程,可以进行参考:
STM32Cube_FW_F1_V1.8.0\Projects\STM3210C_EVAL\Applications\IAP\IAP_Main
可以看到,程序初始化后通过检测按键来判断是否需要升级应用程序。
5.4.png

. W- I$ L8 C" V3 @  r$ D
很多时候,用户的硬件上可能没有按键,则需要通过其它办法来实现判断。比如,需要升级时,应用程序在Flash某个位置写入一个标志,然后复位进入BootLoader程序,BootLoader程序读取该标志来自动判断是否需要升级应用程序。
! x  o1 Q. e& R0 P2 a( Z2 R9 s
应用程序
由于BootLoader程序的存在,应用程序在Flash中的存储位置也发生了改变,需要对程序中的中断向量表偏移地址进行修改。首先在Bootloader程序中确定应用程序的起始地址:
5.5.png
在应用程序工程中修改程序编译的地址:

7 l% g6 v3 h& m) K5 P  M
5.6.png

9 _# r* Q6 Q* u! l+ _; \2 F2 P% Q& J. f
在应用程序中system_stm32f10x.c文件,找到:
5.7.png
修改为:
5.8.png

% K# F! T% M0 S! j
该地址为偏移地址,不是绝对地址,与上面的地址有区别。
  Q3 s1 D2 b4 ^/ \
最后,MDK默认只生成HEX文件,要生成bin文件需要添加一条指令。在User选项卡中,勾选 "Run # 1",在后面输入框写入bin文件生成方式:
$K\ARM\ARMCC\bin\fromelf.exe --bin--output=Bin\@L.bin !L
5.9.png
) r) M. C' K$ [
上位机
上位机采用SecureCRT,该软件支持YModem协议。打开软件后,连接串口,使电路板进入Bootloader程序,根据菜单进行操作即可。
5.10.png
0 f9 k  F- ]: w3 B* R3 P
   采用其它方式和协议进行IAP升级的方法将在以后的文章中继续介绍。
' V* }5 N- i  y1 X
文章出处: 嵌入式技术开发
9 F2 j; N- j3 D0 g) l( Z
赞 收藏 1 评论0 发布时间:2021-2-1 10:51

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版