【LWIP】stm32用CubeMX(6.4版)配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分)

2023-11-10

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这是我写的第一篇博客,欢迎大家给点鼓励和提出建议!
本人由于理想和爱好,辞去土木工作,于不到一个月前入职某科技公司开始从事嵌入式,专业能力和刚毕业的大学生一样都是很薄弱的。然后被分配到了关于stm32网络方面的工作,经过两个星期的苦学,从一个对cubeMX、网络和LWIP都是零基础的新手学会了LWIP和网络的基础原理,能用CubeMX对LWIP进行相关的配置,还能相互通信。
这个过程真的花了超多时间踩坑!! 必须感叹一下网上很多教程对LWIP和网络的新手真的不友好,至少我都没成功过,我相信很多新手也很苦恼这个,于是我希望这个手把手配置教学可以尽我一点绵薄之力帮助到广大新手!(该教程我在其他的板子上也进行过测试,也是没问题的,放心好了!)
本章是操作部分,让和我一样的新手们先把东西搞出来,毕竟实践是检验真理的唯一标准,只要能搞出效果,之后的研究都好说!理论部分等我整理出来会陆陆续续开始上传,希望和广大爱好者一同进步!
本篇博客我也录制了操作视频,欢迎观看和提出建议!【三】STM32+LWIP 0基础 小白90分钟快速入门 (初次实战)

零、更新(2022.08.07)

1、已更新测试F207+DP83848也能使用该方法
2、已更新STM32配置为服务器端的办法
3、本程序适用于CubeMX6.4!!!
本程序适用于CubeMX6.4!!!
本程序适用于CubeMX6.4!!!
有人反馈6.5配置不一样,确实不一样,请暂时使用6.4配合我的博客!!!
4、补加PHY芯片复位步骤

一、实验平台

我用一块野火的F407板子进行实验,以太网卡PHY层芯片是LAN8720。(已测试DP83848芯片也能使用该方法)

二、手把手全程配置步骤

1.配置电脑环境

先得配置自己的电脑的IP为固定,并且关闭防火墙。
在这里插入图片描述在这里插入图片描述

2.配置cubeMX

打开CubeMX选择F407芯片。
由于没有使用系统,所以配置为systick就行了(如果有系统,就要使用定时器)
在这里插入图片描述

然后配置ETH,这里选择RMII,因为LAN8720只支持RMII,也只有24个引脚。然后引脚配置按实际的来就行。
在这里插入图片描述

然后是这里的PHY Address要根据芯片的PHYAD引脚的实际连接来配置,这块板子上LAN8720的PHYAD引脚是悬空的,由于这根引脚内部带一个弱下拉,所以我这儿就选择0。
在这里插入图片描述

然后这里的高级设置,由于cubeMX已经有了LAN8742和DP83848主流的两种芯片的默认配置,我这芯片是LAN8720,选LAN8742也能用,前半部分是通用的,后面哪些如果用的是不同的芯片,就要看手册配置了。
在这里插入图片描述
在这里插入图片描述

然后是配置LWIP。使能LWIP,为了方便,把DHCP关了,我自己配置IP、掩码和网关(我这里是网线直连,网关无所谓),这里用的是TCP,就把UDP关掉。
在这里插入图片描述

为了方便调试,按实际板子上的接线,打开串口。
在这里插入图片描述

由于我这块板子上LAN8720的接线是用了25M晶振然后配置LAN8720内部锁相环自己倍频 出50M的时钟,所以我时钟配置直接默认就好了,无所谓。需要注意一点,RMII必须要由50M时钟,如果没用自己的晶振,就要用MCO给它提供50M时钟。
在这里插入图片描述

然后在这里选择输出MDK代码
在这里插入图片描述

为了方便添加自己的代码,我们勾上这个,尽可能的分开这些代码。
在这里插入图片描述

3.配置MDK(Keil5)

打开代码,我们要先配置MDK(Keil5)
这个C库一定要勾选!
在这里插入图片描述

为了代码编译得快一点,我们把这两个关掉。

在这里插入图片描述
Reset and run勾上,常规操作了,主要给新手看。

