1、时钟选择外部高速时钟(25M),系统时钟180M.
2、选择一组串口作为日志输出串口,打开串口,允许中断
3、配置ETH:
选择RMII连接方式。
勾上Ethernet global interrupt中断
修改ETH_TXD0、ETH_TXD1引脚为PG13 PG14
修改PHY引脚为 LAN8742A_PHY_ADDRESS 控制。
打开LWIP功能,关闭LWIP_DHCH,设置静态IP、子网掩码、网关。
进入Platform Settings页面选择网络芯片为LAN_8742A。
设置工程名称和保存地址,生成工程
4、main函数开头添加以下语句:
#ifdef LAN8742A_PHY_ADDRESS
#undef LAN8742A_PHY_ADDRESS
#define LAN8742A_PHY_ADDRESS 0U
#endif
#ifdef LWIP_RAM_HEAP_POINTER
#undef LWIP_RAM_HEAP_POINTER
#define LWIP_RAM_HEAP_POINTER 0x2000E378
#endif
5、main函数的while(1)循环添加以下语句:MX_LWIP_Process();
6、如有需要可以添加串口重定向:
int fputc(int ch, FILE *f)
{
//具体哪个串口可以更改huart1为其它串口
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1 , 0x0f);
return ch;
}
随后在添加LWIP日志管理代码,粘贴于lwipopts.h中
#define LWIP_DEBUG 1
#if LWIP_DEBUG
#define LWIP_DBG_TYPES_ON LWIP_DBG_ON
/* USER CODE BEGIN 1 */
#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS
//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE
#define ETHARP_DEBUG LWIP_DBG_ON
#define NETIF_DEBUG LWIP_DBG_ON
#define PBUF_DEBUG LWIP_DBG_ON
#define API_LIB_DEBUG LWIP_DBG_ON
#define API_MSG_DEBUG LWIP_DBG_ON
#define SOCKETS_DEBUG LWIP_DBG_ON
#define ICMP_DEBUG LWIP_DBG_ON
#define IGMP_DEBUG LWIP_DBG_ON
#define INET_DEBUG LWIP_DBG_ON
#define IP_DEBUG LWIP_DBG_ON
#define IP_REASS_DEBUG LWIP_DBG_ON
#define RAW_DEBUG LWIP_DBG_ON
#define MEM_DEBUG LWIP_DBG_ON
#define MEMP_DEBUG LWIP_DBG_ON
#define SYS_DEBUG LWIP_DBG_ON
#define TCP_DEBUG LWIP_DBG_ON
#define TCP_INPUT_DEBUG LWIP_DBG_ON
#define TCP_FR_DEBUG LWIP_DBG_ON
#define TCP_RTO_DEBUG LWIP_DBG_ON
#define TCP_CWND_DEBUG LWIP_DBG_ON
#define TCP_WND_DEBUG LWIP_DBG_ON
#define TCP_OUTPUT_DEBUG LWIP_DBG_ON
#define TCP_RST_DEBUG LWIP_DBG_ON
#define TCP_QLEN_DEBUG LWIP_DBG_ON
#define UDP_DEBUG LWIP_DBG_ON
#define TCPIP_DEBUG LWIP_DBG_ON
#define PPP_DEBUG LWIP_DBG_ON
#define SLIP_DEBUG LWIP_DBG_ON
#define DHCP_DEBUG LWIP_DBG_ON
#define AUTOIP_DEBUG LWIP_DBG_ON
#define SNMP_MSG_DEBUG LWIP_DBG_ON
#define SNMP_MIB_DEBUG LWIP_DBG_ON
#define DNS_DEBUG LWIP_DBG_ON
#endif //LWIP_DEBUG
若需关闭,将#define LWIP_DBG_TYPES_ON LWIP_DBG_ON 修改为
#define LWIP_DBG_TYPES_ON LWIP_DBG_OFF
至此LWIP已经配置完成,编译工程下到开发板中,可以ping通
如果要采用中断进行接收,接着进行以下操作:
将 ethernetif.c 文件中 ethernet_link_check_state 函数 中的 HAL_ETH_Start(&heth); 语句修改成 HAL_ETH_Start_IT(&heth);
将MX_LWIP_Process();程序中的 ethernetif_input(&gnetif); 剪切并粘贴到ETH中断服务函数中
注销ETH中断服务函数中 HAL_ETH_IRQHandler(&heth); 语句
将 lwip.c 文件中的 struct netif gnetif; 语句添加到 lwip.h 中,并且前加 extern
在 stm32f4xx_it.c 文件中添加 lwip.h 头文件
至此修改完成,编译工程下到开发板中,可以ping通