stm32+w5500+一根网线连接电脑,连接公网服务器

只是简单的连接,这里用的服务器是合宙的

网站如下:合宙 TCP/UDP web工具

好网站工具:开发者工具箱 - Coding.Tools

由于我大二的时候,没有好好学习计网,所以很多都忘记或者不会,公网和内网我都混淆了。

因为我没有路由器,只有一根网线,所以,我只连接上,然后发现只能连接本地的,

我本地是

192.168.10.200;

192.168.10.1;

255.255.255.0;

所以我就,在代码里,

//uint8_t ip[4] = {192, 168, 10,9};
//uint8_t ga[4] = {192, 168, 10,1};
//uint8_t sub[4] = {255, 255, 255, 0};
//uint8_t mac[6] = {110, 120, 13, 140, 150, 16};

这里可以连接我本地的,

但是我想连接公网的,就是那个网站的,所以我就当真的也改了改:

//uint8_t ip[4] = {112, 125, 89,10};
//uint8_t ga[4] = {112, 125, 89,1};
//uint8_t sub[4] = {255, 255, 255, 0};
//uint8_t mac[6] = {110, 120, 13, 140, 150, 16};

结果就是ping 不通,连不上,哈哈哈哈,

步骤1:启用网络共享

  1. 确保电脑已通过Wi-Fi或蜂窝网络连接到互联网。

  2. 右键点击 “开始菜单” → “网络连接”

  3. 找到当前连接互联网的网络接口(如Wi-Fi),右键选择 “属性” → “共享”

    • ✅ 允许其他网络用户通过此计算机的Internet连接来连接

    • 家庭网络连接:选择与W5500连接的以太网接口(如“以太网 2”)。

    • 点击 确定

步骤2:配置电脑的以太网接口(连接W5500的网口)

  1. 右键点击与W5500连接的以太网接口 → “属性” → “Internet协议版本4 (TCP/IPv4)” → “属性”

  2. 设置静态IP(供W5500作为网关):

    • IP地址:192.168.137.1(Windows共享网络的默认网关)

    • 子网掩码:255.255.255.0

    • 其他字段留空,点击 确定

步骤3:关闭防火墙(临时测试)

  1. 打开 “控制面板” → “Windows Defender 防火墙” → “启用或关闭防火墙”

  2. 暂时关闭防火墙(测试完成后再恢复)。

(2) W5500网络配置

修改代码中的网络参数,确保与电脑共享的子网一致:

// W5500的配置(需与电脑共享的子网匹配)
uint8_t ip[4] = {192, 168, 137, 2};   // 例如 192.168.137.2(未被占用的IP)
uint8_t ga[4] = {192, 168, 137, 1};   // 网关(电脑的以太网IP)
uint8_t sub[4] = {255, 255, 255, 0};  // 子网掩码
uint8_t mac[6] = {0x00, 0x08, 0xDC, 0x12, 0x34, 0x56}; // 唯一MAC地址

stm32+w5500,用的是spi通信,这里不过多阐述,还有w5500的官方驱动,网上有教程,下面的代码只是简单的连接

#include "Int_w5500.h"



//uint8_t ip[4] = {192, 168, 10,9};
//uint8_t ga[4] = {192, 168, 10,1};
//uint8_t sub[4] = {255, 255, 255, 0};
//uint8_t mac[6] = {110, 120, 13, 140, 150, 16};

// W5500的配置(需与电脑共享的子网匹配)
uint8_t ip[4] = {192, 168, 137, 2};   // 例如 192.168.137.2(未被占用的IP)
uint8_t ga[4] = {192, 168, 137, 1};   // 网关(电脑的以太网IP)
uint8_t sub[4] = {255, 255, 255, 0};  // 子网掩码
uint8_t mac[6] = {0x00, 0x08, 0xDC, 0x12, 0x34, 0x56}; // 唯一MAC地址


//uint8_t ip[4] = {112, 125, 89,10};
//uint8_t ga[4] = {112, 125, 89,1};
//uint8_t sub[4] = {255, 255, 255, 0};
//uint8_t mac[6] = {110, 120, 13, 140, 150, 16};
 
extern void user_wizchip_reg_func(void);

void Inf_W5500_Reset(void)
{
    // 拉低重置引脚 => 超过500us
    HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_RESET);
    HAL_Delay(5);

    HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_SET);
    HAL_Delay(5);
}

void Int_W5500_Init(void)
{
	int a=0;
    // 1. 初始化驱动
    // MX_SPI2_Init();

    // 2. 软重启芯片
    Inf_W5500_Reset();

    // 3. 注册函数
    user_wizchip_reg_func();

    // 4. 设置W5500参数 => ip地址  mac地址 网关 子网掩码
    // 封装完整的API => set寄存器名称=> 直接写入
    // get寄存器名称 => 直接读取
    // 4.1 设置网关
    setGAR(ga);
    // 4.2 设置子网掩码
    setSUBR(sub);
    // 4.3 设置mac地址
    setSHAR(mac);
    // 4.4 设置ip地址
    setSIPR(ip);

    debug_println("11111w5500初始化完成");
	a=1;
}

// 选择使用的socket 0-7
#define SN 0
#define CLIENT_PORT 8080


//uint8_t SERVER_IP[4] = {192, 168, 10,200};
//#define SERVER_PORT 777

uint8_t SERVER_IP[4] = {112, 125, 89,8};
#define SERVER_PORT 42339
CommmonStatus Int_W5500_Start_TCP_Client(void)
{
    // 0. 判断当前的状态
    uint8_t sn_sr = getSn_SR(SN);
    // 1. 创建客户端
    if (sn_sr == SOCK_CLOSED)
    {
        // 资源被释放 能够用来创建客户端
        int8_t r = socket(SN, Sn_MR_TCP, CLIENT_PORT, 0);
        if (r == SN)
        {
            // 创建socket成功 初始化客户端成功
            debug_printf("创建socket成功");
        }
        else
        {
            debug_printf("创建socket失败");
        }
    }
    // 2. 连接服务端
    else if (sn_sr == SOCK_INIT)
    {
        // 主动连接服务端
        int8_t c_r = connect(SN, SERVER_IP, SERVER_PORT);
        if (c_r == SOCK_OK)
        {
            debug_println("连接服务端成功");
        }
        else
        {
            debug_println("连接服务端失败");
        }
    }
    // 3. 等待进入ES状态
    else if (sn_sr == SOCK_ESTABLISHED)
    {
        // 创建客户端成功 连接服务端成功
        return COMMON_OK;
    }
    // 4. 如果断开 => 关闭客户端
    else if (sn_sr == SOCK_CLOSE_WAIT)
    {
        // 断开连接
        close(SN);
    }

    return COMMON_ERROR;
}

void Int_W5500_Send_Data(uint8_t data[], uint16_t data_len)
{
    // 健壮性判断
    if (data_len == 0)
    {
        return;
    }

    // 创建客户端等待连接服务端成功 => 才能发送数据
    while (Int_W5500_Start_TCP_Client() != COMMON_OK)
    {
        HAL_Delay(10);
    }

    // 只有当前SN的状态为ES的时候  才能发送数据
    // 0. 判断当前的状态
    uint8_t sn_sr = getSn_SR(SN);
    if (sn_sr == SOCK_ESTABLISHED)
    {
        // 才能发送数据
        send(SN, data, data_len);
    }
}

啦啦啦,一定不会贪玩啦,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值