在这里插入图片描述
主循环中加入这个函数,这样就可以试试能不能ping通了!
编译!下载!
在这里插入图片描述

在PHY层芯片初始化(GPIO、CLOCK、NVIC和传输模式配置)之前加入一个复位!其实就是连接PHY芯片复位引脚的那个GPIO拉低拉高一下。
在这里插入图片描述

让我们来ping一下。果然ping通了!
在这里插入图片描述

为了使用串口调试程序,打印一些信息,我们把串口重定向(这里很奇怪,如果不进行重定向,就算你无意使用串口,也无法用网络发送信息)

在这里插入图片描述

在main.h中也添加stdio.h,这是为了能各个程序中使用printf打印信息。再在main函数中添加一个printf,测试一下串口,这样串口也能正常使用了!
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.配置TCPclient通信程序

接下来就要添加和TCPclinet通信的代码了!
我们新建两个文件,一个是tcpclient.c和tcpclient.h。

tcpclinet.c代码如下

#include "lwip/netif.h"
#include "lwip/ip.h"
#include "lwip/tcp.h"
#include "lwip/init.h"
#include "netif/etharp.h"
#include "lwip/udp.h"
#include "lwip/pbuf.h"
#include <stdio.h>	
#include <string.h>
#include "main.h"




static void client_err(void *arg, err_t err)       //出现错误时调用这个函数,打印错误信息,并尝试重新连接
{
  printf("连接错误!!\n");
	printf("尝试重连!!\n");
  
  //连接失败的时候释放TCP控制块的内存
	printf("关闭连接,释放TCP控制块内存\n");
  //tcp_close(client_pcb);
	  
  
  //重新连接
	printf("重新初始化客户端\n");
	TCP_Client_Init();
	
}


static err_t client_send(void *arg, struct tcp_pcb *tpcb)   //发送函数,调用了tcp_write函数
{
  uint8_t send_buf[]= "我是客户端,是你的好哥哥\n";
  
  //发送数据到服务器
  tcp_write(tpcb, send_buf, sizeof(send_buf), 1); 
  
  return ERR_OK;
}

static err_t client_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
  if (p != NULL) 
  {        
    /* 接收数据*/
    tcp_recved(tpcb, p->tot_len);
      
    /* 返回接收到的数据*/  
    tcp_write(tpcb, p->payload, p->tot_len, 1);
      
    memset(p->payload, 0 , p->tot_len);
    pbuf_free(p);
  } 
  else if (err == ERR_OK) 
  {
    //服务器断开连接
    printf("服务器断开连接!\n");
    tcp_close(tpcb);
    
    //重新连接
    TCP_Client_Init();
  }
  return ERR_OK;
}

static err_t client_connected(void *arg, struct tcp_pcb *pcb, err_t err)
{
  printf("connected ok!\n");
  
  //注册一个周期性回调函数
  tcp_poll(pcb,client_send,2);
  
  //注册一个接收函数
  tcp_recv(pcb,client_recv);
  
  return ERR_OK;
}


void TCP_Client_Init(void)
{        
	struct tcp_pcb *client_pcb = NULL;   //这一句一定要放在里面,否则会没用
  ip4_addr_t server_ip;     //因为客户端要主动去连接服务器,所以要知道服务器的IP地址
  /* 创建一个TCP控制块  */
  client_pcb = tcp_new();	  

  IP4_ADDR(&server_ip, DEST_IP_ADDR0,DEST_IP_ADDR1,DEST_IP_ADDR2,DEST_IP_ADDR3);//合并IP地址

  printf("客户端开始连接!\n");
  
  //开始连接
  tcp_connect(client_pcb, &server_ip, TCP_CLIENT_PORT, client_connected);
	ip_set_option(client_pcb, SOF_KEEPALIVE);	
	
	printf("已经调用了tcp_connect函数\n");
  
  //注册异常处理
  tcp_err(client_pcb, client_err);
	printf("已经注册异常处理函数\n");	
}

然后把tcpclient.c加入工程中。

然后是tcpclient.h的代码

#ifndef _TCPCLIENT_H_
#define _TCPCLIENT_H_

#define TCP_CLIENT_PORT 5001

void TCP_Client_Init(void);

#endif

