STM32 基础系列教程 33 - Lwip_tcp_client

2023-11-08

前言

学习stm32 以太网接口使用,及LWIP使用,用LWIP快速实现一个TCP client网络通信功能, 学会基本LWIP的网络数据接收与发送功能,让初学者了解lwip(关于Lwip更多的功能介绍将会在后期的STM32 中级教程中介绍)。

 

示例详解

基于硬件平台: MCU 的型号是 STM32F407VGT6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的最小系统板原理图:

 

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

 

      1. 系统时钟树

 

 

 

 

 

      1. 网口配置

      1. RCC配置

      1. SYS配置

 

      1. Lwip配置(参数可保持默认,也可用静态IP方式,分别设置如下图)

 

      1. 引脚配置

 

      1. 中断配置(保持默认即可)

 

 

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

同时给工程加入我们事先准备好的tcp_echoclient.c文件并指定tcp_echoclient.h路径

在tcp_echoclient.h文件中设定TCP服务器的IP地址:

 

    1. 编译工程,下载代码,首先来看静态IP方式(设置的静态IP为192.168.99.206),电脑输入命令win+r,输入CMD 回车,再输入 ping 192.168.99.206 ,给果如下,说明我们的网络接口及LWIP已成功运行,注这里的静态IP地址(192.168.99.206)应跟据实验者的实际电脑ip地址来设(可用ipconfig /all 命令来查看PC的IP地址),只要设置成与PC在同一网段即可:

DHCP方式直接可从路由器设备列表中查看具体IP,可查看上一讲“STM32 基础系列教程 32 - Ethnet+Lwip”里的相关操作,因本次实验笔者使用的路由器有点问题,一直看不到设备列表中的设备,所以本次DHCP效果就不展示,大家按上一讲的步骤操作即可!

 

 

用TCP,UDP测试工具来测试一下TCP收发功能(本例是一个数据回显功能),相应的工具会在资料包中提供,打开软件,按下图所示步骤操作:

 

编译好程序,烧录代码,并运行程序(烧录时要选择烧录后复位并运行选项),出现如下图所示操作结果:发送什么,回应什么,说明我们的TCP收发功能正常,实验成功!!

 

 

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

 

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

下载|STM32基础系列教程33

 

