This commit is contained in:
王绪洁 2025-02-12 10:54:02 +08:00
parent a54ae53b95
commit 9c24285100
3 changed files with 35 additions and 56 deletions

View File

@ -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); memcpy(hart1_uart5.rx_data, hart1_uart5.rx_data_temp, Size);
if (tcp_echo_flags_hart1 == 1) if (tcp_echo_flags_hart1 == 1)
{ {
// tcp_send_flags_hart1 = 1;
user_send_data_hart1(hart1_uart5.rx_data, Size); 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)); 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); memcpy(hart2_uart2.rx_data, hart2_uart2.rx_data_temp, Size);
if (tcp_echo_flags_hart2 == 1) if (tcp_echo_flags_hart2 == 1)
{ {
// tcp_send_flags_hart2 = 1;
user_send_data_hart2(hart2_uart2.rx_data, Size); 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)); 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 CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */ /* User can add his own implementation to report the HAL error return state */
// __disable_irq(); __disable_irq();
// while (1) while (1)
// { {
// } }
/* USER CODE END Error_Handler_Debug */ /* USER CODE END Error_Handler_Debug */
} }

View File

@ -501,7 +501,7 @@
<Group> <Group>
<GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName> <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>

View File

@ -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_echo_flags_hart1 = 1;
tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度
memcpy(&server_pcb_hart1, &tpcb, sizeof(struct tcp_pcb *)); server_pcb_hart1 = tpcb; // 直接赋值
#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
memcpy(hart1_uart5.tx_data, (int *)p->payload, p->tot_len); memcpy(hart1_uart5.tx_data, (int *)p->payload, p->tot_len);
HART1_RTS_SEND; if (huart5.gState == HAL_UART_STATE_READY)
dma_usart_send(&huart5, hart1_uart5.tx_data, p->tot_len); {
// HART1_RTS_RECEIVE; HART1_RTS_SEND;
#endif dma_usart_send(&huart5, hart1_uart5.tx_data, p->tot_len);
memset(p->payload, 0, p->tot_len); }
pbuf_free(p); pbuf_free(p);
} }
else if (err == ERR_OK) // 检测到对方主动关闭连接时也会调用recv函数此时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_echo_flags_hart2 = 1;
tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度
memcpy(&server_pcb_hart2, &tpcb, sizeof(struct tcp_pcb *)); server_pcb_hart2 = tpcb; // 直接赋值
#if 1
memcpy(hart2_uart2.tx_data, (int *)p->payload, p->tot_len); memcpy(hart2_uart2.tx_data, (int *)p->payload, p->tot_len);
HART2_RTS_SEND; if (huart2.gState == HAL_UART_STATE_READY)
dma_usart_send(&huart2, hart2_uart2.tx_data, p->tot_len); {
#endif HART2_RTS_SEND;
#if 0 dma_usart_send(&huart2, hart2_uart2.tx_data, p->tot_len);
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
memset(p->payload, 0, p->tot_len);
pbuf_free(p); pbuf_free(p);
} }
else if (err == ERR_OK) // 检测到对方主动关闭连接时也会调用recv函数此时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_echo_flags_ble1 = 1;
tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 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); 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); pbuf_free(p);
} }
else if (err == ERR_OK) // 检测到对方主动关闭连接时也会调用recv函数此时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_echo_flags_ble2 = 1;
tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 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); memcpy(ble2_uart3.tx_data, (int *)p->payload, p->tot_len);
dma_usart_send(&huart3, ble2_uart3.tx_data, p->tot_len); if (huart3.gState == HAL_UART_STATE_READY)
{
memset(p->payload, 0, p->tot_len); dma_usart_send(&huart3, ble2_uart3.tx_data, p->tot_len);
}
pbuf_free(p); pbuf_free(p);
} }
else if (err == ERR_OK) // 检测到对方主动关闭连接时也会调用recv函数此时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) 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) 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) 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) 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);
}
} }