基于stm32的485_IAP程序升级

本文详细介绍了基于STM32的485_IAP程序升级流程,包括Flash映射、内存结构、上电运行过程、Flash写入、用户代码修改、代码文件转换、升级命令与跳转以及跳转标志位的设置。通过理解这些步骤,可以实现程序的内部编程和升级。
摘要由CSDN通过智能技术生成

文章目录

  • 一.Flash的映射

  • 二、stm32内存结构和上电运行过程

  • 三.Flash的写入(从sram到Flash)

  • 四.用户代码的修改

  • 五.代码文件格式的转换和发送升级命令

  • 六.程序的升级命令和跳转

  • 七.跳转标志位



前言

        我们平常常用的ISP下载,实际上是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程(通过厂商固化好的程序),需要外部电路辅助实现,而IAP则是通过将Flash映射为两个区域,一部分为用户引导程序区BOOT,一部分为用户程序,利用引导程序实现在程序内编程(IAP)。  而485也好,串口也好,只是硬件传输上的协议,本质方法都是一样的。

        整体思路就是Flash映射为两部分,首先运行引导程序,发送指令和程序包给stm32,再让stm32将sram储存的内容写入Flash的第二部分,再让主进程跳转至Flash的第二部分即可。



一、Flash的映射

        第一步首先我们需要将Flash划分为两个区域,一部分为BOOT,一部分为用户程序。这就需要我们知道BOOT程序的大概大小。

通过keil5编译程序我们可以得到

linking...
Program Size: Code=7252 RO-data=336 RW-data=60 ZI-data=48068  
FromELF: creating hex file...
"..\OBJ\USART.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01

keil5代码分为两部分:

       1.  code,即程序代码部分      

       2.  inline data. 即 literal pools(文字常量池), and short strings(短字符串)等

另外 RO Data: read-only data,只读的数据

        RW Data: read write data,可读写的数据

        ZI Data: zero initialized data,零初始化的可读写变量,存放未初始化的全局变量及初始化为0的变量

RO size: Code + RO_data,表示程序占用Flash空间的大小。

RW size: RW_data + ZI_data,表示运行时占用RAM的大小。

可以计算出我们的上面程序所占Flash大小为(7252+336)/1024=7K。

我采用的是stm32f103mini板,可以从keil5魔术棒Target栏看到

主要参数如下

CPU:STM32F103RCT6
  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值