打印
[其他ST产品]

使用LWIP协议栈,初始化LWIP

[复制链接]
483|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
610u|  楼主 | 2024-6-29 00:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "lwip.h"
void MX_LWIP_Init(void);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_ETH_Init();
    MX_LWIP_Init();

    while (1)
    {
        ethernetif_input(&gnetif);
        sys_check_timeouts();
    }
}
调试STM32H743与DP83848时,确保硬件连接正确,配置准确,并通过软件正确初始化和处理通信。

使用特权

评论回复
沙发
4y1b3| | 2024-6-30 19:45 | 只看该作者
确保连接正确:
MDIO和MDC:用于配置PHY,连接到相应的STM32引脚。
TX和RX对:用于数据传输和接收,确保连接到正确的引脚。
电源和地:确保PHY芯片的电源和地正确连接。

使用特权

评论回复
板凳
4y1b3| | 2024-6-30 19:45 | 只看该作者
初始化以太网接口和LWIP堆栈:
在main.c中调用以太网和LWIP初始化函数,并在主循环中处理以太网输入和定时器超时:
c
#include "stm32h7xx_hal.h"
#include "lwip.h"
#include "ethernetif.h"

ETH_HandleTypeDef heth;
ETH_TxPacketConfig TxConfig;
struct netif gnetif;

void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_ETH_Init(void);
void MX_LWIP_Init(void);
void Error_Handler(void);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_ETH_Init();
    MX_LWIP_Init();

    while (1)
    {
        ethernetif_input(&gnetif);
        sys_check_timeouts();
    }
}

void MX_ETH_Init(void)
{
    static uint8_t macaddress[6] = {0x00, 0x80, 0xE1, 0x00, 0x00, 0x00};

    heth.Instance = ETH;
    heth.Init.MACAddr = macaddress;
    heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
    heth.Init.RxMode = ETH_RXPOLLING_MODE;
    heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
    heth.Init.PhyAddress = DP83848_PHY_ADDRESS;

    if (HAL_ETH_Init(&heth) != HAL_OK)
    {
        Error_Handler();
    }

    memset(&TxConfig, 0, sizeof(ETH_TxPacketConfig));
    TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
    TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
    TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
}

void MX_LWIP_Init(void)
{
    // 初始化LWIP堆栈
    lwip_init();

    // 为netif分配内存并初始化
    netif_add(&gnetif, NULL, NULL, NULL, NULL, &ethernetif_init, &tcpip_input);
    netif_set_default(&gnetif);

    if (netif_is_link_up(&gnetif))
    {
        netif_set_up(&gnetif);
    }
    else
    {
        netif_set_down(&gnetif);
    }

    // 启用DHCP客户端(如果需要)
    // dhcp_start(&gnetif);
}


使用特权

评论回复
地板
而服务器人| | 2024-7-26 15:36 | 只看该作者
数据传输和接收,需要确保连接到正确的引脚。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

517

帖子

0

粉丝