在CUBEMX配置LWIP无操作系统上加入TCPServer

使用CUBEMX6.10版本配置IAR的STM32F407ZGT6+LWIP无操作系统icon-default.png?t=N7T8http://t.csdnimg.cn/BAkyr在上一篇的使用CUBEMX6.10版本配置IAR的STM32F407ZGT6+LWIP无操作系统的基础上继续增加TCPServer部分。

1.先配置了串口和LCD

参考连接:http://t.csdnimg.cn/YDy23

主要是注意:除了配置FSMC,还需配置PB15,配置为上拉高速,初始电平为低。

2.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>
#include "ILI93xx.h"

uint8_t times[10];
uint8_t nei[20];

static err_t tcpecho_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{                                   //对应接收数据连接的控制块收到的数据   
  if (p != NULL) 
  {  
    /* 更新窗口*/
    tcp_recved(tpcb, p->tot_len);     //读取数据的控制块得到所有数据的长度
    sprintf((char*)times,"%d",p->tot_len);
    LCD_ShowString(30,100,200,16,16,times);
    strcpy(nei,p->payload);
    LCD_ShowString(30,160,200,16,16,p->payload);
    /* 返回接收到的数据*/  

    tcp_write(tpcb, p->payload, p->tot_len, 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类型的
}

3.tcpserver.h

#ifndef _TCPECHO_H_
#define _TCPECHO_H_

#define TCP_ECHO_PORT 5001

void TCP_Echo_Init(void);

#endif

4.测试

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值