前言
文件传输协议(英文: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编译代码。本示例所用的开发板及部分原理图:
-
- 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:
-
-
- 系统时钟树
-
-
-
- 网口配置
-
高级参数项默认是LAN8742,开发板使用的是LAN8720,它两寄存器基本一样,所以本实验对高级参数不作修改。
-
-
- RCC配置
-
-
-
- SYS配置
-
-
-
- Lwip配置(开启tftp)
-
-
-
- 文件系统,因为是文件传输协议,所以要对文件时行操作,本例中用SDIO接口,加文件系统实现文件操作:
-
开DMA,不是必需但建议开!
DMA及SDIO中断设置,原则是全局中断优先级高于DMA中断:
文件系统,我们直接先用SD Card:
高级设置中使用DMA开启,当然也可以不开:
-
-
- 引脚配置
-
IO脚按原理图来配置即可,但这时要注意一点是网口芯片有个复位引脚PD3在程序运行时要配迈高,可参考如下:
-
-
- 堆栈配置,本工程较大,可以适当加大堆栈大小:
-
-
-
工程代码
- 在main.c 中加入如下图所示代码:
-
工程代码
在Fatfs.c文件的MX_FATFS_Init函数中加入文件挂载操作:
-
- 编译工程,下载代码, ip为路由器自动分配,如果设备网口及LWIP成功运行,在路由器列表中同样也应该可以看到我们的设备,同时应该是可以PING通的:
(注:在使用探索者F4调试时,下载或仿真调试时先不要PC串口工具连接上开发板的USB_232接口,有可能导致程序运行不了--boot0引脚电平不对,可以先跑起来再在PC串口工具上连接相应端口!!)
安装并打开tftp工具(该工具在WIN10兼容性不是很好,可以试试修改兼容模式运行),进行如下操作:
往开发板上传桌面上的文件456.txt,文件名保存为Stm32cube.txt:
上传完成,删除桌面上已有的789.txt文件,从开发板下载Stm32cube.txt,保存本地名字为789.txt
查看789.txt文件内容发现与456.txt文件内容一致:
到此stm32+lwip的tftp服务构建实验就完成了。
OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!
文中源码资料下载,在公众号里给十三发消息:
下载|STM32基础系列教程39
关注十三公众号