STM32 原子探索者基于HAL库多连接LWIP tcp 服务器

2023-10-09 17:59

本文主要是介绍STM32 原子探索者基于HAL库多连接LWIP tcp 服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32 原子探索者 基于HAL库多连接LWIP tcp 服务器

1、通过原子探索者407板子做的样例;
2、通过STM32CUBEMX 生成程序模板;
3、修改lwip部分参数;
4、添加多连接TCPserver;

1、通过CubeMx生成程序模板

1)添加FREERTOS定时器
在这里插入图片描述
2)添加串口1用来做调试输出
在这里插入图片描述
3)网卡的添加以及lwip的添加见其他文档,其中ip地址为192.168.12.97
4)添加freeRTOS并修改参数:增加os的堆内存大小以及允许使用定时器、扩充默认任务的堆栈大小
在这里插入图片描述
允许使用定时器,定时器的定义在后面程序里。
在这里插入图片描述
默认任务是用来启动lwip的,所以需要增加堆栈容量
在这里插入图片描述

5)修改LWIP配置
修改内存堆的大小,这里用8k,只要可以,尽量大
在这里插入图片描述
6)修改项目参数如下:
在这里插入图片描述

以上做完后,生成项目模板,我这里用keil进行编辑。

2、添加tcpserver文件

tcpserver.c 文件内容:
文件内添加了一个定时器,在连接没有传输的时候,关闭连接,这里默认为10秒。

#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"
#include "lwip.h"
#include "lwip/api.h"
#include "lwip/sockets.h"
#include "string.h"
#include "timers.h"
#include "tcpServer.h"#define TCP_SERVER_RX_BUFSIZE 100
#define	MAX_CONN_TASK					5
#define TCP_SERVER_PORT				60000	//定义tcp server的端口
#define	TIMEOUT_CONN					10		//TCP客户端连接空闲超时,单位秒,超过这个时间没有数据传送,则连接中断static  osThreadId myTcpServerTaskHandle;
static TimerHandle_t childTaskTimer;struct childTaskItem_t
{struct netconn *conn;										//客户端的连接osThreadId myTaskHandle;								//子任务句柄uint8_t  dataBuf[TCP_SERVER_RX_BUFSIZE];	//用来接受数据的缓冲uint16_t childTaskTimerNum;							//空闲时间,=1时,系统自动删除该任务,并将此位置0,每个定时器循环该数字--;为0时标识没有该任务uint8_t myId;														//子任务序号,用于自己调试辨识,正式运行可以不用
};struct childTaskStat_t
{struct  childTaskItem_t childTaskItem[MAX_CONN_TASK];uint16_t childTaskNum;
};//子任务状态数据库,用来存储子任务的句柄以及连接
static  struct childTaskStat_t childTaskStat;/*接受数据处理函数,可以外部定义用来处理接受到的数据uint8_t *data:		数据指针,使用以后,需要释放内存uint32_t dataSize:数据的大小struct netconn *conn:传入的连接,可以通过这个连接发送数据*/
void LwipRecP(uint8_t *data,uint32_t dataSize,struct netconn *conn) 
{printf("rev data %d \r\n",dataSize);netconn_write(conn, data, dataSize, NETCONN_COPY

这篇关于STM32 原子探索者基于HAL库多连接LWIP tcp 服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174589

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu