From 70b8e3a60233cdd3427c45ea4f383ea494b48c47 Mon Sep 17 00:00:00 2001 From: yelvlab Date: Mon, 25 Aug 2025 20:35:54 +0800 Subject: [PATCH] add data err type --- Inc/ultrasonic_analog.h | 2 +- Src/command.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Inc/ultrasonic_analog.h b/Inc/ultrasonic_analog.h index 5aa0140..6f86d07 100644 --- a/Inc/ultrasonic_analog.h +++ b/Inc/ultrasonic_analog.h @@ -10,7 +10,7 @@ extern volatile bool g_ultrasonic_measure_done; #define ULTRASONIC_TX_CYCLES 5U /* 发送5个PWM周期驱动换能器 */ #define ULTRASONIC_TX_RINGDOWN_RELOAD 240U // 240us -#define ULTRASONIC_MAX_TOF_RELOAD 1000U // 1000us +#define ULTRASONIC_MAX_TOF_RELOAD 2000U // 1000us /**************************************************************************************************/ diff --git a/Src/command.c b/Src/command.c index 18b9721..4fb14c9 100644 --- a/Src/command.c +++ b/Src/command.c @@ -72,6 +72,7 @@ #define RESP_TYPE_HEADER_ERR 0xF2 /**< 包头错误 */ #define RESP_TYPE_TYPE_ERR 0xF3 /**< 类型错误 */ #define RESP_TYPE_LEN_ERR 0xF4 /**< 长度错误 */ +#define RESP_TYPE_DATA_ERR 0xF5 /**< 数据错误 */ /** @} */ /* ============================================================================ @@ -251,7 +252,7 @@ void handle_command(const uint8_t *frame, uint8_t len) { // 启动超声波PWM发送 ultrasonic_pwm_out_cycles(); uint16_t timeout_count = 0; - const uint16_t max_timeout = 150; + const uint16_t max_timeout = 250; while (!g_ultrasonic_measure_done && timeout_count < max_timeout) { delay_10us(1); // 延时 10us @@ -263,7 +264,7 @@ void handle_command(const uint8_t *frame, uint8_t len) { ultrasonic_distance_raw_value_report(); } else { static const uint8_t timeout_error_data[] = {0xFF, 0xFF }; - send_response(RESP_TYPE_OK, timeout_error_data, sizeof(timeout_error_data)); + send_response(RESP_TYPE_DATA_ERR, timeout_error_data, sizeof(timeout_error_data)); } return; @@ -431,7 +432,13 @@ void ultrasonic_distance_raw_value_report(void) { // 读取定时器计数值(微秒) uint16_t timer_count_us = timer_counter_read(US_ECHO_TIMER); - + + if (timer_count_us < ULTRASONIC_TX_RINGDOWN_RELOAD) { + // 超出最大计时范围,返回错误 + send_response(RESP_TYPE_DATA_ERR, s_report_status_err, sizeof(s_report_status_err)); + return; + } + // 计算距离:定时器计数值 * 17 = 距离(0.1mm) // 声速340m/s,往返距离,时间单位us // 距离(mm) = (timer_count_us * 340) / (2 * 1000) = timer_count_us * 0.17 @@ -444,4 +451,5 @@ void ultrasonic_distance_raw_value_report(void) { // 发送响应包 send_response(RESP_TYPE_OK, raw_result, sizeof(raw_result)); + return; }