为了在主函数中调用TCP_Client_Init();(初始化TCP客户端程序,加入这个就能通信了,不用加入其他代码到主循环里) ,所以在main.h中加入#include “tcpclient.h”
在这里插入图片描述

再把这个加入到主循环前,这样客户端发送信息的功能就配置好了
在这里插入图片描述

由于我们配置的cubeMX只配置了板子的IP,但板子作为客户端,是要去主动连接PC的,所以我们要把目标地址也放入程序,我们姑且把程序放在main.h中吧,如果你要方便管理,可以把这些东西统一放在其他地方。
在这里插入图片描述

编译!下载!然后打开串口和网络助手,端口号输入5001。
我们可以看到串口打印出信息,网络助手也不断收到消息。成功了!

在这里插入图片描述
在这里插入图片描述

5.配置TCPserver通信程序

接着步骤3,我们创建两个文件。一个是tcpserver.c,另一个是tcpserver.h。

tcpserver.c代码如下

#include "tcpserver.h"
#include "lwip/netif.h"
#include "lwip/ip.h"
#include "lwip/tcp.h"
#include "lwip/init.h"
#include "netif/etharp.h"
#include "lwip/udp.h"
#include "lwip/pbuf.h"
#include <stdio.h>	
#include <string.h>


static err_t tcpecho_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{                                   //对应接收数据连接的控制块   接收到的数据   
  if (p != NULL) 
  {        
	//int a = 666;
	/* 更新窗口*/
	tcp_recved(tpcb, p->tot_len);     //读取数据的控制块   得到所有数据的长度   
			
    /* 返回接收到的数据*/  
  //tcp_write(tpcb, p->payload, p->tot_len, 1);

	uint8_t send_buf1[]= "我收到了你的信息!是";
	uint8_t send_buf2[]= "吗?\n";	
	tcp_write(tpcb, send_buf1, sizeof(send_buf1), 1);
	tcp_write(tpcb, p->payload, p->tot_len, 1);	
	tcp_write(tpcb, send_buf2, sizeof(send_buf2), 1);	
    
  memset(p->payload, 0 , p->tot_len);
  pbuf_free(p);
    
  } 
  else if (err == ERR_OK)    //检测到对方主动关闭连接时,也会调用recv函数,此时p为空
  {
    return tcp_close(tpcb);
  }
  return ERR_OK;
}

static err_t tcpecho_accept(void *arg, struct tcp_pcb *newpcb, err_t err) //由于这个函数是*tcp_accept_fn类型的
																																					//形参的数量和类型必须一致
{     

  tcp_recv(newpcb, tcpecho_recv);    //当收到数据时,回调用户自己写的tcpecho_recv
  return ERR_OK;
}

void TCP_Echo_Init(void)
{
  struct tcp_pcb *server_pcb = NULL;	            		
  
  /* 创建一个TCP控制块  */
  server_pcb = tcp_new();	
	printf("创建了一个控制块\n");
  
  /* 绑定TCP控制块 */
  tcp_bind(server_pcb, IP_ADDR_ANY, TCP_ECHO_PORT);       
	printf("已经绑定一个控制块\n");

  /* 进入监听状态 */
  server_pcb = tcp_listen(server_pcb);
	printf("进入监听状态\n");	

  /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */	
  tcp_accept(server_pcb, tcpecho_accept);  //侦听到连接后,回调用户编写的tcpecho_accept 
																	  //这个函数是*tcp_accept_fn类型的
}

然后把文件添加入工程

tcpserverc.h代码如下

#ifndef _TCPECHO_H_
#define _TCPECHO_H_

#define TCP_ECHO_PORT 5001

void TCP_Echo_Init(void);

#endif

接下来只要用类似步骤4一样添加头文件,再在主循环上方加一条 TCP_Echo_Init();
编译下载后,电脑上的网络助手配置为客户端,填入板子IP和端口号,连接成功,发送信息后会发现板子会返回相同的数据给网络助手。

当我们把客户端代码和服务器端代码都配置好时,STM32可以同时接收数据,也可以发送数据。
在这里插入图片描述


三、总结

