STM32CubeMX V6.3.0 在STM32F407ZGT6(正点原子开发板)上实验5----TCP客户端

工具:正点原子的STM32F4探索者开发板。

准备:STLINK连接电脑和开发板。然后开发板上电,用一根网线连接开发板和路由器,电脑也连接到路由器上(有线或无线均可)。 然后用USB转miniUSB线连接电脑和开发板的串口1(注意接插件到串口1中间有个插针,需要用短路帽连接),然后打开串口调试助手,115200波特率,一直监视着就行。我用的sscom v5.13.1,打开网口调试助手,我也用的sscom,端口5001,一直监听着就行。

工程:用的实验4

参考:这篇文章很好,除了没有源码比较遗憾。这文章里用的是开发板写死IP,而我用的是路由器分配IP。【LWIP】stm32用CubeMX(6.4版)配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分)_芜~湖~的博客-CSDN博客_stm32cubemx配置lwiphttp://t.csdn.cn/B0pcThttp://t.csdn.cn/B0pcT

下面正式开始:

1.在工程目录中新建 tcpclient.c和tcpclient.h文件,我分别在E:\KEIL_study\CUBE6.3_F407_P3_LWIP\Core\Src 和中E:\KEIL_study\CUBE6.3_F407_P3_LWIP\Core\Inc中定义的。大家可以直接使用我源码中的文件,如果自己创建那么非常要注意的一点:如果是用记事本创建的需要另存编码ANSI,否则串口打印出来是乱码。

这两个文件我基本是从参考文章里复制的,但是增加了TCP连接故障的错误码打印 

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;   //这一句一定要放在里面,否则会没用
	err_t aa;
  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");
  
  //开始连接
  aa = tcp_connect(client_pcb, &server_ip, TCP_CLIENT_PORT, client_connected);
	ip_set_option(client_pcb, SOF_KEEPALIVE);	
	
	printf("已经调用了tcp_connect函数:%d\n",aa);
  
  //注册异常处理
  tcp_err(client_pcb, client_err);
	printf("已经注册异常处理函数\n");	
}

tcpclient.h:

#ifndef _TCPCLIENT_H_
#define _TCPCLIENT_H_

#define TCP_CLIENT_PORT 5001

#include "stdio.h"

void TCP_Client_Init(void);

#endif

2.把新建的c文件添加到工程,由于.h文件目录已被包含,所以无需操作

 3.代码添加

3.1)main.h添加,注意里面的DEST_IP_ADDR0-3对应电脑的IP,因为要用电脑的网络助手作为TCP服务器。例如,我的电脑IP是192.168.2.192。

3.2)TIM.c中定义两个变量,用于定时5s重新初始化TCP,这个很重要,后面会讲原因 

 3.3)main.c中添加TCP初始化函数调用

4.编译下载即可,现象如下:

左图为串口信息,可以看到,一开始TCP连接状态是-4,这个可以查到err.h中 ERR_RTE     = -4, 应该就是没有IP的意思,后面变0了说明是得到路由器给分配的IP了,然后就连接OK了,同时右侧的TCPServer窗口出现了周期的数据。

同时试了下TCPServer发送数据,结果又收到同样的反馈了,相关代码如下

 

 

5.源码:

链接:https://pan.baidu.com/s/1Ip0YKY22rUM-YpJ42gqfaw?pwd=1234 
提取码:1234

https://download.csdn.net/download/Running_A/85602888

 

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: en.stm32cubemx-win_v6-3-0_v6.3.0.zip是一个软件包,主要用于STM32微控制器的开发。该软件包包含了一个名为STM32CubeMX的集成开发环境,可以帮助开发人员快速生成基于STM32芯片的项目代码。此外,该软件包还包含了许多现成的设备驱动程序、库以及示例代码,大大简化了STM32开发和调试的流程。最新的版本为6.3.0,新增了许多新的功能和设备支持,可以更好地满足不同项目的需求。总之,en.stm32cubemx-win_v6-3-0_v6.3.0.zip是一款非常实用的软件包,值得STM32开发人员下载和使用。 ### 回答2: en.stm32cubemx-win_v6-3-0_v6.3.0.zip是一个STM32CubeMX软件的安装文件。STM32CubeMX是STMicroelectronics公司开发的一个集成式软件工具,用于在编写STM32微控制器的应用程序时生成初始化代码和配置文件。该软件可以使嵌入式开发人员节省大量时间,减少错误,并提高生产效率。 安装这个软件可以使嵌入式开发人员更快速地初始化STM32系列微控制器,减少测试,编程和生产时间。该软件提供可视化的图形用户界面和许多与STM32芯片系列相关联的配置选项,使得使用STM32系列芯片开发嵌入式系统变得更加便捷和高效。 总之,en.stm32cubemx-win_v6-3-0_v6.3.0.zip是一个非常有用的工具,适用于嵌入式开发人员,可以优化他们的工作流程,提高编程效率。 ### 回答3: en.stm32cubemx-win_v6-3-0_v6.3.0.zip是一个软件包,它包含了ST公司的STM32CubeMX软件的最新版本6.3.0STM32CubeMX是一款用于STM32单片机的代码生成工具,它可以帮助开发人员快速地创建基于STM32系列芯片的应用程序。 这个软件包适用于Windows操作系统。通过下载并安装这个软件包,开发人员可以轻松地创建STM32应用程序的开发环境,并使用STM32CubeMX的图形界面来进行代码的生成和配置。此外,这个软件包还包含了一些STM32CubeMX支持的设备的驱动程序和固件库。 使用STM32CubeMX能够大大降低STM32单片机应用程序的开发难度和开发成本,使得开发人员可以更加专注于应用程序的业务逻辑上,从而提高开发效率和软件的质量。所以,如果你需要开发基于STM32系列芯片的应用程序,en.stm32cubemx-win_v6-3-0_v6.3.0.zip是一个非常有用的工具包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值