generated from hulk/gd32e23x_template_cmake_vscode
Rewrite the M1 instruction to detect the status flag or timeout and send normal data and read error response packets respectively
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user