开发平台
STM32F407开发板(带以太网),板子上的PHY为LAN8720A,没有用到显示屏全为串口输出调试信息。实现功能
通过STM32CubeMX在原子STM32F407板子上搭建TCP Server 及 TFTP Server ,实现这些功能非常简单。步骤
功能介绍、工程搭建、工程代码、TFTP 服务器测试
1、TCP Server 实现显示连接上的客户端IP及对客户端发来的数据回传2、TFTP Server 实现IAP功能及读取MCU内部FLASH数据。这里用到的是文件传输协议,主要是参考官方文档UM1709,及官方STM324xG_EVAL的LWIP IAP例子。
工程搭建
外设配置
打开STM32CubeMX,点NEW PROJECT,在左侧的输入框中输入407ZG,在右侧会显示STM32F407ZGT6的MCU列表,选择此列表,双击。设置时钟源为外部时钟开启SWD调试接口,开启ETH外设,选择RMII接口(LAN8720A为RMII接口),中间件里时能LWIP。使用RMII接口的时候软件会自动配置对应的引脚,但是一定要仔细对比软件配置的引脚是否为板子上硬件所连接的。
原子F407板子上的LAN8720A的RMII接口引脚如下图,
配置时钟外部高速晶振选择为8M,PLL SORCE MUX 选择为HSE,在HCLK处输入168点回车,软件会自动配置好
中间件配置这里主要配置,ETH、LWIP、串口1、GPIO
-
生成工程代码
点左上角的Project,选择Settings...(不建议直接点黄色的齿轮),点击OK。再点右上方的黄色齿轮即可生成工程代码。
工程代码
1、TCP Server 的实现
看起来代码很多,其实真的不复杂。
大致流程:先新建一个TCB_PCB、开始监听、挂载客户端连接请求回调函数、挂载接收数据回调函数、挂载发送完成回调函数、挂载出错回调函数、挂载心跳包回调函数、关闭连接等,最重要的是释放内存!每收到一个数据链,它已经被申请了内存,所有在处理完这个数据后一定要释放。
2、TCP服务器测试用网络调试助手连接TCP服务器(两者必须在一个网关里面,192.168.000.XXX),网络调试助手里选择TCP客户端,远程主机IP为 192.168.0.120 , 端口号为7
详细测试步骤请点击阅读原文下载。
通过测试,则表示TCP服务器已经完成。您也可以通过手机连接这个路由器的WIFI,通过 网络调试助手APP来连接这个开发板的服务器,电脑可以通过 TCP客户端与开发板的TCP服务器连接同时也可以用手机做TCP客户端连接开发板的TCP服务器。
3、TFTP Server 的实现还是在上面的代码上来实现此功能,即在TCP 服务器的代码上实现TFTP 服务器。打开刚才STM32CubeMX工程,在原来的基础上来配置LWIP。
因为是要通过TFTP 来实现 IAP 功能 ,所有一定有FLASH 的操作,这里我们COPY官方例子里面的flash_if.c和flash_if.h
至此,TFTP服务器搭建完成,下载到开发板,串口显示如下信息:Start 开始监听 挂载客户端连接回调函数 TFTP初始化成功 Static IP address: 192.168.0.120可以通过上面的TCP服务器测试步骤来测试TCP服务器功能,正常测试,工作正常,ping也能通