[C]
纯文本查看 复制代码
#include "sys.h"#include "string.h" #include "delay.h"#include "usart.h"#include "dma.h"#include "led.h"#include "key.h"#include "lwip_comm.h"#include "LAN8720.h"#include "timer.h"#include "sram.h"#include "malloc.h"#include "lwip/netif.h"#include "lwip_comm.h"#include "lwipopts.h"#include "tcp_server_demo.h"#include "tcp_client_demo.h"#include "udp_demo.h"int main(void){u8 speed;delay_init(168); //延时初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置MYDMA_Config(DMA2_Stream5,DMA_Channel_4,(u32)&USART1->DR,(u32)uart_recbuf,uart_recbufsize);uart_init(115200); //串口波特率设置LED_Init(); //LED初始化mymem_init(SRAMIN);//初始化内部内存池mymem_init(SRAMCCM);//初始化CCM内存池TIM3_Int_Init(999,839); //100khz的频率,计数1000为10mswhile(lwip_comm_init()) //lwip初始化{printf("LWIP Init Falied!rn");delay_ms(1200);printf("Retrying...rn"); }printf("LWIP Init Success!rn");#if LWIP_DHCPwhile((lwipdev.dhcpstatus!=2)&&(lwipdev.dhcpstatus!=0XFF))//等待DHCP获取成功/超时溢出{lwip_periodic_handle();}#endifspeed=LAN8720_Get_Speed();//得到网速if(speed&1<<1)printf("Ethernet Speed:100Mrn");else printf("Ethernet Speed:10Mrn");printf("PORT: 8089rn");delay_ms(500);//延时1sdelay_ms(500);while(1){ u8 i;u8 res=0;u8 t=0; err_t err; struct ip_addr locipaddr; struct ip_addr rmtipaddr; //远端ip地址IP4_ADDR(&locipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]); struct udp_pcb *udppcb; //struct tcp_pcb *tcppcbclient; //定义一个TCP服务器控制块struct tcp_pcb *tcppcbserver; //定义一个TCP服务器控制块struct tcp_pcb *tcppcbconn; //定义一个TCP服务器控制块udppcb=udp_new();tcppcbclient=tcp_new();//创建一个新的pcbtcppcbserver=tcp_new();//创建一个新的pcb#if 1if(udppcb)//创建成功{ err=udp_connect(udppcb,&rmtipaddr,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器if(err==ERR_OK){err=udp_bind(udppcb,&locipaddr,UDP_DEMO_PORT);//绑定本地IP地址与端口号if(err==ERR_OK)//绑定完成{udp_recv(udppcb,udp_demo_recv,NULL);//注册接收回调函数 udp_demo_flag |= 1<<5;//标记已经连接上}else res=1;}else res=1;}else res=1;#endif#if 0if(tcppcbclient)//创建成功{tcp_connect(tcppcbclient,&rmtipaddr,REMOTE_PORT,tcp_client_connected);//连接到目的地址的指定端口上,当连接成功后回调tcp_client_connected()函数}else res=1;#endif#if 1if(tcppcbserver)//创建成功{ err=tcp_bind(tcppcbserver,&locipaddr,TCP_SERVER_PORT);//将本地IP与指定的端口号绑定在一起,IP_ADDR_ANY为绑定本地所有的IP地址if(err==ERR_OK)//绑定完成{tcppcbconn=tcp_listen(tcppcbserver); //设置tcppcb进入监听状态tcp_accept(tcppcbconn,tcp_server_accept); //初始化LWIP的tcp_accept的回调函数}else res=1; }else res=1;#endifwhile(res==0){if(udp_demo_flag&1<<6){for(i=0;i<=udptotal_len;i++) { USART_SendData(USART1, udp_demo_recvbuf
); //向串口2发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}udptotal_len=0;udp_demo_flag&=~(1<<6);//标记数据已经被处理了.} if(tcp_client_flag&1<<6)//是否收到数据{for(i=0;i<=tcpclienttotal_len;i++) {USART_SendData(USART1,tcp_client_recvbuf); //向串口2发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}tcpclienttotal_len=0;tcp_client_flag&=~(1<<6);//标记数据已经被处理了.} if(tcp_server_flag&1<<6){for(i=0;i<=tcpservertotal_len;i++) {USART_SendData(USART1, tcp_server_recvbuf); //向串口2发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}tcpservertotal_len=0;//tcp_server_flag&=~(1<<6);//标记数据已经被处理了.} if(udp_demo_flag&1<<7){udp_demo_senddata(udppcb);udp_demo_flag&=~(1<<7); //清除数据发送标志位}lwip_periodic_handle();delay_ms(2);t++;if(t==200){t=0;LED0=!LED0;} }udp_demo_connection_close(udppcb); //断开udp连接tcp_client_connection_close(tcppcbclient,0);//关闭TCP Client连接tcp_server_connection_close(tcppcbserver,0);//关闭TCP Server连接tcp_server_connection_close(tcppcbconn,0);//关闭TCP Server连接 tcp_server_remove_timewait(); memset(tcppcbserver,0,sizeof(struct tcp_pcb));memset(tcppcbconn,0,sizeof(struct tcp_pcb)); delay_ms(100);}}
[C] 纯文本查看 复制代码
#include "sys.h"#include "string.h" #include "delay.h"#include "usart.h"#include "dma.h"#include "led.h"#include "key.h"#include "lwip_comm.h"#include "LAN8720.h"#include "timer.h"#include "sram.h"#include "malloc.h"#include "lwip/netif.h"#include "lwip_comm.h"#include "lwipopts.h"#include "tcp_server_demo.h"#include "tcp_client_demo.h"#include "udp_demo.h"int main(void){u8 speed;delay_init(168); //延时初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置MYDMA_Config(DMA2_Stream5,DMA_Channel_4,(u32)&USART1->DR,(u32)uart_recbuf,uart_recbufsize);uart_init(115200); //串口波特率设置LED_Init(); //LED初始化mymem_init(SRAMIN);//初始化内部内存池mymem_init(SRAMCCM);//初始化CCM内存池TIM3_Int_Init(999,839); //100khz的频率,计数1000为10mswhile(lwip_comm_init()) //lwip初始化{printf("LWIP Init Falied!rn");delay_ms(1200);printf("Retrying...rn"); }printf("LWIP Init Success!rn");#if LWIP_DHCPwhile((lwipdev.dhcpstatus!=2)&&(lwipdev.dhcpstatus!=0XFF))//等待DHCP获取成功/超时溢出{lwip_periodic_handle();}#endifspeed=LAN8720_Get_Speed();//得到网速if(speed&1<<1)printf("Ethernet Speed:100Mrn");else printf("Ethernet Speed:10Mrn");printf("PORT: 8089rn");delay_ms(500);//延时1sdelay_ms(500);while(1){ u8 i;u8 res=0;u8 t=0; err_t err; struct ip_addr locipaddr; struct ip_addr rmtipaddr; //远端ip地址IP4_ADDR(&locipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]); struct udp_pcb *udppcb; //struct tcp_pcb *tcppcbclient; //定义一个TCP服务器控制块struct tcp_pcb *tcppcbserver; //定义一个TCP服务器控制块struct tcp_pcb *tcppcbconn; //定义一个TCP服务器控制块udppcb=udp_new();tcppcbclient=tcp_new();//创建一个新的pcbtcppcbserver=tcp_new();//创建一个新的pcb#if 1if(udppcb)//创建成功{ err=udp_connect(udppcb,&rmtipaddr,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器if(err==ERR_OK){err=udp_bind(udppcb,&locipaddr,UDP_DEMO_PORT);//绑定本地IP地址与端口号if(err==ERR_OK)//绑定完成{udp_recv(udppcb,udp_demo_recv,NULL);//注册接收回调函数 udp_demo_flag |= 1<<5;//标记已经连接上}else res=1;}else res=1;}else res=1;#endif#if 0if(tcppcbclient)//创建成功{tcp_connect(tcppcbclient,&rmtipaddr,REMOTE_PORT,tcp_client_connected);//连接到目的地址的指定端口上,当连接成功后回调tcp_client_connected()函数}else res=1;#endif#if 1if(tcppcbserver)//创建成功{ err=tcp_bind(tcppcbserver,&locipaddr,TCP_SERVER_PORT);//将本地IP与指定的端口号绑定在一起,IP_ADDR_ANY为绑定本地所有的IP地址if(err==ERR_OK)//绑定完成{tcppcbconn=tcp_listen(tcppcbserver); //设置tcppcb进入监听状态tcp_accept(tcppcbconn,tcp_server_accept); //初始化LWIP的tcp_accept的回调函数}else res=1; }else res=1;#endifwhile(res==0){if(udp_demo_flag&1<<6){for(i=0;i<=udptotal_len;i++) { USART_SendData(USART1, udp_demo_recvbuf); //向串口2发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}udptotal_len=0;udp_demo_flag&=~(1<<6);//标记数据已经被处理了.} if(tcp_client_flag&1<<6)//是否收到数据{for(i=0;i<=tcpclienttotal_len;i++) {USART_SendData(USART1,tcp_client_recvbuf); //向串口2发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}tcpclienttotal_len=0;tcp_client_flag&=~(1<<6);//标记数据已经被处理了.} if(tcp_server_flag&1<<6){for(i=0;i<=tcpservertotal_len;i++) {USART_SendData(USART1, tcp_server_recvbuf); //向串口2发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}tcpservertotal_len=0;//tcp_server_flag&=~(1<<6);//标记数据已经被处理了.} if(udp_demo_flag&1<<7){udp_demo_senddata(udppcb);udp_demo_flag&=~(1<<7); //清除数据发送标志位}lwip_periodic_handle();delay_ms(2);t++;if(t==200){t=0;LED0=!LED0;} }udp_demo_connection_close(udppcb); //断开udp连接tcp_client_connection_close(tcppcbclient,0);//关闭TCP Client连接tcp_server_connection_close(tcppcbserver,0);//关闭TCP Server连接tcp_server_connection_close(tcppcbconn,0);//关闭TCP Server连接 tcp_server_remove_timewait(); memset(tcppcbserver,0,sizeof(struct tcp_pcb));memset(tcppcbconn,0,sizeof(struct tcp_pcb)); delay_ms(100);}}
举报