STM32的IAP升级笔记

本文详细介绍了STM32的In-Application Programming (IAP)升级过程,包括在线升级和本地升级的基本原理,强调了升级前需要确认的MCU内部FLASH大小、启动程序和应用程序的大小关系。文中详细阐述了升级思路,如程序备份、内部FLASH的读写操作、擦除和写入步骤,并提到了中断向量表的映射以及地址跳转。最后讨论了一个问题,即内部FLASH第一页数据在写入后会全部变为0,期待解决方案。
摘要由CSDN通过智能技术生成

IAP升级主要分为在线升级与本地升级两种方式,核心都是将升级程序的BIN文件写入到MCU的内部FLASH中,并使程序从升级程序的的地址开始运行。
再进行升级之前,这些一定要搞清楚:
1.MCU的内部FLASH大小(A KByte)
2.启动程序(就是引导程序,这部分是不能被擦除的)的大小(B KByte)
3.应用程序(即升级程序)的大小(C KByte)
为保证升级成功,这里要注意:
A > B+C(最好在预留1K空间,即A>B+C+1)
我使用的是STM32F051系列的,闪存大小64K,引导程序5K,预留6K空间,应用程序55K,内存大小足够。下面讲一讲具体思路及实现函数。
主要思路:
先将升级程序写入到外部FLASH中进行备份,写入完成后,给MCU一个升级信号,然后开始读外部FLASH,写内部FLASH,按页操作,写完之后,进行地址跳转,跳转至升级程序的开始地址。
STM32库里面提供了内部FALSH的读写函数,我们只需要找到自己需要的调用即可。
内部FLASH写入步骤:
解锁——清除标志位——擦除——写FLASH——上锁
内部FLASH结构:
在这里插入图片描述
库里擦除函数提供了全部擦除和页擦除两种方式:
1.FLASH_Status FLASH_ErasePage(uint32_t Page_Address) //页擦除,每次擦除1K,参数为起始地址
2.FLASH_Status FLASH_EraseAllPages(void) //全部擦除
写FLASH函数:
1.FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) //写一个字,即4个字节
2.FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) //写半字,即2个字节
写入函数代码如下:

void Flash_Task_Write(u32 write_addr,u16 *pBuff,u16 len)
{
   
  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值