From 98459dd31a6013028c4183b023bef5c081e30759 Mon Sep 17 00:00:00 2001 From: wangxujie Date: Wed, 12 Feb 2025 15:38:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9AD=E6=BB=A4=E6=B3=A2=E5=99=A8?= =?UTF-8?q?=E9=80=9F=E7=8E=87=EF=BC=8C=E6=8F=90=E9=AB=98=E9=87=87=E9=9B=86?= =?UTF-8?q?=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Inc/main.h | 39 ++++++++++++----------- Core/Src/freertos.c | 10 ++++-- Core/Src/main.c | 2 +- MDK-ARM/TEST2.uvoptx | 2 +- User/application/inc/tcpserverc.h | 1 + User/application/src/tcpserverc.c | 52 ++++++++++++++++++++++++++++--- User/driver/ad7124.c | 2 +- 7 files changed, 79 insertions(+), 29 deletions(-) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 6e65f84..e3a84c6 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -37,28 +37,29 @@ extern "C" #include "tcpserverc.h" #include "leds.h" #include -/* USER CODE END Includes */ + /* USER CODE END Includes */ -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ -extern uint8_t tcp_echo_flags_hart1; -extern uint8_t tcp_echo_flags_hart2; -extern uint8_t tcp_echo_flags_ble1; -extern uint8_t tcp_echo_flags_ble2; + /* Exported types ------------------------------------------------------------*/ + /* USER CODE BEGIN ET */ + extern uint8_t tcp_echo_flags_hart1; + extern uint8_t tcp_echo_flags_hart2; + extern uint8_t tcp_echo_flags_ble1; + extern uint8_t tcp_echo_flags_ble2; + extern uint8_t tcp_echo_flags_control; #define ARRAY_LEN(arr) (sizeof(arr)) / (sizeof(arr[0])) -typedef struct -{ - uint16_t rx_num; - uint8_t rx_data[512]; - uint8_t rx_data_temp[512]; - uint8_t tx_data[512]; -} uart_t; + typedef struct + { + uint16_t rx_num; + uint8_t rx_data[512]; + uint8_t rx_data_temp[512]; + uint8_t tx_data[512]; + } uart_t; -extern uart_t lcd_uart4; -extern uart_t ble2_uart3; -extern uart_t ble1_uart6; -extern uart_t hart1_uart5; -extern uart_t hart2_uart2; + extern uart_t lcd_uart4; + extern uart_t ble2_uart3; + extern uart_t ble1_uart6; + extern uart_t hart1_uart5; + extern uart_t hart2_uart2; #define DEST_IP_ADDR0 192 #define DEST_IP_ADDR1 168 #define DEST_IP_ADDR2 1 diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 3dd719b..20059c6 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -179,7 +179,7 @@ void start_led_toggle_task(void const *argument) /* Infinite loop */ for (;;) { - HAL_GPIO_TogglePin(LED2_G_GPIO_Port, LED2_G_Pin); + // HAL_GPIO_TogglePin(LED2_G_GPIO_Port, LED2_G_Pin); vTaskDelay(500); } /* USER CODE END start_led_toggle_task */ @@ -220,7 +220,12 @@ void start_adc_task(void const *argument) /* Infinite loop */ for (;;) { - ad7124_get_analog(STOP_NC_ADC); + uint8_t ch = 0; + for (ch = STOP_NC_ADC; ch < AD7124_CHANNEL_EN_MAX; ch++) + { + ad7124_get_analog(ch); + } + HAL_GPIO_TogglePin(LED2_G_GPIO_Port, LED2_G_Pin); if (huart5.RxState == HAL_UART_STATE_READY) { HAL_UARTEx_ReceiveToIdle_DMA(&huart5, hart1_uart5.rx_data_temp, ARRAY_LEN(hart1_uart5.rx_data_temp)); @@ -229,7 +234,6 @@ void start_adc_task(void const *argument) { HAL_UARTEx_ReceiveToIdle_DMA(&huart2, hart2_uart2.rx_data_temp, ARRAY_LEN(hart2_uart2.rx_data_temp)); } - vTaskDelay(1000); } /* USER CODE END start_adc_task */ } diff --git a/Core/Src/main.c b/Core/Src/main.c index 071ba82..b4a2a31 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -76,7 +76,7 @@ uint8_t tcp_echo_flags_hart1 = 0; uint8_t tcp_echo_flags_hart2 = 0; uint8_t tcp_echo_flags_ble1 = 0; uint8_t tcp_echo_flags_ble2 = 0; - +uint8_t tcp_echo_flags_control = 0; /* USER CODE END 0 */ /** diff --git a/MDK-ARM/TEST2.uvoptx b/MDK-ARM/TEST2.uvoptx index fadf10c..e07726f 100644 --- a/MDK-ARM/TEST2.uvoptx +++ b/MDK-ARM/TEST2.uvoptx @@ -213,7 +213,7 @@ 12 1 - ad7124_analog + ad7124_analog,0x10 13 diff --git a/User/application/inc/tcpserverc.h b/User/application/inc/tcpserverc.h index 46342cc..980cbca 100644 --- a/User/application/inc/tcpserverc.h +++ b/User/application/inc/tcpserverc.h @@ -7,6 +7,7 @@ #define TCP_PORT_HART2 5002 #define TCP_PORT_BLE1 5003 #define TCP_PORT_BLE2 5004 +#define TCP_PORT_CONTROL 5005 extern void tcp_echo_init(void); extern void user_send_data_hart1(uint8_t *data, uint16_t len); diff --git a/User/application/src/tcpserverc.c b/User/application/src/tcpserverc.c index 5526dc4..5c9af76 100644 --- a/User/application/src/tcpserverc.c +++ b/User/application/src/tcpserverc.c @@ -15,10 +15,12 @@ struct tcp_pcb *server_pcb_hart1 = NULL; struct tcp_pcb *server_pcb_hart2 = NULL; struct tcp_pcb *server_pcb_ble1 = NULL; struct tcp_pcb *server_pcb_ble2 = NULL; +struct tcp_pcb *server_pcb_control = NULL; extern uint8_t tcp_echo_flags_hart1; extern uint8_t tcp_echo_flags_hart2; extern uint8_t tcp_echo_flags_ble1; extern uint8_t tcp_echo_flags_ble2; +extern uint8_t tcp_echo_flags_control; /*接收回调函数*/ static err_t tcpecho_recv_hart1(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) @@ -113,6 +115,29 @@ static err_t tcpecho_recv_ble2(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, } return ERR_OK; } + +static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) +{ + uint8_t tcp_rx_data[128] = {0}; // 接受数据缓存区 + if (p != NULL) + { + /* 更新窗口*/ + tcp_echo_flags_control = 1; + tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 + server_pcb_control = tpcb; // 直接赋值 + memcpy(tcp_rx_data, (int *)p->payload, p->tot_len); + /*1. 对接收的数据做异或校验、帧头帧尾判断,校验失败返回信息,校验通过继续下一步、校验数据从帧头后面到校验位结束*/ + /*2. 判断所要执行的操作 读或写指令*/ + /*3. 对要发送的数据进行校验,组包,返回数据*/ + + pbuf_free(p); + } + else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 + { + return tcp_close(tpcb); + } + return ERR_OK; +} static err_t tcpecho_accept_hart1(void *arg, struct tcp_pcb *newpcb, err_t err) // 由于这个函数是*tcp_accept_fn类型的 // 形参的数量和类型必须一致 { @@ -140,14 +165,21 @@ static err_t tcpecho_accept_ble2(void *arg, struct tcp_pcb *newpcb, err_t err) / return ERR_OK; } +static err_t tcpecho_accept_control(void *arg, struct tcp_pcb *newpcb, err_t err) // 由于这个函数是*tcp_accept_fn类型的 +{ + tcp_recv(newpcb, tcpecho_recv_control); // 当收到数据时,回调用户自己写的tcpecho_recv + + return ERR_OK; +} void tcp_echo_init(void) { struct tcp_pcb *server_hart1 = NULL; struct tcp_pcb *server_hart2 = NULL; struct tcp_pcb *server_ble1 = NULL; struct tcp_pcb *server_ble2 = NULL; + struct tcp_pcb *server_control = NULL; - /* 创建一个TCP控制块 */ + /* 创建一路HART */ server_hart1 = tcp_new(); /* 绑定TCP控制块 */ @@ -159,7 +191,7 @@ void tcp_echo_init(void) /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ tcp_accept(server_hart1, tcpecho_accept_hart1); // 侦听到连接后,回调用户编写的tcpecho_accept - /* 创建一个TCP控制块 */ + /* 创建二路HART */ server_hart2 = tcp_new(); /* 绑定TCP控制块 */ @@ -171,7 +203,7 @@ void tcp_echo_init(void) /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ tcp_accept(server_hart2, tcpecho_accept_hart2); // 侦听到连接后,回调用户编写的tcpecho_accept - /* 创建一个TCP控制块 */ + /* 创建一路蓝牙 */ server_ble1 = tcp_new(); /* 绑定TCP控制块 */ @@ -183,7 +215,7 @@ void tcp_echo_init(void) /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ tcp_accept(server_ble1, tcpecho_accept_ble1); // 侦听到连接后,回调用户编写的tcpecho_accept - /* 创建一个TCP控制块 */ + /* 创建二路蓝牙 */ server_ble2 = tcp_new(); /* 绑定TCP控制块 */ @@ -194,6 +226,18 @@ void tcp_echo_init(void) /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ tcp_accept(server_ble2, tcpecho_accept_ble2); // 侦听到连接后,回调用户编写的tcpecho_accept + + /* 创建控制块 */ + server_control = tcp_new(); + + /* 绑定TCP控制块 */ + tcp_bind(server_control, IP_ADDR_ANY, TCP_PORT_CONTROL); + + /* 进入监听状态 */ + server_control = tcp_listen(server_control); + + /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ + tcp_accept(server_control, tcpecho_accept_control); // 侦听到连接后,回调用户编写的tcpecho_accept } void user_send_data_hart1(uint8_t *data, uint16_t len) diff --git a/User/driver/ad7124.c b/User/driver/ad7124.c index 08e7ce4..da10298 100644 --- a/User/driver/ad7124.c +++ b/User/driver/ad7124.c @@ -39,7 +39,7 @@ static ad7124_st_reg_t ad7124_regs[AD7124_REG_NO] = { {AD7124_CONFIG_5, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_5 */ {AD7124_CONFIG_6, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_6 */ {AD7124_CONFIG_7, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_7 */ - {AD7124_FILTER_0, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_0 */ + {AD7124_FILTER_0, 0x060000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_0 */ {AD7124_FILTER_1, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_1 */ {AD7124_FILTER_2, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_2 */ {AD7124_FILTER_3, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_3 */