STM32
直播中

王玲

7年用户 1427经验值
私信 关注
[问答]

stm32cubemx4.26版本下tcp udp客户端和服务器端均不能工作的原因?

故障现象 在netcon下 TCP客户端或服务器端程序均不能正常工作。

硬件平台EVA-407
PHY:DP83848
软件平台:STM32Cubemx


LWIP  2.0版

FREERTOS


我在stm32CubeMx 在针脚配置中

选定如下功能



lwip及 freertos 均用默认配置
产生代码并编译后,
自已编写如下用户代码 这是参照以往的官方例程


int main(void)
{
    /* USER CODE BEGIN 1 */
    /* USER CODE END 1 */
    /* MCU Configuration----------------------------------------------------------*/
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();
    /* USER CODE BEGIN Init */
    /* USER CODE END Init */
    /* Configure the system clock */
    SystemClock_Config();
    /* USER CODE BEGIN SysInit */
    /* USER CODE END SysInit */
    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    /* USER CODE BEGIN 2 */
    /* init code for LWIP */
   MX_LWIP_Init();
    /* Initialize tcp echo server */
    tcpecho_init();
    /* USER CODE END 2 */
    /* USER CODE BEGIN RTOS_MUTEX */
    /* add mutexes, ... */
    /* USER CODE END RTOS_MUTEX */
    /* USER CODE BEGIN RTOS_SEMAPHORES */
    /* add semaphores, ... */
    /* USER CODE END RTOS_SEMAPHORES */
    /* USER CODE BEGIN RTOS_TIMERS */
    /* start timers, add new ones, ... */
    /* USER CODE END RTOS_TIMERS */
    /* Create the thread(s) */
    /* definition and creation of defaultTask */
    osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
    defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
    /* USER CODE BEGIN RTOS_THREADS */
    /* add threads, ... */
    /* USER CODE END RTOS_THREADS */
    /* USER CODE BEGIN RTOS_QUEUES */
    /* add queues, ... */
    /* USER CODE END RTOS_QUEUES */

    /* Start scheduler */
    osKernelStart();
    /* We should never get here as control is now taken by the scheduler */
    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
        /* USER CODE END WHILE */
        /* USER CODE BEGIN 3 */
    }
    /* USER CODE END 3 */
}




static void tcpecho_thread(void *arg)
{
    struct netconn *conn, *newconn;
    err_t err;
    LWIP_UNUSED_ARG(arg);
    /* Create a new connection identifier. */
    conn = netconn_new(NETCONN_TCP);
    if (conn!=NULL)
    {
        /* Bind connection to well known port number 7. */
        err = netconn_bind(conn, NULL, 8080);
        if (err == ERR_OK)
        {
            /* Tell connection to go into listening mode. */
            netconn_listen(conn);
            while (1)
            {
                /* Grab new connection. */
                 err= netconn_accept(conn, newconn);
                /* Process the new connection. */
                if (newconn)
                {
                    struct netbuf *buf;
                    void *data;
                    u16_t len;
                    while ((err = netconn_recv(newconn, buf)) != NULL)
                    {
                        do
                        {
                            netbuf_data(buf,  data,  len);
                            netconn_write(newconn, data, len, NETCONN_COPY);
                        }
                        while (netbuf_next(buf) >= 0);
                        netbuf_delete(buf);
                    }
                    /* Close connection and discard connection identifier. */
                    netconn_close(newconn);
                    netconn_delete(newconn);
                }
            }
        }
        else
        {
            printf(" can not bind TCP netconn");
        }
    }
    else
    {
        printf("can not create TCP netconn");
    }
}
/*-----------------------------------------------------------------------------------*/
void tcpecho_init(void)
{
    sys_thread_new("tcpecho_thread", tcpecho_thread, NULL, DEFAULT_THREAD_STACKSIZE, tskIDLE_PRIORITY + 3);
}


运行后用网络调试助手可以连接上开发板,但数据回送。
如果我将开发板开成TCP的客户端 ,则无法联上服务器。
ping 开发板的92.168.1.10是可以ping通的。

我查不到原因,希望能得到指 导,或都是有stm32Cubemx4.26版本下的tcp客户端和服务器端的例程供参考以便查原因。





回帖(1)

听我讲

2024-5-9 16:56:06
在STM32CubeMX 4.26版本下,TCP和UDP客户端和服务器端不能正常工作的原因可能有以下几点:

1. 配置问题:请确保在CubeMX中正确配置了网络接口、LWIP、FreeRTOS等选项。检查是否启用了TCP和UDP协议,并确保网络接口的配置与硬件平台相匹配。

2. PHY芯片问题:确保DP83848 PHY芯片与STM32F407ZGT6的以太网接口兼容,并且已正确配置。检查PHY芯片的初始化代码是否正确。

3. 网络连接问题:请检查硬件连接,确保以太网线、路由器等设备正常工作。尝试使用其他设备连接同一网络,以排除网络问题。

4. 驱动问题:确保已正确配置并初始化以太网驱动。检查STM32的以太网驱动代码,确保所有必要的初始化步骤都已完成。

5. LWIP配置问题:检查LWIP配置文件(如lwipopts.h),确保已启用所需的功能,如TCP、UDP等。

6. FreeRTOS配置问题:检查FreeRTOS的配置,确保任务调度、内存管理等设置正确。

7. 用户代码问题:检查用户代码中是否有错误,如错误的网络接口初始化、错误的套接字创建和绑定等。

8. 中断和DMA配置:确保已正确配置以太网中断和DMA,以便正确处理网络数据包。

9. 调试和日志:在用户代码中添加调试日志,以便在出现问题时追踪错误。使用STM32的调试工具(如ST-LINK)逐步执行代码,查找问题所在。

10. 示例代码问题:如果您使用的是官方示例代码,请确保示例代码与您的硬件平台和软件配置兼容。

建议您按照上述步骤逐一排查问题,找出导致TCP和UDP客户端和服务器端不能正常工作的原因。如果问题仍然存在,您可以尝试寻求STM32社区或官方技术支持的帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分