工具:正点原子的STM32F4探索者开发板。
准备:STLINK连接电脑和开发板。然后开发板上电,用一根网线连接开发板和路由器,电脑也连接到路由器上(有线或无线均可)。 然后用USB转miniUSB线连接电脑和开发板的串口1(注意接插件到串口1中间有个插针,需要用短路帽连接),然后打开串口调试助手,115200波特率,一直监视着就行。我用的sscom v5.13.1,打开网口调试助手,我也用的sscom,端口5001,一直监听着就行。
工程:用的实验5/6
备注:在进行网络通讯实验时,如果系统启动时网线没插或者正常连接过程中拔掉网线再插上后系统网络无法连接。这时候就要注意以下几点,注意:我使用的自动获取IP,而不是预设!
1)系统启动时网线没插,这样的话初始化会失败,也就是MX_LWIP_Init(); 这是没办法获取到IP的,因此需要在检测到网线连接以后自动重新获取IP,那么具体怎么做呢。
首先需要检测到网线连接上这个事件。
这里用到这个回调函数:void ethernetif_notify_conn_changed(struct netif *netif),见下图:
在图中是弱函数出现的,所以在我们自定义的文件里重新定义这个函数:
void ethernetif_notify_conn_changed(struct netif *netif)
{
if(netif_is_link_up(netif)){
printf("网络连接状态发生改变:刚刚连接上");
netif_set_up(netif);
dhcp_start(netif); //自动获取IP!!!预设IP的忽略此句
}
else{
printf("网络连接状态发生改变:刚刚断开了");
}
}
此外,ethernetif_notify_conn_changed这个函数之所以在网线连接状态变化后会调用,是因为ethernetif_update_config这个函数调用的它,而ethernetif_update_config必须在LWIP_NETIF_LINK_CALLBACK宏定义有效的时候才会调用,因此,这里两个办法,①是CUBE中使能,推荐这种,方便后续再修改CUBE:
②是直接在KEIL工程中改过来
同时,要实现断线自动恢复还需要几个先决条件,这些条件在前面实验和源码中都讲过,再说一遍
①。主循环中使用 MX_LWIP_Process()
② MX_LWIP_Process中加上这句话: