我有一个项目,我必须通过以太网(TCP)Nucleo-STM32F429ZI与PC进行通信。 STM32将定期从传感器发送数据。我正在使用内置CubeMX的STM32CubeIDE。我已经用交叉电缆连接了STM32和PC。我在没有RTOS的情况下对其进行了配置,仅在具有静态IP地址的RAW API模式下使用LwIP。我在while循环中调用MX_LWIP_Process()函数。
我的问题是我无法收到STM32的ping响应,并且收到“目标主机无法访问”消息。我已经尝试了在论坛上找到的所有配置和建议,但都没有用。我已经尝试将我的项目配置调整为适合我的电路板示例的配置(LwIP_HTTP_Server_Netconn_RTOS可以正常工作和响应),但是它也不起作用。
在调试项目时,我可以收到带有IP地址请求的ARP帧,并且在调试器中可以看到输出帧正确,但是当整个有效负载传递给“ HAL_ETH_TransmitFrame”函数时,输出/响应框架不见了,我在Wireshark中看不到它。我已经检查了以太网外围设备的引脚配置和配置地址。我真的不知道我在想什么。
根据数据表,我已经在ETH CubeMX中启用了自动协商,并且已将PHY地址从默认值1更改为0,并将PHY链接从0xB变为0x10(我希望这是正确的)。
下面我粘贴了以太网PHY(LAN8742A)的配置
/* LAN8742A_PHY_ADDRESS Address*/
#define LAN8742A_PHY_ADDRESS 0U
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
#define PHY_RESET_DELAY ((uint32_t)0x00000FFFU)
/* PHY Configuration delay */
#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU)
#define PHY_READ_TO ((uint32_t)0x0000FFFFU)
#define PHY_WRITE_TO ((uint32_t)0x0000FFFFU)
/* Section 3: Common PHY Registers */
#define PHY_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */
#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */
#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */
#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */
#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */
#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */
#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */
#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */
#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */
#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */
#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */
#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */
#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */
#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */
#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */
/* Section 4: Extended PHY Registers */
#define PHY_SR ((uint16_t)0x1FU) /*!< PHY status register Offset */
#define PHY_SPEED_STATUS ((uint16_t)0x0004U) /*!< PHY Speed mask */
#define PHY_DUPLEX_STATUS ((uint16_t)0x0010U) /*!< PHY Duplex mask */
#define PHY_ISFR ((uint16_t)0x001DU) /*!< PHY Interrupt Source Flag register Offset */
#define PHY_ISFR_INT4 ((uint16_t)0x0010U) /*!< PHY Link down inturrupt */
如果您需要有关设置的任何其他信息,请询问。非常感谢您的帮助。