学习LWIP这个过程实在是艰难,希望我的努力能帮到各位!第一篇博客多有不熟练,希望各位多留言互动。
本人新手,在座各位的水平一定比我高,希望能给我指出错误,提出建议,谢谢!
如果不能配置,或者丢图丢步骤,可以评论留言。我尽力而为。

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

【LWIP】stm32用CubeMX(6.4版)配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分) 的相关文章

  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • 网络空间安全女生就业,怎么学?

    我实验室的学长们基本都是以红队和复现为主 如果学校好点可能还有更多的选择 如果想在这个方向深入下去 推荐流程是先打两年CTF 把大概的技术方向摸一摸 大一的话 如果学校还不错 那就优先建议打好基础 包括C语言 Python一类 建议把CTF
  • 这些专利知识你知道吗?

    专利作为一种重要的知识产权保护形式 专利不仅成为了企业核心竞争力的重要组成部分 也成为了国家创新发展的重要支撑 专利是指国家专利主管机关授予发明创造申请人的一种专有权 这种专有权具有独占性 排他性和法律强制性 能够为持有者带来经济利益和竞争
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • 用栈实现队列(OJ中报错的处理)

    用栈实现队列 ERROR AddressSanitizer myQueueFree函数中栈的释放处现了问题 没有调用StackDestory而是直接free了 这个是栈初始化时 capacity与malloc申请的空间大小没有匹配 请你仅使
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 【安全】简单解析统一身份认证:介绍、原理和实现方法

    深入解析统一身份认证 介绍 原理和实现方法 导语 统一身份认证是什么 统一身份认证的原理 统一身份认证的实现 结语 导语 随着互联网的发展和各种在线服务的普及 用户在不同的应用和平台上需要进行多次身份验证 为了简化用户的登录和减少重复操作
  • 网工内推 | 上市公司同程、科达,五险一金,年终奖,最高12k*15薪

    01 同程旅行 招聘岗位 网络工程师 职责描述 1 负责职场 门店网络规划 建设 维护 2 负责网络安全及访问控制 上网行为管理和VPN设备的日常运维 3 负责内部相关网络自动化和系统化建设 4 优化与提升网络运行质量 制定应急预案 人员培
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d

