diff --git a/Src/command.c b/Src/command.c index b11b654..e4e806a 100644 --- a/Src/command.c +++ b/Src/command.c @@ -255,22 +255,34 @@ void handle_command(const uint8_t *frame, uint8_t len) { // 仅基础命令,如 M1, M2, M3 switch (base_cmd) { case 1u: // M1: enable sensor report - // g_ultrasonic_measure_done = false; gpio_bit_toggle(GPIOA, GPIO_PIN_0); + + // 启动超声波PWM发送 ultrasonic_pwm_out_cycles(); - delay_ms(2); // TODO: 模拟超声结果等待延时 + // 等待超声测量完成,最多等待1ms (100次 * 10us) + // PWM发送约需16.7us (5周期 × 3.33us),超时时间充足 + uint16_t timeout_count = 0; + const uint16_t max_timeout = 100; + + while (!g_ultrasonic_measure_done && timeout_count < max_timeout) { + delay_10us(1); // 延时 10us + timeout_count++; + } gpio_bit_toggle(GPIOA, GPIO_PIN_0); - // g_ultrasonic_measure_done = false; - send_response(RESP_TYPE_OK, s_report_status_err, sizeof(s_report_status_err)); + // 根据等待结果发送不同的响应 + if (g_ultrasonic_measure_done) { + // 测量完成,发送正常响应 + send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok)); + } else { + // 超时,发送读取错误包(理论上不应该发生,因为PWM只需16.7us) + static const uint8_t timeout_error_data[] = { 0xFF, 0xFF, 0xFF, 0xFF }; + send_response(RESP_TYPE_OK, timeout_error_data, sizeof(timeout_error_data)); + } return; - - - - case 2u: // M2: disable sensor report send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok)); return;