STM32 基础系列教程 39 - Lwip_tftp

时间:2024-03-25 10:16:01

前言

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。

FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。

      TCP/IP协议中,FTP标准命令TCP端口号为21或2121,FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制。本节我们将学习stm32 + LWIP构建一下TFTP(简单文件传输协议)服务器,使用UDP通信,其对应的端口为69。

 

示例详解

基于硬件平台: 正点源子的stm32f4 探索者开发板,主要使用了SDIO文件系统以及以太网接口, MCU 的型号是 STM32F4ZET6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的开发板及部分原理图:

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

 

 

    1. 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:

 

      1. 系统时钟树

STM32 基础系列教程 39 - Lwip_tftp

 

      1. 网口配置

STM32 基础系列教程 39 - Lwip_tftp

高级参数项默认是LAN8742,开发板使用的是LAN8720,它两寄存器基本一样,所以本实验对高级参数不作修改。

 

      1. RCC配置

STM32 基础系列教程 39 - Lwip_tftp

      1. SYS配置

STM32 基础系列教程 39 - Lwip_tftp

 

      1. Lwip配置(开启tftp)

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

 

      1. 文件系统,因为是文件传输协议,所以要对文件时行操作,本例中用SDIO接口,加文件系统实现文件操作:

STM32 基础系列教程 39 - Lwip_tftp

开DMA,不是必需但建议开!

STM32 基础系列教程 39 - Lwip_tftp

DMA及SDIO中断设置,原则是全局中断优先级高于DMA中断:

STM32 基础系列教程 39 - Lwip_tftp

文件系统,我们直接先用SD Card:

STM32 基础系列教程 39 - Lwip_tftp

高级设置中使用DMA开启,当然也可以不开:

STM32 基础系列教程 39 - Lwip_tftp

 

      1. 引脚配置

STM32 基础系列教程 39 - Lwip_tftp

IO脚按原理图来配置即可,但这时要注意一点是网口芯片有个复位引脚PD3在程序运行时要配迈高,可参考如下:

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

      1. 堆栈配置,本工程较大,可以适当加大堆栈大小:

STM32 基础系列教程 39 - Lwip_tftp

 

    1. 工程代码
      1. 在main.c 中加入如下图所示代码:

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

 

在Fatfs.c文件的MX_FATFS_Init函数中加入文件挂载操作:

STM32 基础系列教程 39 - Lwip_tftp

    1. 编译工程,下载代码, ip为路由器自动分配,如果设备网口及LWIP成功运行,在路由器列表中同样也应该可以看到我们的设备,同时应该是可以PING通的:

(注:在使用探索者F4调试时,下载或仿真调试时先不要PC串口工具连接上开发板的USB_232接口,有可能导致程序运行不了--boot0引脚电平不对,可以先跑起来再在PC串口工具上连接相应端口!!)

STM32 基础系列教程 39 - Lwip_tftp

安装并打开tftp工具(该工具在WIN10兼容性不是很好,可以试试修改兼容模式运行),进行如下操作:

往开发板上传桌面上的文件456.txt,文件名保存为Stm32cube.txt:

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

上传完成,删除桌面上已有的789.txt文件,从开发板下载Stm32cube.txt,保存本地名字为789.txt

STM32 基础系列教程 39 - Lwip_tftp

STM32 基础系列教程 39 - Lwip_tftp

查看789.txt文件内容发现与456.txt文件内容一致:

STM32 基础系列教程 39 - Lwip_tftp

到此stm32+lwip的tftp服务构建实验就完成了。

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

 

文中源码资料下载,在公众号里给十三发消息:

下载|STM32基础系列教程39

STM32 基础系列教程 39 - Lwip_tftp

 

关注十三公众号

STM32 基础系列教程 39 - Lwip_tftp