开发平台
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也能通
关键字:STM32F407 TFTP服务器
引用地址:
在STM32F407板子上搭建TCP服务器及TFTP服务器
推荐阅读最新更新时间:2026-03-21 18:01
基于TCP/IP协议的嵌入式网络打印服务器的实现
摘要:运用嵌入式Internet技术,设计了一个基于TCP/IP协议的嵌入式网络打印服务器,给出了系统中TCP/IP协议的剪裁方案,分析了系统软硬件的设计思路,最后通过测试程序验证了其可行性。
关键词:嵌入式 以太网 TCP/IP协议 网络打印
随着信息技术的发展和网络时代的到来,基于TCP/IP协议的嵌入式Internet技术越来越受到人们的关注。目前,大多数嵌入式设备仍处于孤立应用阶段 ,为了实现多个MCU之间的信息共享和交流,通常利用CAN、RS232和RS485等总线组网。但是这些网络的有效半径较短,并且孤立于Internet网络以外,如果能把嵌入式设备直接接入Internet,就可以用方便、低廉的方式实现信息的共享
[嵌入式]
STM32F407 ------ 使用定时器实现精确延时
测试环境:主频168M #include delay.h void delay_init() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_TimeBaseStructure.TIM_Period = 83; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.
[单片机]
SPI 串行Flash闪存W25Q128FV 的使用(STM32F407)_硬件篇
1 性能概述 W25Q128BV的主要性能如下 通讯方式:为标准104MHz串行SPI方式,还可以双倍速204MHz和4倍速416MHz访问。 容 量:128Mbit,65536Page。 因为8 bit =1 byte , 256 byte=1Page 、16Page=1Secotr、16Secotr=1Block 所以W25Q128BV有:256 Block 4096 Secotr 65536 Page 16777216 byte W25Q128写入前必须先
[单片机]
stm32F407(TJA1050)CAN通信成功--Apple的学习笔记
一,前言 最近我在公司玩单片机玩的不亦乐乎,好多开发板供我玩,总算MCU底层现在算告一段落。现在我又开始玩自己的开发板咯,之前stm32先移植了一个can,目的是测试买的TJA1050模块,以及自己买的canable设备。结果can不通,不过我用了公司开发板,验证了canable是正常的。TJA1050之前玩linux的时候也验证过是正常的。那么剩下的问题就是stm32我移植的can有问题。 二,瞬间解决问题 移植的can怎么会有问题呢?先猜测下复用引脚错误或者波特率选择的clock源不同导致波特率错误。果然看了code果然是这个原因。连示波器都不需要看了。 由于F429的主频为180M,而F407的主频为168M导致的原因。
[单片机]
学习STM32F407入门后的感受
我之前在了解OpenCL的时候,看过一本书里面介绍了通用处理器和专用处理器的区别,以及为什么CPU会发展到多核心。这些知识在我学习STM32开发的时候呼应上了。那本书上写道,CPU分为专用和通用的。我的理解是比如路由器中的CPU只需要数据交换,就属于专用的CPU。而我们平时家用的英特尔和AMD的CPU属于通用处理器。使用通用CPU来处理数据交换,当然是可以使用的。只不过有些电路一定使用不到。这些电路白白花钱,浪费增加成本了。因为路由器只是交换数据不用做其他用途。所以,专门的用途要使用专门的的处理器。那么,不知道读者你,还有没有这样的疑问?为什么CPU要分出许多核心,难道不能做出一个很强的单核心CPU吗?那本书中也给出了回答。一个处
[单片机]
UCOSII在STM32F407上的移植
1、ucosii移植准备工作 1.1准备基础工程: 移植的时候需要一个基础工程,为了方便起见我们就选取跑马灯实验,作为ucossii移植的基础工程。 1.2Ucossii源码: 1)Micrium官网下载 2)开发板光盘自带 2、Ucossii移植步骤 1)step1 在基础工程文件夹中先建立UCOSII文件夹,然后在基础工程中UCOSII下建立相应的文件夹:CONFIG、CORE和PORT。 2)step2 向core文件夹中添加文件, 3)step3 向CONFIG文件夹中添加文件, 4)step4 向PORT文件件中添加文件, 5)step5 将Ucosii源码添加到工程中,打开工程,选择 新建三个分组:
[单片机]
STM32F407 基本定时器配置输出PWM方波
介绍STM32F407定时器PWM波形输出配置方式。 通过逻辑分析采集波形数据进行可视化显示对比。 【1】定时器PWM功能介绍 STM32F4 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达4路的PWM输出! 【2】PWM波形输出通道介绍 ** 定时器3的硬件PWM通道:PA6 PA7 PB0 PB1** 下面截图是介绍定时器3通道的复用IO口模式配置方式 【3】配置PWM波形输出代码示例 在工程中增加pwm.c文件,写入以下代码 #include pwm.h
[单片机]
STM32F407 GPIO口输入配置配置步骤
介绍 STM32 F407新建 寄存器 工程流程,介绍输入模式的配置方式,以按键为例完成按键输入 检测 。 【1】F407建工程所需依赖文件 【2】新建工程 【3】分析KEY按键 硬件 原理图 【4】编写KEY按键驱动代码 查看数据手册: key.c文件代码如下: #include key.h /* 函数功能:按键初始化配置 硬件连接: KEY0 --- PE4 按下为低电平 KEY1 --- PE3 按下为低电平 KEY2 --- PE2 按下为低电平 KEY_UP-- PA0 按下为高电平 */ void KEY_Init(void)
[单片机]