stm32cube 教程之使用TFTP进行远程升级

本文详细介绍了如何使用TFTP协议在STM32上进行固件升级,包括LWIP配置、ETH配置、TFTP使能及调试过程。通过串口输出,展示了从打开文件到成功写入Flash的每一步细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

TFTP简介:https://blog.csdn.net/young2415/article/details/91125718

二、步骤

1、TFTP是基于UDP的协议,所以要在LWIP配置中使能LWIP功能

2、配置ETH

注意stm32cube自动生成的引脚可能和实际电路不匹配,要注意下。

3、配置lwip

使能UDP,使用静态Ip

4、使能TFTP

 

三、调试过程

1、配置客户端

server interfaces 是电脑的ip,host是stm32设备的ip,local file选择要升级的bin文件,block size选择512.确认无误后点击Put。

2、串口软件会打印相应的提示

打开文件  RTC.bin * 
打开模式  octet 
写文件
开始擦除Flash  时间较长 
Write File Init Succes 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020000 
写FLASH成功  下一次地址 :0X08020200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020200 
写FLASH成功  下一次地址 :0X08020400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020400 
写FLASH成功  下一次地址 :0X08020600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020600 
写FLASH成功  下一次地址 :0X08020800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020800 
写FLASH成功  下一次地址 :0X08020A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020A00 
写FLASH成功  下一次地址 :0X08020C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020C00 
写FLASH成功  下一次地址 :0X08020E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08020E00 
写FLASH成功  下一次地址 :0X08021000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021000 
写FLASH成功  下一次地址 :0X08021200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021200 
写FLASH成功  下一次地址 :0X08021400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021400 
写FLASH成功  下一次地址 :0X08021600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021600 
写FLASH成功  下一次地址 :0X08021800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021800 
写FLASH成功  下一次地址 :0X08021A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021A00 
写FLASH成功  下一次地址 :0X08021C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021C00 
写FLASH成功  下一次地址 :0X08021E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08021E00 
写FLASH成功  下一次地址 :0X08022000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022000 
写FLASH成功  下一次地址 :0X08022200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022200 
写FLASH成功  下一次地址 :0X08022400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022400 
写FLASH成功  下一次地址 :0X08022600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022600 
写FLASH成功  下一次地址 :0X08022800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022800 
写FLASH成功  下一次地址 :0X08022A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022A00 
写FLASH成功  下一次地址 :0X08022C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022C00 
写FLASH成功  下一次地址 :0X08022E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08022E00 
写FLASH成功  下一次地址 :0X08023000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023000 
写FLASH成功  下一次地址 :0X08023200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023200 
写FLASH成功  下一次地址 :0X08023400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023400 
写FLASH成功  下一次地址 :0X08023600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023600 
写FLASH成功  下一次地址 :0X08023800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023800 
写FLASH成功  下一次地址 :0X08023A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023A00 
写FLASH成功  下一次地址 :0X08023C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023C00 
写FLASH成功  下一次地址 :0X08023E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08023E00 
写FLASH成功  下一次地址 :0X08024000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024000 
写FLASH成功  下一次地址 :0X08024200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024200 
写FLASH成功  下一次地址 :0X08024400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024400 
写FLASH成功  下一次地址 :0X08024600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024600 
写FLASH成功  下一次地址 :0X08024800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024800 
写FLASH成功  下一次地址 :0X08024A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024A00 
写FLASH成功  下一次地址 :0X08024C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024C00 
写FLASH成功  下一次地址 :0X08024E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08024E00 
写FLASH成功  下一次地址 :0X08025000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025000 
写FLASH成功  下一次地址 :0X08025200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025200 
写FLASH成功  下一次地址 :0X08025400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025400 
写FLASH成功  下一次地址 :0X08025600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025600 
写FLASH成功  下一次地址 :0X08025800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025800 
写FLASH成功  下一次地址 :0X08025A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025A00 
写FLASH成功  下一次地址 :0X08025C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025C00 
写FLASH成功  下一次地址 :0X08025E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08025E00 
写FLASH成功  下一次地址 :0X08026000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026000 
写FLASH成功  下一次地址 :0X08026200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026200 
写FLASH成功  下一次地址 :0X08026400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026400 
写FLASH成功  下一次地址 :0X08026600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026600 
写FLASH成功  下一次地址 :0X08026800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026800 
写FLASH成功  下一次地址 :0X08026A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026A00 
写FLASH成功  下一次地址 :0X08026C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026C00 
写FLASH成功  下一次地址 :0X08026E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08026E00 
写FLASH成功  下一次地址 :0X08027000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027000 
写FLASH成功  下一次地址 :0X08027200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027200 
写FLASH成功  下一次地址 :0X08027400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027400 
写FLASH成功  下一次地址 :0X08027600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027600 
写FLASH成功  下一次地址 :0X08027800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027800 
写FLASH成功  下一次地址 :0X08027A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027A00 
写FLASH成功  下一次地址 :0X08027C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027C00 
写FLASH成功  下一次地址 :0X08027E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08027E00 
写FLASH成功  下一次地址 :0X08028000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028000 
写FLASH成功  下一次地址 :0X08028200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028200 
写FLASH成功  下一次地址 :0X08028400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028400 
写FLASH成功  下一次地址 :0X08028600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028600 
写FLASH成功  下一次地址 :0X08028800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028800 
写FLASH成功  下一次地址 :0X08028A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028A00 
写FLASH成功  下一次地址 :0X08028C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028C00 
写FLASH成功  下一次地址 :0X08028E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08028E00 
写FLASH成功  下一次地址 :0X08029000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029000 
写FLASH成功  下一次地址 :0X08029200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029200 
写FLASH成功  下一次地址 :0X08029400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029400 
写FLASH成功  下一次地址 :0X08029600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029600 
写FLASH成功  下一次地址 :0X08029800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029800 
写FLASH成功  下一次地址 :0X08029A00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029A00 
写FLASH成功  下一次地址 :0X08029C00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029C00 
写FLASH成功  下一次地址 :0X08029E00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X08029E00 
写FLASH成功  下一次地址 :0X0802A000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802A000 
写FLASH成功  下一次地址 :0X0802A200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802A200 
写FLASH成功  下一次地址 :0X0802A400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802A400 
写FLASH成功  下一次地址 :0X0802A600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802A600 
写FLASH成功  下一次地址 :0X0802A800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802A800 
写FLASH成功  下一次地址 :0X0802AA00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802AA00 
写FLASH成功  下一次地址 :0X0802AC00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802AC00 
写FLASH成功  下一次地址 :0X0802AE00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802AE00 
写FLASH成功  下一次地址 :0X0802B000 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802B000 
写FLASH成功  下一次地址 :0X0802B200 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802B200 
写FLASH成功  下一次地址 :0X0802B400 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802B400 
写FLASH成功  下一次地址 :0X0802B600 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802B600 
写FLASH成功  下一次地址 :0X0802B800 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802B800 
写FLASH成功  下一次地址 :0X0802BA00 
写文件数据  数据长度 512 
开始写FLASH  地址 :0X0802BA00 
写FLASH成功  下一次地址 :0X0802BC00 
写文件数据  数据长度 176 
开始写FLASH  地址 :0X0802BC00 
写FLASH成功  下一次地址 :0X0802BCB0 
关闭文件

3、这里使用的升级代码是正点原子的RTC代码,只需要在原有的工程中做一些修改

选择程序起始位置

生成bin文件

修改中断向量表起始位置

五、实验现象

六、源码位置

https://download.csdn.net/download/crjmail/12100183

七、抓包分析

八、可参考代码

http://git.savannah.nongnu.org/cgit/lwip.git/tree/contrib/examples/tftp/tftp_example.c?id=f098c4515e1335d6255be71ef9704d2092b4b851

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值