From ab06e715ed8e5a06c1032be7ba1ecf1eeae96dd7 Mon Sep 17 00:00:00 2001 From: helei Date: Sat, 22 Aug 2026 11:16:22 +0800 Subject: [PATCH] =?UTF-8?q?V1.5:=20=E4=BF=AE=E6=AD=A3485=E5=9B=9E=E5=A3=B0?= =?UTF-8?q?=E5=A4=84=E7=90=86(=E5=8E=BB=E6=8E=89TX=E5=90=8E=E6=B8=85?= =?UTF-8?q?=E7=BC=93=E5=86=B2,=E5=9B=9E=E5=A3=B0=E5=B8=A7=E6=8C=89?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E8=AF=86=E5=88=AB=E9=9D=99=E9=BB=98=E4=B8=A2?= =?UTF-8?q?=E5=BC=83,=E5=B8=A7=E5=A4=B4=E6=90=9C=E7=B4=A2=E5=85=9C?= =?UTF-8?q?=E5=BA=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c | 13 ++++++++++--- V1.5/鐗堟湰璇存槑.md | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c b/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c index 8fd2725..eea3346 100644 --- a/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c +++ b/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c @@ -78,6 +78,12 @@ static void feed_scale_dump_frame(const uint8_t *buf, uint16_t len) /* 从 485 应答中解析重量,应答 9 字节: 01 03 04 41 97 30 33 0B F6 */ static int feed_scale_parse_weight(const uint8_t *buf, uint16_t len, uint16_t *weight_100g) { + /* 485 回声(自己发出去的查询被 RX 听到):静默丢弃,不打日志不报错 */ + if (len == sizeof(RS485_WEIGHT_CMD) && + memcmp(buf, RS485_WEIGHT_CMD, sizeof(RS485_WEIGHT_CMD)) == 0) { + return -7; + } + feed_scale_dump_frame(buf, len); /* 定位应答帧头(站号+03+字节数04):485 回声或前导垃圾可能混在帧头前面 */ @@ -143,8 +149,7 @@ static void feed_scale_send_query(void) { USART2_ForceRxReset(); /* 清缓冲+重挂接收,防止前次残留状态吞掉本次应答 */ HAL_UART_Transmit(&huart2, (uint8_t *)RS485_WEIGHT_CMD, sizeof(RS485_WEIGHT_CMD), 100); - HAL_Delay(5); /* 等 485 回声(自己 TX 被 RX 听到)收尾 */ - USART2_ForceRxReset(); /* 清掉回声,应答帧从干净状态开始 */ + /* 不再清回声:回声与应答的合并帧由解析处的帧头搜索处理 */ } /* 读取 485 返回帧 */ @@ -386,7 +391,9 @@ void feedScaleProcess(void) len = feed_scale_read_frame(rx_buf, sizeof(rx_buf)); if (len > 0) { int prc = feed_scale_parse_weight(rx_buf, len, &cur_weight); - s_last_err = (prc == 0) ? 0 : (prc == -1 ? 2 : (prc == -2 ? 3 : (prc == -4 ? 4 : 5))); + if (prc != -7) { /* -7=回声帧:不影响状态显示 */ + s_last_err = (prc == 0) ? 0 : (prc == -1 ? 2 : (prc == -2 ? 3 : (prc == -4 ? 4 : (prc == -6 ? 6 : 5)))); + } if (prc == 0) s_last_ok_tick = HAL_GetTick(); if (prc == 0) { last_raw_weight = cur_weight; /* 保存原始毛重 */ diff --git a/V1.5/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index 57eded1..de95070 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -184,3 +184,5 @@ 鐜版瘡娆℃煡璇㈠墠 USART2_ForceRxReset() 寮哄埗澶嶄綅鎺ユ敹锛堟竻閿欒/缂撳啿+閲嶆寕涓柇锛夛紝棣栧寘涓嶅啀涓 - 淇 485 鍥炲0鍚冨簲绛斿抚澶达細鏌ヨ TX 鍚庣瓑 5ms 娓呭洖澹扮紦鍐诧紱瑙f瀽鏃舵敼涓哄湪甯у唴瀹氫綅 01 03 04 甯уご锛 鎶楀洖澹/鍓嶅鍨冨溇锛堝揩閫熷簲绛斾笉鍐嶈鍚炲墠鍑犱釜瀛楄妭锛 +- 淇 485 淇鏂规锛氬幓鎺 TX 鍚庢竻缂撳啿锛堜細鍚冩帀蹇熷洖澶嶇殑鍓嶅嚑涓瓧鑺傦級锛 + 鏀逛负鍥炲0甯ф寜鍐呭璇嗗埆闈欓粯涓㈠純锛堜笌鏌ヨ鍛戒护瀹屽叏涓鑷寸殑甯э級锛屽悎骞跺抚闈 01 03 04 甯уご鎼滅储瑙f瀽