STM32F407ZET6 LWIP TFTP IAP升级记录

本文记录了在STM32F407ZET6上利用LWIP通过TFTP进行固件IAP升级的过程,包括确定芯片Flash大小,划分Bootloader和APP地址,集成TFTP Server功能,以及在遇到数据长度判断问题时的调试解决方法。
摘要由CSDN通过智能技术生成

最近需要在STM32F407ZET6上面做网络升级固件的功能。调试过程中出现了一些怪现象,遂做个调试记录。

一、弄清楚你的芯片的flash大小,做好bootloader和app的地址区分。

一开始我被参考手册中的信息误导了。参考手册是针对一个系列的,会把最大容量的显示出来。具体是多少还是要看你自己的系列所占大小。

可以看到一共有12个扇区,总计1024KB的大小。然后想都没想就按这个地址长度来规划,结果是可想而知的。我的芯片是STM32F407ZET6,flash大小只有512KB,从选型手册上可以看到。

所以,正确的地址范围应该为:0x08000000-0x0807FFFF。然后划分bootloader占用128KB,即0x20000的大小,APP占用后面所有的可用地址,范围为0x08020000-0x0807FFFF,共384KB。

二、从ST官网上面找到关于通过LWIP实现IAP的例程。这里面是官方通过https和tftp进行IAP升级的代码,具有参考价值。

从这个例程着手,可以减少代码时间。我打算先从TFTP着手,实现IAP升级。

三、准备2份代码,一份是bootloader的,一份是APP的,前提条件:bootloader代码必须要保证lwip工作正常,能正常获取IP,UDP,TCP工作正常。APP代码没有特殊要求。下面是注意点。

bootloader在keil中地址分布

APP在keil中的地址分布

app代码的起始部分,请手动设置代码的入口地址:

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x20000);

四、bootloader中添加TFTP server的功能。

我从下载的官网例程中复制了需要的几个文件:tftpserver.c tftpserver.h flash_if.c flash_if.h,分别是tftpserver和flash的功能代码。加入我自己的工程中,下面开始分析代码。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值