这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
lwip_tcp_client实验_以太网数据传输 [2020/07/08 10:07] zgf [三、 实验原理] |
lwip_tcp_client实验_以太网数据传输 [2022/03/22 10:23] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-07-08 | gingko | 初次建立 | | | V1.0 | 2020-07-08 | gingko | 初次建立 | | ||
行 88: | 行 87: | ||
{ | { | ||
system_clock.initialize(); //系统时钟初始化 | system_clock.initialize(); //系统时钟初始化 | ||
- | led.initialize(); //LED初始化 | + | led.initialize(); //LED初始化 |
adc.initialize(); //ADC初始化 | adc.initialize(); //ADC初始化 | ||
delay.initialize(216); //延时初始化 | delay.initialize(216); //延时初始化 | ||
行 95: | 行 94: | ||
usart6.printf("\033[1;32;40m"); //设置终端字体为绿色 | usart6.printf("\033[1;32;40m"); //设置终端字体为绿色 | ||
usart6.printf("\r\nHello, I am iCore4!\r\n\r\n"); //串口信息输出 | usart6.printf("\r\nHello, I am iCore4!\r\n\r\n"); //串口信息输出 | ||
- | OSInit(); //UCOS初始化 | + | OSInit(); //UCOS初始化 |
- | while(lwip.initialize()) //lwip初始化 | + | while(lwip.initialize()) //lwip初始化 |
{ | { | ||
LED_RED_ON; | LED_RED_ON; | ||
行 117: | 行 116: | ||
| | ||
#if LWIP_DHCP | #if LWIP_DHCP | ||
- | lwip_comm_dhcp_creat(); //创建DHCP任务 | + | lwip_comm_dhcp_creat(); //创建DHCP任务 |
#if LWIP_DNS | #if LWIP_DNS | ||
- | my_dns.initialize();//创建DNS任务 | + | my_dns.initialize(); //创建DNS任务 |
#endif | #endif | ||
- | #endif | + | #endif |
- | OSTaskCreate(led_task,(void*)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);//创建LED任务 | + | //创建LED任务 |
- | OSTaskCreate(display_task,(void*)0,(OS_STK*)&DISPLAY_TASK_STK[DISPLAY_STK_SIZE-1],DISPLAY_TASK_PRIO); //显示任务 | + | OSTaskCreate(led_task,(void*)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO); |
+ | //显示任务 | ||
+ | OSTaskCreate(display_task,(void*)0,(OS_STK*)&DISPLAY_TASK_STK[DISPLAY_STK_SIZE-1],DISPLAY_TASK_PRIO); | ||
OSTaskSuspend(OS_PRIO_SELF); //挂起start_task任务 | OSTaskSuspend(OS_PRIO_SELF); //挂起start_task任务 | ||
- | OS_EXIT_CRITICAL(); //开中断 | + | OS_EXIT_CRITICAL(); //开中断 |
} | } | ||
行 145: | 行 146: | ||
{ | { | ||
OS_CPU_SR cpu_sr; | OS_CPU_SR cpu_sr; | ||
- | struct netif *Netif_Init_Flag; //调用netif_add()函数时的返回值,用于判断网络初始化是否成功 | + | struct netif *Netif_Init_Flag; //调用netif_add()函数时的返回值,用于判断网络初始化是否成功 |
- | struct ip_addr ipaddr; //ip地址 | + | struct ip_addr ipaddr; //ip地址 |
- | struct ip_addr netmask; //子网掩码 | + | struct ip_addr netmask; //子网掩码 |
- | struct ip_addr gw; //默认网关 | + | struct ip_addr gw; //默认网关 |
- | if(lan8720.memory_malloc())return 1; //内存申请失败 | + | if(lan8720.memory_malloc())return 1; //内存申请失败 |
- | if(lwip_comm_mem_malloc())return 1; //内存申请失败 | + | if(lwip_comm_mem_malloc())return 1; //内存申请失败 |
- | if(lan8720.initialize())return 2; //初始化LAN8720失败 | + | if(lan8720.initialize())return 2; //初始化LAN8720失败 |
- | tcpip_init(NULL,NULL); //初始化tcpip内核该函数内会创建tcpip_thread内核任务 | + | tcpip_init(NULL,NULL); //初始化tcpip内核该函数内会创建tcpip_thread内核任务 |
- | lwip_comm_default_ip_set(&lwipdev); //设置默认IP信息 | + | lwip_comm_default_ip_set(&lwipdev); //设置默认IP信息 |
- | #if LWIP_DHCP //使用动态IP | + | #if LWIP_DHCP //使用动态IP |
ipaddr.addr = 0; | ipaddr.addr = 0; | ||
netmask.addr = 0; | netmask.addr = 0; | ||
gw.addr = 0; | gw.addr = 0; | ||
- | #else /使用静态IP | + | #else //使用静态IP |
IP4_ADDR(&ipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); | IP4_ADDR(&ipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); | ||
- | IP4_ADDR(&netmask,lwipdev.netmask[0],lwipdev.netmask[1] ,lwipdev.netmask[2],lwipdev.netmask[3]); | + | IP4_ADDR(&netmask,lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]); |
IP4_ADDR(&gw,lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]); | IP4_ADDR(&gw,lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]); | ||
- | usart6.printf("网卡enμ的MAC地址为:..........%d.%d.%d.%d.%d.%d\r\n",lwipdev.mac[0],lwipdev.mac[1], | + | usart6.printf("网卡enμ的MAC地址为:.......%d.%d.%d.%d.%d.%d\r\n",lwipdev.mac[0],lwipdev.mac[1], |
lwipdev.mac[2],lwipdev.mac[3],lwipdev.mac[4],lwipdev.mac[5]); | lwipdev.mac[2],lwipdev.mac[3],lwipdev.mac[4],lwipdev.mac[5]); | ||
- | usart6.printf("静态IP地址·...........%d.%d.%d.%d\r\n",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2], | + | usart6.printf("静态IP地址·.........%d.%d.%d.%d\r\n",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2], |
lwipdev.ip[3]); | lwipdev.ip[3]); | ||
usart6.printf("子网掩码..........%d.%d.%d.%d\r\n",lwipdev.netmask[0],lwipdev.netmask[1], | usart6.printf("子网掩码..........%d.%d.%d.%d\r\n",lwipdev.netmask[0],lwipdev.netmask[1], | ||
行 170: | 行 171: | ||
usart6.printf("默认网关........%d.%d.%d.%d\r\n", lwipdev.gateway[0],lwipdev.gateway[1], | usart6.printf("默认网关........%d.%d.%d.%d\r\n", lwipdev.gateway[0],lwipdev.gateway[1], | ||
lwipdev.gateway[2],lwipdev.gateway[3]); | lwipdev.gateway[2],lwipdev.gateway[3]); | ||
- | #endif Netif_Init_Flag=netif_add(&lwip_netif,&ipaddr,&netmask,&gw,NULL,ðernetif_init,&tcpip_input);//向网卡列表中添加一个网口 | + | #endif Netif_Init_Flag=netif_add(&lwip_netif,&ipaddr,&netmask,&gw,NULL,ðernetif_init, |
+ | &tcpip_input);//向网卡列表中添加一个网口 | ||
#if LWIP_DNS | #if LWIP_DNS | ||
dns_init(); | dns_init(); | ||
行 191: | 行 193: | ||
OS_CPU_SR cpu_sr; | OS_CPU_SR cpu_sr; | ||
OS_ENTER_CRITICAL(); //关中断 | OS_ENTER_CRITICAL(); //关中断 | ||
- | res = OSTaskCreate(tcp_client_thread,(void*)0,(OS_STK*)&TCPCLIENT_TASK_STK[TCPCLIENT_STK_SIZE-1],TCPCLIENT_PRIO); //创建TCP客户端线程 | + | res = OSTaskCreate(tcp_client_thread,(void*)0,(OS_STK*)&TCPCLIENT_TASK_STK |
+ | [TCPCLIENT_STK_SIZE-1],TCPCLIENT_PRIO); //创建TCP客户端线程 | ||
OS_EXIT_CRITICAL(); //开中断 | OS_EXIT_CRITICAL(); //开中断 | ||
return res; | return res; | ||
行 211: | 行 214: | ||
* 在发送区编辑完要发送的数据信息后,点击发送即可收到发送的数据包。如图所示: | * 在发送区编辑完要发送的数据信息后,点击发送即可收到发送的数据包。如图所示: | ||
- | + | {{ :icore4:icore4_arm_hal_20_4.png?direct |}} | |
==== 附录1: ==== | ==== 附录1: ==== | ||
- | 1、打开控制面板网络和Internet网络和共享中心更改适配器设置以太网属性 | + | 1、打开控制面板网络和Internet---→网络和共享中心---→更改适配器设置以太网属性 |
- | + | {{ :icore4:icore4_arm_hal_20_5.png?direct |}} | |
2、Internet协议版本4选择使用下面的IP地址(如下图所示),然后更改IP地址和默认网关 | 2、Internet协议版本4选择使用下面的IP地址(如下图所示),然后更改IP地址和默认网关 | ||
- | + | {{ :icore4:icore4_arm_hal_20_6.png?direct |}} | |
==== 附录2: ==== | ==== 附录2: ==== | ||
行 229: | 行 232: | ||
(1)打开测试工具,界面如下。点击创建服务器,弹出了设置端口的窗口,端口设置为60001。 | (1)打开测试工具,界面如下。点击创建服务器,弹出了设置端口的窗口,端口设置为60001。 | ||
+ | {{ :icore4:icore4_arm_hal_20_7.png?direct |}} | ||
(2)服务器已经创建完成(如下图),点击启动服务器 | (2)服务器已经创建完成(如下图),点击启动服务器 | ||
- | + | {{ :icore4:icore4_arm_hal_20_8.png?direct |}} | |
(3)iCore4客户端自动连接服务器,即可进行通信。(若连接不上请关闭电脑防火墙) | (3)iCore4客户端自动连接服务器,即可进行通信。(若连接不上请关闭电脑防火墙) | ||