关注十三公众号

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 基础系列教程 33 - Lwip_tcp_client 的相关文章

  • 定义新的套接字选项以在 TCP 内核代码中使用

    我正在尝试向 TCP 内核代码添加一些功能 在tcp input c 我希望我实现的代码仅在某些情况下运行 我想添加一个控制标志 可以从用户空间应用程序设置它 我 认为我 需要添加一个新的套接字选项 以便我可以完成以下操作setsockop
  • 套接字编程最佳实践?

    我正在设计一个文件同步应用程序 如 DropBox 客户端在端口 443 上与服务器保持持久的安全 SSL TCP 套接字 每当在客户端上创建 更改 删除文件时 包含相关数据的数据包就会通过套接字发送到服务器 服务器对其进行处理更新服务器上
  • IPv4 允许的最大 TCP/IP 网络端口号是多少?

    可以使用的最大端口号是多少 端口号是一个无符号 16 位整数 即 65535
  • 如何监控 TCP 连接的 cwnd 和 ssthresh 值? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望在通过套接字连接发送或接收数据包时确定这些值 有没有现有的工具可以做到这一点 The ss http linux die net m
  • 无法通过 ngrok ssh 进入远程 Linux

    远程Linux计算机位于内部网络中 没有公共IP地址 所以我安装了ngrok ngrok tcp 22 ngrok by inconshreveable Ctrl C 退出 在线隧道状态版本2 0 19 2 0 17网页界面http 127
  • TCP 代理:在后端不可用时保持连接

    在 Docker 设置的上下文中 我想使用类似大使的模式来允许某些容器 例如数据库服务器 正常重新启动 而不必重新启动所有依赖的容器 例如 Web 服务器 并且没有错误消息 因为 数据库服务器不可用 因此 我想知道 是否有一个 TCP 代理
  • 为什么在数据包输入时 skb_buffer 需要跳过 20 个字节才能读取传输缓冲区?

    我正在 Linux 中编写一个网络模块 我发现只有在从 skb 缓冲区跳过 20 个字节后才能提取 tcp 标头 即使 API 是 skb transport header 其背后的原因是什么 有人可以详细解释一下吗 传出数据包不需要同样的
  • Socat未关闭tcp连接

    I use socat 1 7 3 1 r0并在alpine 3 3linux服务器 socat d d d PTY link dev ttyFOOBAR echo 0 raw unlink close 0 TCP LISTEN 7000
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • Android TCP 连接最佳实践

    我正在开发一个需要 TCP 连接到 TCP 服务器的 Android 应用程序 用 Node js 编写 我的 Android TCP 客户端正在工作 可以来回发送消息 我的具体问题是 在 Android 中处理与服务器的 TCP 连接的最
  • Socket ReceiveAsync 合并数据包

    我打算通过套接字接收数据包 但由于它们是从发送方以高频率发送的 因此其中许多数据包被打包成一个byte array SocketAsyncEventArgs Buffer然后保存多个数据包 即使它们是单独发送的 使用验证wireshark
  • 使用 iPhone 作为热点时 TCP 连接无法正常工作

    我正在开发一个 iOS 应用程序 它通过 TCP 套接字连接到在 Android 上运行的服务器应用程序 为了找到第二个设备的 IP 我使用 UDP 请求并接收服务器的 IP 当我将它们连接到 Wi Fi 网络或使用 Android 设备作
  • 如何模拟客户端和服务器之间的套接字断开连接(在 Windows 上)?

    我已经实现了一种 心跳解决方案 我想看看在实际情况下网络 故障 时会发生什么 特别是当套接字上没有流量时发生这种情况 问题 我只有一台电脑 我在windows java上 我想简单地拔掉网线 停用网卡不会影响这两个进程 因为它们在同一个盒子
  • net.TCPConn 允许在 FIN 数据包后写入

    我正在尝试为一些服务器端代码编写单元测试 但我在确定关闭测试用例时遇到了困难 环回 TCP 连接似乎无法正确处理干净关闭 我在一个示例应用程序中重现了这一点 该应用程序按顺序执行以下操作 创建客户端和服务器连接 通过从客户端向服务器成功发送
  • PHP 上的多个 TCP 套接字请求

    是否可以使用 PHP 上的套接字服务器接受多个请求 并行 如果可以的话 怎样做 普通的 PHP 脚本无法接收多个请求 但如果你真的计划创建一个套接字服务器 作为 cmdline php 脚本启动 那么是的 这是可能的 调查http pear
  • 如何模拟 TCP/IP 错误?

    在多层应用程序上 我需要模拟各种 TCP IP 错误来测试一些重新连接代码 有谁知道我可以使用什么工具 基于 Windows 来实现此目的 谢谢 Scapy http secdev org projects scapy 允许您控制数据包的各
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • 无法分配请求的地址 - 可能的原因?

    我有一个由主服务器和分布式从服务器组成的程序 从属服务器向服务器发送状态更新 如果服务器在固定时间内没有收到特定从属服务器的消息 则会将该从属服务器标记为关闭 这种情况一直在发生 通过检查日志 我发现从站只能向服务器发送一个状态更新 然后永
  • 为什么 TCP 段中的 SYN 或 FIN 位会占用序列号空间中​​的一个字节?

    我试图理解这种设计背后的基本原理 我浏览了一些 RFC 但没有发现任何明显的东西 这并不是特别微妙 这样 SYN 和 FIN 位本身就可以被确认 因此如果丢失则可以重新发送 例如 如果连接关闭而没有发送更多数据 那么如果 FIN 没有发送任

