lwip协议是广泛用于嵌入式设备的网络通信协议,通过rt-thread studio(简称rts)可方便快速的实现网络收发功能
硬件:stm32f407zgt6核心板,lan8720a(rmii接口)模块(淘宝很多)
软件:rts,cubemax
调试方式:st-link swd接口
实现目标:实现上位机与单片机的互ping成功,注意,本文需要一定硬件和软件动手能力,没有基础的同学可以先学习一下基础的知识,本文中部分基础操作的内容不详细说明。
实现步骤:
一、硬件连接:使用杜邦线进行引脚连接,具体引脚对于关系可打开cubmax的rmii接口进行查询,图2是stm32f407zgt6的引脚对于关系,使用杜邦线进行连接即可。
二、使用rts创建基于芯片的工程,版本选择rtt标准版,通信串口选择uart6(PC6,PC7),当然也可以自定义,下载选择st-link,swd接口,您可以根据自己的现有硬件设备进行选择。
三、打开ETH功能:通过rts打开cubemax,并进行以下操作,
1、选择左侧Conectivity下的ETH,选择Mode为RMII
2、重新设置时钟树,本文使用默认内部时钟进行测试,不修改时钟树,点击重置时钟配置(reset clock configuration)即可
3、点击generate code 生成项目代码,然后关闭cubemax,使修改信息同步至rts,出现以下内容,说明同步成功。可点击编译若编译通过则说明操作无误。
四:打开rts网络功能和lwip功能
1、打开Rt-thread Settings 选择 选择组件中的lwip使之变为彩色(图8)
2、点击配置项,进行配置lwip,图9中四个标红开关打开即可,若是电脑直连模式,请关闭DCHP选项并配置静态IP。
3、使能ETH功能,打开board.h文件,打开ETH功能,编译并下载,会出现图11的错误,缺少phy_reset函数。
4、点击错误行跳转至错误文件drv_eth.c,在顶部新增以下代码,具体代码因芯片不同,可在rts安装路径下的"\repo\Extract\RT-Thread_Source_Code\RT-Thread\lts-v3.1.5\bsp\stm32"文件夹中对应芯片下搜索phy_reset.c文件查看
#define RESET_IO GET_PIN(D, 3)
void phy_reset(void){
rt_pin_write(RESET_IO, PIN_LOW);
rt_thread_mdelay(50);
rt_pin_write(RESET_IO, PIN_HIGH);
}
五:完成以上步骤后编译工程,显示编译通过,下载至芯片后打开串口 显示图12则说明程序运行正常。msh输入list_device明显可以看到e0硬件已开启(图13),输入ifconfig可显示网卡的静态IP信息(图14)
六,测试:上位机电脑配置网络与单片机在同一网段 互ping结果如下,说明工程网络模块运行正常,撰文不易,点个赞吧O(∩_∩)O