diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index f1c3266..18bd3f0 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -42,6 +42,7 @@ extern "C"
/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */
extern uint8_t tcp_echo_flags; // 标志位,连接成功置1
+extern uint8_t tcp_echo_flags_hart2; // 标志位,连接成功置1
#define ARRAY_LEN(arr) (sizeof(arr)) / (sizeof(arr[0]))
typedef struct
{
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 4e841fd..739aa1c 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -71,6 +71,7 @@ uart_t hart2_uart2 = {0};
uart_t hart1_uart5 = {0};
float current_buff[2] = {12.0f, 12.0f};
uint8_t tcp_echo_flags = 0;
+uint8_t tcp_echo_flags_hart2 = 0;
/* USER CODE END 0 */
/**
diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c
index ef2449a..6dc13cf 100644
--- a/Core/Src/stm32f4xx_it.c
+++ b/Core/Src/stm32f4xx_it.c
@@ -34,6 +34,7 @@
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
extern struct tcp_pcb *server_pcb1;
+extern struct tcp_pcb *server_pcb2;
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
@@ -327,9 +328,9 @@ void USART2_IRQHandler(void)
// 空闲中断
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE) != RESET)
{
- if (tcp_echo_flags == 1)
+ if (tcp_echo_flags_hart2 == 1)
{
- user_send_data(hart2_uart2.rx_data, hart2_uart2.rx_num);
+ user_send_data_hart2(hart2_uart2.rx_data, hart2_uart2.rx_num);
}
hart2_uart2.rx_num = 0;
__HAL_UART_CLEAR_IDLEFLAG(&huart2);
diff --git a/MDK-ARM/TEST2.uvoptx b/MDK-ARM/TEST2.uvoptx
index 761757b..a476ff9 100644
--- a/MDK-ARM/TEST2.uvoptx
+++ b/MDK-ARM/TEST2.uvoptx
@@ -148,7 +148,24 @@
-UB -O2254 -SF1800 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)
-
+
+
+ 0
+ 0
+ 117
+ 1
+ 134252704
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ../Core/Src/main.c
+
+ \\TEST2\../Core/Src/main.c\117
+
+
0
diff --git a/User/application/inc/tcpserverc.h b/User/application/inc/tcpserverc.h
index 34445bf..1b23e5a 100644
--- a/User/application/inc/tcpserverc.h
+++ b/User/application/inc/tcpserverc.h
@@ -3,8 +3,10 @@
#include "main.h"
-#define TCP_ECHO_PORT 5001
+#define TCP_PORT_HART1 5001
+#define TCP_PORT_HART2 5002
extern void tcp_echo_init(void);
extern void user_send_data(uint8_t *data, uint16_t len);
+extern void user_send_data_hart2(uint8_t *data, uint16_t len);
#endif
diff --git a/User/application/src/tcpserverc.c b/User/application/src/tcpserverc.c
index 48c1628..f9b5a2b 100644
--- a/User/application/src/tcpserverc.c
+++ b/User/application/src/tcpserverc.c
@@ -12,7 +12,9 @@
#include "main.h"
#include "ht1200m.h"
struct tcp_pcb *server_pcb1 = NULL;
+struct tcp_pcb *server_pcb2 = NULL;
extern uint8_t tcp_echo_flags;
+extern uint8_t tcp_echo_flags_hart2;
/*ջص*/
static err_t tcpecho_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{ // ӦӵĿƿ յ
@@ -56,6 +58,48 @@ static err_t tcpecho_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t
return ERR_OK;
}
+static err_t tcpecho_recv_hart2(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
+{ // ӦӵĿƿ յ
+ if (p != NULL)
+ {
+ /* ´*/
+ tcp_echo_flags_hart2 = 1;
+ tcp_recved(tpcb, p->tot_len); // ȡݵĿƿ õݵij
+ memcpy(&server_pcb2, &tpcb, sizeof(struct tcp_pcb *));
+#if 1
+ 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 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 0
+ memcpy(ble1_uart6.tx_data, (int *)p->payload, p->tot_len);
+ dma_usart_send(&huart6, ble1_uart6.tx_data, p->tot_len);
+#endif
+#if 0
+ memcpy(ble2_uart3.tx_data, (int *)p->payload, p->tot_len);
+ dma_usart_send(&huart3, ble2_uart3.tx_data, p->tot_len);
+#endif
+#if 0
+ memcpy(lcd_uart4.tx_data, (int *)p->payload, p->tot_len);
+ dma_usart_send(&huart4, lcd_uart4.tx_data, p->tot_len);
+#endif
+ memset(p->payload, 0, p->tot_len);
+ pbuf_free(p);
+ }
+ else if (err == ERR_OK) // ԷرʱҲrecvʱpΪ
+ {
+ return tcp_close(tpcb);
+ }
+ return ERR_OK;
+}
+
static err_t tcpecho_accept(void *arg, struct tcp_pcb *newpcb, err_t err) // *tcp_accept_fn͵
// βεͱһ
{
@@ -64,20 +108,40 @@ static err_t tcpecho_accept(void *arg, struct tcp_pcb *newpcb, err_t err) //
return ERR_OK;
}
+static err_t tcpecho_accept_hart2(void *arg, struct tcp_pcb *newpcb, err_t err) // *tcp_accept_fn͵
+ // βεͱһ
+{
+ tcp_recv(newpcb, tcpecho_recv_hart2); // յʱصûԼдtcpecho_recv
+
+ return ERR_OK;
+}
void tcp_echo_init(void)
{
- struct tcp_pcb *server_pcb = NULL;
+ struct tcp_pcb *server_pcb_hart1 = NULL;
+ struct tcp_pcb *server_pcb_hart2 = NULL;
/* һTCPƿ */
- server_pcb = tcp_new();
+ server_pcb_hart1 = tcp_new();
/* TCPƿ */
- tcp_bind(server_pcb, IP_ADDR_ANY, TCP_ECHO_PORT);
+ tcp_bind(server_pcb_hart1, IP_ADDR_ANY, TCP_PORT_HART1);
/* ״̬ */
- server_pcb = tcp_listen(server_pcb);
+ server_pcb_hart1 = tcp_listen(server_pcb_hart1);
/* עắʱעĺص */
- tcp_accept(server_pcb, tcpecho_accept); // Ӻصûдtcpecho_accept
+ tcp_accept(server_pcb_hart1, tcpecho_accept); // Ӻصûдtcpecho_accept
+ /*************************************************************************/
+ /* һTCPƿ */
+ server_pcb_hart2 = tcp_new();
+
+ /* TCPƿ */
+ tcp_bind(server_pcb_hart2, IP_ADDR_ANY, TCP_PORT_HART2);
+
+ /* ״̬ */
+ server_pcb_hart2 = tcp_listen(server_pcb_hart2);
+
+ /* עắʱעĺص */
+ tcp_accept(server_pcb_hart2, tcpecho_accept_hart2); // Ӻصûдtcpecho_accept
}
void user_send_data(uint8_t *data, uint16_t len)
@@ -87,3 +151,133 @@ void user_send_data(uint8_t *data, uint16_t len)
tcp_write(server_pcb1, data, len, 1);
}
}
+void user_send_data_hart2(uint8_t *data, uint16_t len)
+{
+ if (tcp_echo_flags_hart2 == 1)
+ {
+ tcp_write(server_pcb2, data, len, 1);
+ }
+}
+// #include "lwip/tcp.h"
+// #include "lwip/pbuf.h"
+// #include "lwip/err.h"
+// #include "lwip/sys.h"
+// #include "stm32f4xx_hal.h" // ݾ STM32 ϵͷļ
+
+// // ˿ں
+// #define PORT1 5000
+// #define PORT2 6000
+
+// // TCP ״̬
+// enum tcp_states {
+// TCP_STATE_CLOSED,
+// TCP_STATE_LISTEN,
+// TCP_STATE_CONNECTED
+// };
+
+// // TCP ӽṹ
+// struct tcp_connection {
+// struct tcp_pcb *pcb;
+// enum tcp_states state;
+// };
+
+// // TCP ջص
+// static err_t tcp_recv_callback(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) {
+// if (err == ERR_OK && p!= NULL) {
+// // ӡյ
+// for (u16_t i = 0; i < p->len; i++) {
+// printf("Received on TCP: %c", ((char *)p->payload)[i]);
+// }
+// printf("\n");
+// // ͷŽջ
+// pbuf_free(p);
+// }
+// return ERR_OK;
+// }
+
+// // TCP ص
+// static void tcp_err_callback(void *arg, err_t err) {
+// struct tcp_connection *conn = (struct tcp_connection *)arg;
+// if (conn->pcb!= NULL) {
+// tcp_close(conn->pcb);
+// mem_free(conn);
+// }
+// }
+
+// // TCP ӻص
+// static err_t tcp_accept_callback(void *arg, struct tcp_pcb *pcb, err_t err) {
+// struct tcp_connection *conn = (struct tcp_connection *)mem_malloc(sizeof(struct tcp_connection));
+// if (conn == NULL) {
+// tcp_close(pcb);
+// return ERR_MEM;
+// }
+// conn->pcb = pcb;
+// conn->state = TCP_STATE_CONNECTED;
+// tcp_arg(pcb, conn);
+// tcp_recv(pcb, tcp_recv_callback);
+// tcp_err(pcb, tcp_err_callback);
+// return ERR_OK;
+// }
+
+// int main(void) {
+// struct tcp_pcb *pcb1;
+// struct tcp_pcb *pcb2;
+// struct tcp_connection *conn1;
+// struct tcp_connection *conn2;
+
+// // ʼ STM32 Ӳ̫
+// HAL_Init();
+// // ʼ LwIP Эջ
+// lwip_init();
+
+// // һ TCP PCB
+// pcb1 = tcp_new();
+// if (pcb1 == NULL) {
+// printf("Error creating TCP PCB1\n");
+// return -1;
+// }
+// if (tcp_bind(pcb1, IP_ADDR_ANY, PORT1)!= ERR_OK) {
+// printf("Error binding TCP PCB1 to port %d\n", PORT1);
+// tcp_close(pcb1);
+// return -1;
+// }
+// pcb1 = tcp_listen(pcb1);
+// conn1 = mem_malloc(sizeof(struct tcp_connection));
+// if (conn1 == NULL) {
+// tcp_close(pcb1);
+// return -1;
+// }
+// conn1->pcb = pcb1;
+// conn1->state = TCP_STATE_LISTEN;
+// tcp_arg(pcb1, conn1);
+// tcp_accept(pcb1, tcp_accept_callback);
+
+// // ڶ TCP PCB
+// pcb2 = tcp_new();
+// if (pcb2 == NULL) {
+// printf("Error creating TCP PCB2\n");
+// return -1;
+// }
+// if (tcp_bind(pcb2, IP_ADDR_ANY, PORT2)!= ERR_OK) {
+// printf("Error binding TCP PCB2 to port %d\n", PORT2);
+// tcp_close(pcb2);
+// return -1;
+// }
+// pcb2 = tcp_listen(pcb2);
+// conn2 = mem_malloc(sizeof(struct tcp_connection));
+// if (conn2 == NULL) {
+// tcp_close(pcb2);
+// return -1;
+// }
+// conn2->pcb = pcb2;
+// conn2->state = TCP_STATE_LISTEN;
+// tcp_arg(pcb2, conn2);
+// tcp_accept(pcb2, tcp_accept_callback);
+
+// while (1) {
+// // ѭдϵͳʱ
+// sys_check_timeouts();
+// }
+
+// return 0;
+// }