随机推荐

  • 特斯拉Model 3 Key Card里的黑科技

    特斯拉Model 3给用户提供了三种解锁电动车的姿势 遥控钥匙 可选 需付费购买 手机APP蓝牙解锁 以及 Key Card 钥匙卡片 其中Key Card作为手机蓝牙钥匙的备份方案 以应对手机没电了 忘带了 APP故障 车机蓝牙故障等上不
  • Python实现逻辑回归(LogisticRegression)完整过程

    最近正在做的项目正好利用到了逻辑回归 所以正好系统的学习了下 本篇博文把自己的学习笔记 项目思路及代码都记录下来 它的计算原理很多网站和书籍都有介绍 就不在这班门弄斧了 主要还是记录自己如何实现 一 逻辑回归简介 Logistic Regr
  • matlab中未定义与 ‘cell‘ 类型的输入参数相对应的运算符 ‘+‘ 的解决方案

    在函数文件中写入以下内容 function re fun a b varargin if nargin 2 re a b elseif nargin 3 c varargin 1 re a b c else error wrong end
  • 排序法 C语言常考的十大排序法 数列、字符的排序

    通过对近各大试卷题型分析 总结出 对于数据排序的十大方法 希望对大家有所帮助 方法一 冒泡排序法 升序排序法 方法二 选择排序法 方法三 插入排序法 方法四 希尔排序法 Shell Sort 方法五 归并排序法 方法六 快速排序法 交换排序
  • 一文搞懂Python时间序列预测(步骤,模板,python代码)

    预测包括 数值拟合 线性回归 多元回归 时间序列 神经网络等等 对于单变量的时间序列预测 模型有AR MA ARMA ARIMA 综合来说用ARIMA即可表示全部 数据和代码链接 数据和Jupyter文件 以预测美国未来10年GDP的变换情
  • PyTorch指定GPU训练 CUDA_VISIBLE_DEVICES

    方法一 import os import torch os environ CUDA VISIBLE DEVICES 4 5 方法二 CUDA VISIBLE DEVICES 4 python py
  • FPGA零基础学习之Vivado-LED流水灯实验

    FPGA零基础学习之Vivado LED流水灯实验 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • QT播放音频方法

    首先需要包含的头文件包含 include
  • opencv 07 用Hausdorff距离做形状匹配(shape_example) vs2015

    01 资源 OpenCV自带的行人检测demo opencv samples cpp shape example cpp shape example cpp可以图形形状相似对比 通过判断Hausdorff距离的结果做出最匹配判断 Hausd
  • Schedule

    Part1背景 定时任务 在我们实际开发中经常会用到 比如 Linux 的 Corntab Django 的 Django celery Django corntab 等 但是这些工具和框架总有某些不合适的地方 比如不灵活 笨重等 今天我们
  • 【算法】模拟退火

    文章目录 1 模拟退火介绍 1 1模拟退火的可行性 1 2退火模型 2 详解退火 2 1退火过程 2 2各变量说明 2 2 1关于接收概率 3 退火模拟求根号n的值 4 洛谷POJ 2420 1 模拟退火介绍 模拟退火是模拟物理上退火方法
  • ionic修改控件内置class样式

    背景 使用ionic中控件 有时候他的样式不能满足实际开发需求 需要改改一些样式 ion datetime 时间控件 想修改一下默认的白色背景 修改后 代码 在variables scss文件中的root伪类中增加属性 root 修改时间控
  • 正在设定sun-java6-jre解决方法

    今天搭建一个linux的开发环境遇到一个很无解的问题 出现一个 正在设定 sun java6 jre 的界面 然后鼠标接盘都操作不了 还是惊叹网络的强大 在网上搜索到一个解决方案 才发现遇到问题特别时一个很无解的问题 要即使的上网搜索一下
  • 计算机图形学 期末复习 微课版 孔令德 六、自由曲线与曲面 期末复习

    重点 公式 连续性条件 参数连续性 0阶参数连续性 若两个相邻的曲线段在首末点相连接 C 0 1阶参数连续性 若两个相邻曲线段在相交点处有相同的一阶导数 C 1 2阶参数连续性 若两个相邻曲线段的方程在相交点处具有相同的一阶和二阶导数 C
  • 基于CCG算法的IEEE33配电网两阶段鲁棒优化调度matlab

    目录 1 前言 2基本内容 2 1 配网两阶段鲁棒模型 2 2 求解步骤 3部分程序 4程序结果 5程序链接 1 前言 鲁棒优化是电力系统研究的热点 而两阶段鲁棒和分布鲁棒研究就成为各类期刊 sci ei 核心 的宠儿 最简单的思路是通过改
  • unity3D塔防游戏-虚拟现实大作业-包含源程序、导出exe文件,游戏设计报告

    unity3d塔防游戏 下载链接在文末 点我下载资源 https download csdn net download weixin 43474701 35073702
  • franchisor and franchisee

    What is the difference between a franchisor and a franchisee The franchisor is the person or corporation that owns the t
  • SpringCloud(四)注册中心之Eureka

    SpringCloud 四 注册中心之Eureka 第一代 Spring Cloud 核心组件 从形式上来说 Feign一个顶三 Feign RestTemplate Ribbon Hystrix 常用的服务注册中心 Eureka Naco
  • 【ahk】映射按键到执行函数

    global zFuncCallPattern w IsFuncCallStr callFuncStr Return RegExMatch callFuncStr O zFuncCallPattern matchObj EvalStrArg
  • STM32 基础系列教程 33 - Lwip_tcp_client

    前言 学习stm32 以太网接口使用 及LWIP使用 用LWIP快速实现一个TCP client网络通信功能 学会基本LWIP的网络数据接收与发送功能 让初学者了解lwip 关于Lwip更多的功能介绍将会在后期的STM32 中级教程中介绍