Nucleo-STM32F429ZI以太网+ LWIP(RAW API)-不起作用

时间:2019-08-08 14:33:23

标签: c++ embedded stm32 ethernet lwip

我有一个项目,我必须通过以太网(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       */ 

如果您需要有关设置的任何其他信息,请询问。非常感谢您的帮助。

0 个答案:

没有答案