add data err type

This commit is contained in:
2025-08-25 20:35:54 +08:00
parent f5cfeb53d2
commit 70b8e3a602
2 changed files with 12 additions and 4 deletions

View File

@@ -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
/**************************************************************************************************/

View File

@@ -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;
}