From 9c24285100fdc8ac327b1a02d45699edbad53914 Mon Sep 17 00:00:00 2001 From: wangxujie Date: Wed, 12 Feb 2025 10:54:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Src/main.c | 10 ++-- MDK-ARM/TEST2.uvoptx | 2 +- User/application/src/tcpserverc.c | 79 ++++++++++++------------------- 3 files changed, 35 insertions(+), 56 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index 5395b65..071ba82 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -225,7 +225,6 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) memcpy(hart1_uart5.rx_data, hart1_uart5.rx_data_temp, Size); if (tcp_echo_flags_hart1 == 1) { - // tcp_send_flags_hart1 = 1; user_send_data_hart1(hart1_uart5.rx_data, Size); } HAL_UARTEx_ReceiveToIdle_DMA(&huart5, hart1_uart5.rx_data_temp, ARRAY_LEN(hart1_uart5.rx_data_temp)); @@ -238,7 +237,6 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) memcpy(hart2_uart2.rx_data, hart2_uart2.rx_data_temp, Size); if (tcp_echo_flags_hart2 == 1) { - // tcp_send_flags_hart2 = 1; user_send_data_hart2(hart2_uart2.rx_data, Size); } HAL_UARTEx_ReceiveToIdle_DMA(&huart2, hart2_uart2.rx_data_temp, ARRAY_LEN(hart2_uart2.rx_data_temp)); @@ -287,10 +285,10 @@ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ - // __disable_irq(); - // while (1) - // { - // } + __disable_irq(); + while (1) + { + } /* USER CODE END Error_Handler_Debug */ } diff --git a/MDK-ARM/TEST2.uvoptx b/MDK-ARM/TEST2.uvoptx index 612233e..fadf10c 100644 --- a/MDK-ARM/TEST2.uvoptx +++ b/MDK-ARM/TEST2.uvoptx @@ -501,7 +501,7 @@ Drivers/STM32F4xx_HAL_Driver - 0 + 1 0 0 0 diff --git a/User/application/src/tcpserverc.c b/User/application/src/tcpserverc.c index 0710ea4..5526dc4 100644 --- a/User/application/src/tcpserverc.c +++ b/User/application/src/tcpserverc.c @@ -28,20 +28,13 @@ static err_t tcpecho_recv_hart1(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, /* 更新窗口*/ tcp_echo_flags_hart1 = 1; tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - memcpy(&server_pcb_hart1, &tpcb, sizeof(struct tcp_pcb *)); -#if 0 - memcpy(hart2_uart2.tx_data, (int *)p->payload, p->tot_len); - HART2_RTS_SEND; - HAL_UART_Transmit(&huart2, hart2_uart2.tx_data, p->tot_len, 1000); - HART2_RTS_RECEIVE; -#endif -#if 1 + server_pcb_hart1 = tpcb; // 直接赋值 memcpy(hart1_uart5.tx_data, (int *)p->payload, p->tot_len); - HART1_RTS_SEND; - dma_usart_send(&huart5, hart1_uart5.tx_data, p->tot_len); - // HART1_RTS_RECEIVE; -#endif - memset(p->payload, 0, p->tot_len); + if (huart5.gState == HAL_UART_STATE_READY) + { + HART1_RTS_SEND; + dma_usart_send(&huart5, hart1_uart5.tx_data, p->tot_len); + } pbuf_free(p); } else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 @@ -58,20 +51,14 @@ static err_t tcpecho_recv_hart2(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, /* 更新窗口*/ tcp_echo_flags_hart2 = 1; tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - memcpy(&server_pcb_hart2, &tpcb, sizeof(struct tcp_pcb *)); -#if 1 + server_pcb_hart2 = tpcb; // 直接赋值 memcpy(hart2_uart2.tx_data, (int *)p->payload, p->tot_len); - HART2_RTS_SEND; - dma_usart_send(&huart2, hart2_uart2.tx_data, p->tot_len); -#endif -#if 0 - memcpy(hart1_uart5.tx_data, (int *)p->payload, p->tot_len); - HART1_RTS_SEND; - HAL_UART_Transmit(&huart5, hart1_uart5.tx_data, p->tot_len, 100); - HART1_RTS_RECEIVE; -#endif + if (huart2.gState == HAL_UART_STATE_READY) + { + HART2_RTS_SEND; + dma_usart_send(&huart2, hart2_uart2.tx_data, p->tot_len); + } - memset(p->payload, 0, p->tot_len); pbuf_free(p); } else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 @@ -88,12 +75,14 @@ static err_t tcpecho_recv_ble1(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, /* 更新窗口*/ tcp_echo_flags_ble1 = 1; tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - memcpy(&server_pcb_ble1, &tpcb, sizeof(struct tcp_pcb *)); + server_pcb_ble1 = tpcb; // 直接赋值 memcpy(ble1_uart6.tx_data, (int *)p->payload, p->tot_len); - dma_usart_send(&huart6, ble1_uart6.tx_data, p->tot_len); + if (huart6.gState == HAL_UART_STATE_READY) + { + dma_usart_send(&huart6, ble1_uart6.tx_data, p->tot_len); + } - memset(p->payload, 0, p->tot_len); pbuf_free(p); } else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 @@ -110,12 +99,12 @@ static err_t tcpecho_recv_ble2(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, /* 更新窗口*/ tcp_echo_flags_ble2 = 1; tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - memcpy(&server_pcb_ble2, &tpcb, sizeof(struct tcp_pcb *)); - + server_pcb_ble2 = tpcb; // 直接赋值 memcpy(ble2_uart3.tx_data, (int *)p->payload, p->tot_len); - dma_usart_send(&huart3, ble2_uart3.tx_data, p->tot_len); - - memset(p->payload, 0, p->tot_len); + if (huart3.gState == HAL_UART_STATE_READY) + { + dma_usart_send(&huart3, ble2_uart3.tx_data, p->tot_len); + } pbuf_free(p); } else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 @@ -209,30 +198,22 @@ void tcp_echo_init(void) void user_send_data_hart1(uint8_t *data, uint16_t len) { - if (tcp_echo_flags_hart1 == 1) - { - tcp_write(server_pcb_hart1, data, len, 1); - } + + tcp_write(server_pcb_hart1, data, len, 1); } void user_send_data_hart2(uint8_t *data, uint16_t len) { - if (tcp_echo_flags_hart2 == 1) - { - tcp_write(server_pcb_hart2, data, len, 1); - } + + tcp_write(server_pcb_hart2, data, len, 1); } void user_send_data_ble1(uint8_t *data, uint16_t len) { - if (tcp_echo_flags_ble1 == 1) - { - tcp_write(server_pcb_ble1, data, len, 1); - } + + tcp_write(server_pcb_ble1, data, len, 1); } void user_send_data_ble2(uint8_t *data, uint16_t len) { - if (tcp_echo_flags_ble2 == 1) - { - tcp_write(server_pcb_ble2, data, len, 1); - } + + tcp_write(server_pcb_ble2, data, len, 1); }