Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
[RealTouch例程]TCPIP网络组件Lwip之Ping
发布于 2012-08-24 23:39:09 浏览:15396
订阅该版
实验目的 ? 需要了解PC和网络之间的连接状态时, Ping是最常用的方法。想了解PC 和 RealTouch 开发板之间的网络连接状态如何,使用 Ping 同样可以。当 PC 和 RealTouch 之间通过网线连接, 并且 RealTouch 开发板上的 Lwip协议栈运行起来后,如果在 PC 端能够 Ping 通 RealTouch 所对应的 IP 地址时,说明此时 PC 和 RealTouch 开发板的 TCP/IP 网络连接已经建立, 并且可以进行网络通信。 硬件说明 本实验使用RT-Thread官方的Realtouch开发板作为实验平台。涉及到的硬件主要为 ? RJ45接口,作为网络连接的需要,需要用网线将Realtouch和目标机连进行连接。 实验原理及程序结构 实验设计 本实验的主要设计目的是帮助读者了解lwip的基本ping操作,主要涉及相关编译设置。 源程序说明 系统依赖 在rtconfig.h中需要开启 ``` #define RT_USING_LWIP``` 此项必须,本实验使用LWIP组件,因此需要开启此项 主程序说明 首先我们看看rtconfig.h中的一些设置,我们将lwip相关的宏默认全部打开。 LWIP相关宏 ```/* SECTION: lwip, a lighwight TCP/IP protocol stack */ #define RT_USING_LWIP /* LwIP uses RT-Thread Memory Management */ #define RT_LWIP_USING_RT_MEM /* Enable ICMP protocol*/ #define RT_LWIP_ICMP /* Enable UDP protocol*/ #define RT_LWIP_UDP /* Enable TCP protocol*/ #define RT_LWIP_TCP /* Enable DNS */ #define RT_LWIP_DNS TCP/IP相关设置 /* the number of simulatenously active TCP connections*/ #define RT_LWIP_TCP_PCB_NUM 5 /* ip address of target*/ #define RT_LWIP_IPADDR0 192 #define RT_LWIP_IPADDR1 168 #define RT_LWIP_IPADDR2 1 #define RT_LWIP_IPADDR3 30 /* gateway address of target*/ #define RT_LWIP_GWADDR0 192 #define RT_LWIP_GWADDR1 168 #define RT_LWIP_GWADDR2 1 #define RT_LWIP_GWADDR3 1 /* mask address of target*/ #define RT_LWIP_MSKADDR0 255 #define RT_LWIP_MSKADDR1 255 #define RT_LWIP_MSKADDR2 255 #define RT_LWIP_MSKADDR3 0``` 在此配置 RealTouch 的 IP 地址,网关和掩码,此处 IP 地址设置为 192.168.1.30;网关地址为 192.168.1.1;掩码地址为 255.255.255.0. 读者可修改该配置来设置 RealTouch 的 IP 地址; 在application.c中,建立了一个初始化线程,来注册以太网设备,并初始化lwip系统,这些都包含在了rt_component_init()中。 编译调试及观察输出信息 编译请参见《RT-Thread配置开发环境指南》完成编译烧录,参考《Realtouch开发板使用手册》完成硬件连接,连上网线。 然后,按照以下图示配置 PC 机的 IP 地址与 RealTouch 开发板位于同一 IP 段地址内。 [attachment=-3] [attachment=-2] [attachment=-1] 最后祭出 cmd.exe 就可以判断 PC 是否和 RealTouch 开发板成功建立网络连接,如果出现以下界面,恭喜,网络连接已成功。 [attach]0[/attach] 结果分析 可以看到Lwip的ping操作成功了。那么可以开启 RT-Thread 的网络之旅了,Ftp, Tftp, WebServer 等就在不远处。 [attachment=-5] [attachment=-4] 下载附件 [实验7_1TCPIP网络组件Lwip之Ping.pdf](https://oss-club.rt-thread.org/uploads/88_850816b769e555442e903fb03b6acc38.pdf) 下载附件 [3_networking.zip](https://oss-club.rt-thread.org/uploads/88_8b740d41230170f7c1533c8fb2757535.zip) ![network_1.png](https://oss-club.rt-thread.org/uploads/88_21b8ff5057bbf5da5a52d298d12b6a5c.png) ![network_2.png](https://oss-club.rt-thread.org/uploads/88_19fa3a5705d052ef4e26d079d505bae9.png) ![network_3.png](https://oss-club.rt-thread.org/uploads/88_287b3c6978691945cf290128d78649b4.png) ![network_4.png](https://oss-club.rt-thread.org/uploads/88_e8f32ad0de33f9d2ecd669a07b403174.png) ![netio_error.jpg](https://oss-club.rt-thread.org/uploads/414_88db10827d5b678b37abc9aad62f156c.jpg)
查看更多
12
个回答
默认排序
按发布时间排序
xinghui_fly
2012-08-26
这家伙很懒,什么也没写!
将MAC、PHY和LWIP初始化,启动LWIP,不用添加TCP或者UDP的线程就能ping吗?
aozima
2012-08-26
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
ping 是 ICMP reply,协议内置,默认就支持,除非人为关闭此功能。
bernard
2012-08-26
这家伙很懒,什么也没写!
我开始还以为是从RT-Thread上ping外部的主机,这个后续也补一个吧。
shaolin
2012-08-26
这家伙很懒,什么也没写!
网络这部分应该会多加一些例程, RealTouch 不仅可以学习 RTOS , 还有 Lwip TCP/IP 协议栈 [s:160]
bernard
2012-08-26
这家伙很懒,什么也没写!
>网络这部分应该会多加一些例程, RealTouch 不仅可以学习 RTOS , 还有 Lwip TCP/IP 协议栈 [s:160] --- 是的,网络这方面是RT-Thread比较重要的一块
xinghui_fly
2012-08-26
这家伙很懒,什么也没写!
我觉得是不是借这次机会,这将Lwip在做的更好……
xinghui_fly
2012-08-27
这家伙很懒,什么也没写!
测试网速时,怎么就出现一个TX的速率,后面就没了 ,时什么歌情况呢? [attach]1214[/attach]
shaolin
2012-08-28
这家伙很懒,什么也没写!
这个等后面 netio 例程推出吧。
yzk376
2012-11-28
这家伙很懒,什么也没写!
我用的是自己做的板子,外置的ENC28J60网络芯片,用的是RT-Thread 1.1.0 RC的程序。 是不是只要在rtconfig.h文件中打开LWIP相关的定义“#define RT_USING_LWIP”等,然后把网络的硬件CS、SPI和中断配置好,是不是就可以ping通了? 我用的是自己画的板子,103VB,128kB Flash, 20kB SRAM,100脚。 RT-Thread 1.1.0 RC\bsp\stm32f10x\enc28j60.c文件修改内容 CS改为: #define CSACTIVE GPIOE->BRR = GPIO_Pin_11; #define CSPASSIVE GPIOE->BSRR = GPIO_Pin_11; 时钟配置为 static void RCC_Configuration(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); //打开 SPI2时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE); } 中断改为 static void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 引脚改为 static void GPIO_Configuration() { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOE, &GPIO_InitStructure); /* Configure SPI2 pins: SCK, MISO and MOSI ----------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); //CS GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOE, &GPIO_InitStructure); /* Connect ENC28J60 EXTI Line to GPIOE Pin 8 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource8); /* Configure ENC28J60 EXTI Line to generate an interrupt on falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line8; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Clear the Key Button EXTI line pending bit */ EXTI_ClearITPendingBit(EXTI_Line8); } RT-Thread 1.1.0 RC\bsp\stm32f10x\stm32f10x_it.c文件的中断函数改为: #if (STM32_ETH_IF == 0) /******************************************************************************* * Function Name : EXTI9_5_IRQHandler * Description : This function handles External interrupt Line 8 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI9_5_IRQHandler(void) { extern void enc28j60_isr(void); /* enter interrupt */ rt_interrupt_enter(); enc28j60_isr(); /* Clear the Key Button EXTI line pending bit */ EXTI_ClearITPendingBit(EXTI_Line8); /* leave interrupt */ rt_interrupt_leave(); } #endif 我对中断这一块有点迷糊,不知道是否正确。 我的理解是因“这些都包含在了rt_component_init()中”和“ping 是 ICMP reply,协议内置,默认就支持,除非人为关闭此功能。”这两句话,所以不需要在写ping相关的代码就能ping通,不知道是否正确。
shaolin
2012-11-28
这家伙很懒,什么也没写!
是的,只需要打开 LWIP 组件功能后,不需要些 ping 相关代码就能 ping 通。
撰写答案
登录
注册新账号
关注者
0
被浏览
15.4k
关于作者
shaolin
这家伙很懒,什么也没写!
提问
115
回答
444
被采纳
0
关注TA
发私信
相关问题
1
[项目]搞个开源的硬件项目
2
硬件计划贴,及时更新,欢迎提意见
3
软件计划贴,及时更新,欢迎提意见::WMA,MOUNT,LWIP等问题急需解决.
4
MMS协议
5
定点的wma解压库-libwma
6
QQ群记录 [20090821]
7
STM32网络收音机PCB报名征集
8
第一版调试记录
9
第二版硬件讨论
10
RADIO项目相关模块规格--欢迎大家自己做板时规格与此兼容,减少重复劳动
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
TinyUSB Demo运行教程
2
RT-Thread学习大礼包一键带走!
3
freemodbus从机调试说明
4
【1024】瑞萨 RA 系列 BSP 制作与适配最新版本的 Keil 、 RSC、固件,较新的 FSP
5
基于 RT-Thread 星火一号开发板的俄罗斯方块
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
用户名由3_15位
10
个答案
1
次被采纳
KunYi
4
个答案
1
次被采纳
踩姑娘的小蘑菇
2
个答案
1
次被采纳
bernard
1
个答案
1
次被采纳
rv666
1
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部