随机推荐

  • 程序员模式

    在我的心中 程序员是一个做事有计划 有思想 具有高超技术 解决能力的艺术家 自己作为一个程序员 自愧不能达到如上的标准 看到过一个程序员曾经这样自嘲 一个只有半瓶子水晃晃荡荡的程序员 这些年来一直从事开发的工作 稀里糊涂跑过许多城市 流浪过
  • Oracle环境变量配置步骤

    Oracle11g环境变量配置 在做开发的过程中 几次重装系统安装配置过Oracle 本篇博客就对oracle配置环境变量的细节做一次记录和分享 三个模块 Oracle11g的安装 instantclient 11 2客户端的安装 PLSQ
  • waiting for ZeroTier system service,

    查了好几个回答 waiting for ZeroTier system service这个错误是之前装过但是卸载后未删除干净造成的 我是卸载后删除了下边四个路径下的Zero Tier文件夹 然后重装就好了 Program Files Pro
  • Elasticsearch7.17 四 : ElasticSearch集群架构

    文章目录 ElasticSearch集群架构 核心概念 节点 分片 Primary Shard Replica Shard 集群状态和分片设定 集群搭建 安装Cerebro客户端 安装kibana ES安全认证 集群内部安全通信 开启并配置
  • Wireshark应用

    1 过滤IP 如来源IP或者目标IP等于某个IP 例子 ip src eq 192 168 1 107 or ip dst eq 192 168 1 107 或者 ip addr eq 192 168 1 107 都能显示来源IP和目标IP
  • ecshop缓存清理-限制或禁用ECShop缓存

    ECSHOP的缓存存放在templates caches 文章夹下 时间长了这个文件夹就会非常庞大 拖慢网站速度 还有很多情况我们不需要他的缓存 本文介绍禁用ECSHOP缓存的方法 ECSHOP的缓存有两部分 一部分是SMARTY的页面缓存
  • Unity 获取UI(RectTransform)四个角的屏幕坐标

    获取UI RectTransform 四个角的屏幕坐标 Vector3 corners new Vector3 4
  • oj2016: C语言实验——打印金字塔

    问题描述 输入n值 打印下列形状的金字塔 其中n代表金字塔的层数 作者 何知令 发表时间 2017年2月23日4 输入 输入只有一个正整数n 输出 打印金字塔图形 其中每个数字之间有一个空格 代码 问题描述 输入n值 打印下列形状的金字塔
  • 小m序列的verilog实现

    verilog实现及仿真 m sequence v 以x8 x4 x3 x2 1为例 module m sequence input sclk input rst n output wire m seq parameter POLY 8 b
  • 【每日一题】补档 ABC309F - Box in Box

    题目内容 原题链接 给定 n n n 个箱子 问是否存在一个箱子 x x x 是否可以放到另一个箱子 y
  • Java简单实现斗地主洗牌、发牌功能

    需求 在启动游戏房间的时候 应该提前准备好54张牌 完成洗牌 发牌 牌排序 逻辑 分析 当系统启动的同时需要准备好数据的时候 就可以用静态代码块了 洗牌就是打乱牌的顺序 定义三个玩家 依次发出51张牌 给玩家的牌进行排序 拓展 输出每个玩家
  • 如何编写测试用例?流程及5大编写步骤

    编写测试用例的5个步骤 1 选择测试工具 2 确定测试场景 3 编写测试用例 4 确认测试用例 5 组织测试用例 但在编写测试用例之前 测试人员需要充分了解软件的需求和规格 以确保测试用例能够覆盖所有的功能和场景 测试用例是一种用于验证软件
  • python 【组成最大数】

    组成最大数 小组中每位都有一张卡片 卡片上是6位内的正整数 将卡片连起来可以组成多种数字 计算组成的最大数字 输入描述 号分割的多个正整数字符串 不需要考虑非数字异常情况 小组最多25个人 输出描述 最大的数字字符串 示例1 输入 22 2
  • 2023年武汉市中等职业学校技能大赛 “网络搭建与应用”

    2023年武汉市中等职业学校技能大赛 网络搭建与应用 一 竞赛内容分布 网络搭建及应用 竞赛共分二个部分 其中 第一部分 企业网络搭建部署项目 占总分的比例为50 第二部分 企业网络服务配置及应用项目 占总分的比例为50 项目背景及网络拓扑
  • OpenCV函数cvWaitKey(k)简介

    作者本人的开发环境为VS的MFC构架 结合OpenCV1 0进行图像的处理 可能很多像作者本人一样的初始开发程序员都会用到cvWaitKey 但是对cvWaitKey 的理解一知半解 在具体开发中会由此产生一些困惑 在查询了一些资料后 将资
  • Java实现文件分片上传

    为什么需要文件分片上传 大文件上传中断 假如我们有一个5G的文件 上传过程中突然中断我们该怎么办 上文件上传响应时间长 假如我们有个10G的文件 单次上传时间长 用户体验长 该怎么办 大文件上传重复上传 某些大文件 我们已经上传过了 我们不
  • JavaScript基础知识总结(6张思维导图)

    以下导图均为学习pink老师js基础视频时 自主整理的 有不足的地方 欢迎大家多多指出
  • 如何正确的进行网站入侵渗透测试

    大家都知道渗透测试就是为了证明网络防御按照预期计划正常运行而提供的一种机制 而且够独立地检查你的网络策略 一起来看看网站入侵渗透测试的正确知识吧 简单枚举一些渗透网站一些基本常见步骤 一 信息收集 要检测一个站首先应先收集信息如whois信
  • FastDB简单介绍及实例(Linux)

    本文内容主要是通过学习官网 博客及阅读官网demo做出的总结 FastDB是一个内存数据库 通过把数据加载到内存中实现对数据的操作 相比于传统的数据库 操作的速度更快 但是存在一个缺点就是使用FastDB数据库的应用程序都必须运行在同一台主
  • 【LWIP】stm32用CubeMX(6.4版)配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 零 更新 2022 08 07 一 实验平台 二 手把手全程配置步骤 1 配置电脑环境 2 配置cubeMX 3 配置MDK Keil5 4 配置TCPcli