工具:正点原子的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

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

  1. ST7789的显示问题-正点原子开发板验证

    1.项目调研阶段--用正点原子探索者stm32f407,验证了ST7789的使用:使用的屏幕是1.3寸的 淘宝--中景园的屏幕--很多! 测试代码.随后附上: 2.项目开始使用芯唐的M483进行开发, ...

  2. 正点原子开发板STM32F407ZG-基于AD7606进行八路数据采集

    购买的AD7606模块 在淘宝上面购买的这款产品,让店家设置的是串行(SPI).模拟梁输入范围是正负10V. 板子背面的焊盘选择 1.原理图 原理图参考安富莱的AD7606的 2.管脚的定义 2.1O ...

  3. WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(11)-BINFS在Nand上的实现(Multi-Bin的实现)

    之前我们都是把整个系统镜像复制到RAM中运行,这样启动时间较慢,也占用内存.使用Multi-Bin的模式,将需要复制到RAM的组件和可存放在存储设备(如Nand)中的组件分开,系统启动时只需要将CE核 ...

  4. STM32学习笔记3 正点原子miniSTM32串口通信实验

    初学者学习总结,如有错误,请大神指正 目的:用 STM32 的串口来发送和接收数据. 一.STM32串口 1.1 简介 ALIENTEK MiniSTM32 V3 版开发板选择的是 STM32F103 ...

  5. IMX6ULL裸机学习----LED正点原子在韦东山开发板上实现

    前言 一.IMX6ULL 启动流程? 二.LED代码移植 1.硬件介绍 2.代码移植 总结 前言 最近在学习IMX6ULL这个开发板,手边有韦东山老师的imx6ull全功能板子,为了练习学习的初步效果 ...

  6. stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上一章,我们介 ...

  7. 移植 stm32f7_移植zephyrOS到正点原子apollo STM32F767上

    移植(port)zephyrOS到正点原子apollo STM32F767开发板上,按照官方移植文档[1],在 boardsarm 中复制nucleo_f767zi,并改名apollo_f767ig, ...

  8. stm32l0的停止模式怎么唤醒_「正点原子STM32Mini板资料连载」第十九章 待机唤醒实验...

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第十九章 待机唤醒实验 本章我们将向 ...

  9. stm32 读取sd卡图片显示_「正点原子STM32Mini板资料连载」第三十五章 汉字显示实验...

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十五章 汉字显示实验 汉字显示在 ...

最新文章

  1. infopath java包_InfoPath 2013 修补程序包 (Ipeditor x none.msp) 的描述︰ 2014 年 4 月 8,...
  2. 浅谈Python flask框架浅析
  3. (拿来主义-8) Spring Boot属性配置文件详解(三)
  4. Linux下和Windows下创建Oracle数据库,表空间,Oracle用户
  5. pythonrandom模块_python中的random模块
  6. 通信模式与网络协议之间的对应关系
  7. redux 源码详解
  8. key value vue 输出_Vue2.0 v-for 中 :key 到底有什么用?
  9. MySQL笔记-解决...mysql.sock (13)(两种情况会产生此问题)
  10. WPF TextBox控件中文字实现垂直居中
  11. Linux配置中文输入法
  12. 计算机软件毕业论文教师指导记录,【毕业论文指导教师指导记录】论文指导记录16篇...
  13. 小说关于计算机名称,小说取名和人名取名太纠结了,感觉橙瓜码字的自动取名还不错...
  14. 直击AI场景化实践:在部分行业可取代人工
  15. 如何对网络安全攻击采取防御措施
  16. PT100恒流源测温电路
  17. UML相关工具一览(2018年5月更新)
  18. 安卓SSL证书格式:pfx转换BKS格式证书
  19. gmsl摄像头Android平台调试思路
  20. java程序员面试宝典(刘磊版)笔记

热门文章

  1. 【Windows11】【3050Ti显卡】下进行PaddleDetetion安装指南
  2. CC1310 底噪测量以及实际意义
  3. OMRON TIMER
  4. FPGA学习之实现SDRAM
  5. mac系统npm 安装淘宝镜像
  6. 台电p10hd四核刷Android6.0,台电a10hd_台电p10hd四核_台电a10hd刷win
  7. win10安装cuda9.0,cudann
  8. excel之非常实用的模糊查询
  9. Zabbix,Prometheus
  10. 中文大写数字/金额转化