硬件资源:正点原子stm32f407 探索者开发板,板载Lan8720以太网芯片
操作系统:rt-thread 4.0.1
实验目的:
1.实现ping功能,能够ping通外网
2.实现Telnet功能,能够使用类似于CRT这种工具进行远程连接调试
步骤1:下载rt-thread 4.0.1源码,可以到rtthread官网或者是github进行下载,这里给出官网的百度网盘下载连接供下载。rt-thread官方百度网盘连接
步骤2:进入rt-thread-v4.0.1\rt-thread\bsp\stm32\stm32f407-atk-explorer文件夹,在该文件夹内打开env窗口
如下图所示:
输入menuconfig命令,进入参数配置页面
步骤3:选择使能以太网功能
选择socket抽象层
选择ping、ifconfig等特性
使能lwip协议栈,目前rt-thread中支持协议栈最新的版本为2.1.0
然后去在线包选择iot,主要选择ping和telnet server
步骤4.保存,退出,回到命令行窗口。输入命令pkg --update 等待更新包。
步骤5.使用命令scons --target=mdk5,重新构建工程,等待构建成功即可。
步骤6.打开工程文件,C:\Users\Administrator\Desktop\rt-thread-v4.0.1\rt-thread\bsp\stm32\stm32f407-atk-explorer\project.uvprojx,重新编译一遍。
修改代码,解决上述三个问题:
打开netdev.c文件,定位到代码1025行,将该行代码修改即可解决以上三个问题。
//原始代码块
FINSH_FUNCTION_EXPORT_ALIAS(netdev_ping, __cmd_ping, ping network host);
//更新后的
FINSH_FUNCTION_EXPORT_ALIAS(netdev_ping, __netdev_cmd_ping, ping network host);
步骤7:编译没有问题后,我们下载程序到板子上,串口输出信息如下
但是网口的灯没有亮,说明网卡部分还需要修改一下。打开工程看了才知道,网络硬件的驱动都没有加进来,我们需要自己把驱动添加进来
1.添加drv_eth.c/drv_eth.h文件,目录为:rt-thread-v4.0.1\rt-thread\bsp\stm32\libraries\HAL_Drivers
2.添加phy_reset.c文件,目录为rt-thread-v4.0.1\rt-thread\bsp\stm32\stm32f407-atk-explorer\board\ports
再次尝试编译,出现以下错误:
我们打开drv_eth.c发现上述变量没有定义,但是在全局搜索的时候,发现它们都在drv_eth.h中定义,但是没有打开宏开关,我们在rtconfig.h中增加宏开关#define PHY_USING_LAN8720A即可。重新编译,出现以下问题
我们只需要在STM32_HAL文件夹增加stm32f4xx_hal_eth.c即可。正常编译,通过。
步骤8:编译没有问题后,我们下载程序到板子上,串口输出信息如下.同时,网口的灯也正常闪烁了,说明网络硬件已经可以正常工作了。
步骤9:验证ping、ifconfig、telnet等功能
1.验证ping
2.验证ifconfig
3.验证telnet server功能
打开CRT软件,新建会话窗口,选择telnet,输入ip和端口,填好之后,点击确定,然后点击连接该会话即可观察到现象。
注意:调试信息只能输出到一个端口,如果开启了telnetserver后,调试信息只能输出到远程调试窗口了,不会再往串口输出了。如果主动关闭telnet窗口,串口会继续充当调试端口,输出调试信息