查看: 68|回复: 1

[原创] 基于 RT1170 的 FreeRTOS + LWIP DHCP 工程及 TCP 客户端实现

[复制链接]

该用户从未签到

740

主题

6399

帖子

0

超级版主

Rank: 8Rank: 8

积分
26363
最后登录
2025-11-21
发表于 5 天前 | 显示全部楼层 |阅读模式
基于 RT1170 FreeRTOS + LWIP DHCP 工程及 TCP 客户端实现
一、项目背景
在工业控制、物联网网关等嵌入式网络应用中,NXPi.MX RT1170 系列处理器因其高性能和丰富的外设接口,成为很多用户的选择。本文介绍基于 MIMXRT1170 平台,构建了一个使用FreeRTOS LWIP 协议栈的网络工程,实现以下功能:
·      DHCP 自动获取IP 地址,简化网络配置;
·      TCP 客户端功能,用于与远程服务器进行可靠通信。
为了验证嵌入式TCP 客户端的功能,我们使用Python 编写了一个简单的TCP Echo 服务器,运行在 PC端,并与RT1170 客户端进行交互。
下面简单介绍一下LWIPDHCPTCP协议,感兴趣的同学也可以通过恩智浦MIMXRT1170-EVKB开发板,以及配套的SDK库例程做开发验证。
二、LWIP DHCP 简介
LWIPLightweightIP ,顾名思义,它是一种轻量级的IP协议栈,是专为嵌入式系统设计的开源 TCP/IP 协议栈,其特点包括如下:

  • 占用资源少,适合     RAM ROM     受限的系统;
  • 支持     IPv4/IPv6TCPUDPDHCPDNS 等多种协议;
  • 可与     FreeRTOS 集成,支持多线程。
DHCP(动态主机配置协议) 允许设备在启动时自动获取IP 地址、网关、DNS 等信息,避免手动配置。LWIP 中的 DHCP 模块通过状态机实现自动分配流程:

  • DHCP_DISCOVER:客户端广播请求;
  • DHCP_OFFER:服务器响应;
  • DHCP_REQUEST:客户端确认;
  • DHCP_ACK:服务器确认分配。
本文介绍的RT1170工程中,只需在初始化时启用DHCPLWIP 会自动完成 IP 的分配。
三、PythonTCP 服务器实现
为了测试RT1170 TCP 客户端,我们PC端编写了一个简单的 Python TCP 服务器(TCP Server)代码,如下:
Picture1.png

用于监听客户端连接并进行简单的回显通信。核心逻辑如下:

  • Socket     创建与配置
  • 绑定地址和端口
  • 进入监听状态
  • 连接处理循环
  • 数据收发逻辑
在连接会话中,服务器通过recv(1024) 接收客户端发送的数据(最大1024 字节)。
如果接收到数据,打印解码后的内容,并通过sendall() 回传带有 Echo:前缀的响应,实现回显功能。
如果客户端断开连接或发生ConnectionResetError,服务器捕获异常并关闭连接。
  四、TCP 客户端实现
TCP 是一种面向连接的可靠传输协议,适用于需要数据完整性和顺序的场景。TCP客户端通常包括以下步骤:

  • 创建     socket
  • 连接服务器;
  • 发送数据;
  • 接收响应;
  • 关闭连接。
RT1170 工程中,TCP 客户端任务通常作为 FreeRTOS 的一个独立线程运行,确保网络通信的实时性和稳定性。
硬件环境搭建:
·      MIMXRT1170-EVKB开发板
·      网络线 采用RJ45 标准接头
·      网线连接MIMXRT1170-EVKB开发板1G ENET口,即J4
软件搭建
IDEMCUXPressoIDE  V25.6
SDK: SDK_2.x_MIMXRT1170-EVKB 25.09.00
导入SDK demo工程“evkbmimxrt1170_lwip_dhcp_freertos_cm7
添加代码如下:
在 DHCP 协议中,BOUND 状态表示客户端已成功获取并应用 IP 地址及相关网络参数,网络配置处于稳定状态。在 print_dhcp_state() 函数中,当检测到 DHCP 状态切换至 BOUND 时,系统会打印当前网络配置(IPv4 地址、子网掩码、网关),并在首次进入该状态时创建 TCP 客户端任务,以便后续进行应用层通信。
Picture2.png

tcp_client_task任务实现了一个典型的TCP 客户端通信逻辑:在成功连接服务器后,TCP客户端进入循环,周期性发送测试字符串并接收服务器响应,处理异常情况并在通信结束后释放资源。该设计体现了嵌入式网络应用的基本模式,结合FreeRTOS 任务管理和Socket API,保证了通信的稳定性和系统资源的合理使用。
Picture3.png                                     
Picture4.png



五、基于开发板验证结果
下图为MIMXRT1170-EVKB开发板的连接图:
pic.jpg
在PC端运行TCP服务端脚本文件后,显示Log如下:
Picture5.png    
运行MIMXRT1170-EVKB开发板,显示Log如下:
Picture6.png
本文基于 NXPi.MX RT1170 平台,构建了一个集成FreeRTOS LWIP 的嵌入式网络工程,实现 DHCP 自动获取 IP TCP 客户端通信功能,并通过 Python TCP Echo 服务器进行验证,该方案体现了嵌入式网络应用的基本模式。



回复

使用道具 举报

  • TA的每日心情
    开心
    2025-10-11 10:53
  • 签到天数: 1506 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    97

    主题

    4703

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    10142
    最后登录
    2025-11-19
    发表于 3 天前 | 显示全部楼层
    还是FreeRTOS是嵌入式RTOS的主力
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-11-22 03:10 , Processed in 0.078263 second(s), 22 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表