野火挑战者V2 STM32F429IGT6开发板LWIP功能实现

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通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值